pkg://MAKEDEV-3.3.8-1.src.rpm:96139/MAKEDEV-3.3.8-1.tar.gz
info downloads
MAKEDEV-3.3.8/ 0040775 0004716 0004724 00000000000 07731332761 011615 5 ustar nalin nalin MAKEDEV-3.3.8/MAKEDEV.c 0100664 0004716 0004724 00000056050 07445712735 013045 0 ustar nalin nalin /*
* Copyright 2000,2001 Red Hat, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* This file is formatted to fit on a 132-column screen.
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <assert.h>
#include <ctype.h>
#include <dirent.h>
#include <errno.h>
#include <grp.h>
#include <limits.h>
#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#ifndef CFGDIR
#define CFGDIR "/etc/makedev.d"
#endif
#ifndef DEVDIR
#define DEVDIR "/dev"
#endif
#define VERBOSE (1 << 0)
#define FAKE (1 << 1)
#define DELETE (1 << 2)
#define IGNORE (1 << 3)
#define MANIFEST (1 << 4)
#define SCRIPT (1 << 5)
enum entry_type {
BLOCK = 'b',
CHAR = 'c',
LINK = 'l',
ALIAS = 'a',
SOCKET = 's',
MACRO = '=',
};
struct device_entry {
enum entry_type type;
unsigned int perms; /* permissions */
const char *user; /* device owner */
const char *group; /* device group */
unsigned int major; /* device major number */
unsigned int minor; /* minor number of the first device */
unsigned int minor_step; /* difference between minor one and two */
unsigned int num; /* number of devices to create */
const char *name; /* format string for the devices */
unsigned int base; /* number to start formatting names with */
const char *link_target; /* target for a symlink, if it is one */
struct device_entry *next;
};
struct dirlist_entry {
char *path;
struct dirlist_entry *next;
};
struct macro {
const char *name, *expansion;
struct macro *next;
};
struct device_entry *devices = NULL, *last_device = NULL;
struct dirlist_entry *dirlist = NULL;
struct macro *macros = NULL;
static void makedevices(const char *directory, const char *fragment, int max, int flags);
/* Check if the directory list contains a particular directory. */
static int
dirlist_contains(const char *directory)
{
struct dirlist_entry *entry = dirlist;
while(entry) {
if(strcmp(entry->path, directory) == 0) {
return 1;
}
entry = entry->next;
}
return 0;
}
static void
dirlist_add(const char *directory)
{
struct dirlist_entry *entry = NULL;
entry = malloc(sizeof(struct dirlist_entry));
entry->path = strdup(directory);
entry->next = dirlist;
dirlist = entry;
}
/* Make the device files and links associated with this entry. */
static int
makenodes(const char *directory, const char *fragment, struct device_entry *entry, int max, int flags)
{
struct passwd *pwd;
struct group *grp;
struct stat st;
char path[PATH_MAX], pattern[PATH_MAX], tmp[PATH_MAX];
mode_t mode;
dev_t dev;
int mul, frlen, dirlen, i;
int ret = 0;
/* Compute the lengths of our fixed-length strings, because we'll be
* using them a lot. */
frlen = strlen(fragment);
dirlen = strlen(directory);
/* Limit the number of devices we'll create per entry. */
for(mul = 0; (max != 0) && (mul < entry->num); max--, mul++) {
memset(pattern, '\0', sizeof(pattern));
memset(path, '\0', sizeof(path));
memset(tmp, '\0', sizeof(tmp));
/* Build the file name. */
snprintf(pattern, sizeof(pattern),
"%s/%s", directory, entry->name);
/* If this is not the first device, and there's not some
* format specifier in there, append a "%d", which makes things
* like hda/hda1 really easy to do. */
if(mul > 0) {
if(strchr(pattern, '%') == NULL) {
strncat(pattern, "%d", sizeof(pattern) - 1 - strlen(pattern));
}
}
snprintf(path, sizeof(path), pattern, mul + entry->base);
/* Check if the target matches the fragment. */
if(strncmp(fragment, path + dirlen + 1, frlen) != 0) {
continue;
}
ret = 1;
/* If the device is in a subdirectory, go ahead and create it
* if it doesn't already exist. */
for(i = 0; path[i] != '\0'; i++) {
if( !((path[i] == '/') && (i > 0)) )
continue;
strcpy(tmp, path);
tmp[i] = '\0';
if((lstat(tmp, &st) != -1) || (errno != ENOENT))
continue;
if(dirlist_contains(tmp))
continue;
dirlist_add(tmp);
if(flags & MANIFEST) {
printf("%%attr(0%o, %s, %s) %%dir %s\n", 0755, "root", "root", tmp);
} else
if(flags & SCRIPT) {
printf("mkdir -p -m 0%o %s\n", 0755, tmp);
printf("chown %s.%s %s\n", "root", "root", tmp);
} else
if(flags & VERBOSE) {
printf("mkdir %s\n", tmp);
}
if(!(flags & FAKE)) {
mkdir(tmp, 0755);
if(!(flags & MANIFEST)) {
pwd = getpwnam(entry->user);
grp = getgrnam(entry->group);
chown(tmp, pwd ? pwd->pw_uid : 0, grp ? grp->gr_gid : 0);
}
}
}
/* Set the mode. */
assert((entry->type == BLOCK) ||
(entry->type == CHAR) ||
(entry->type == LINK) ||
(entry->type == ALIAS) ||
(entry->type == SOCKET));
mode = entry->perms;
if(entry->type == BLOCK) {
mode |= S_IFBLK;
} else
if(entry->type == CHAR) {
mode |= S_IFCHR;
} else
if(entry->type == LINK) {
mode |= S_IFLNK;
}
/* Actually create device files. */
if((entry->type == BLOCK) || (entry->type == CHAR)) {
/* Set the major/minor numbers. */
dev = makedev(entry->major, entry->minor + (mul * entry->minor_step));
/* Determine the IDs of the owner and her group. */
pwd = getpwnam(entry->user);
grp = getgrnam(entry->group);
/* Check that we aren't trying anything unnecessary. */
if(lstat(path, &st) == 0)
if(((entry->type == CHAR) && S_ISCHR(st.st_mode)) || ((entry->type == BLOCK) && S_ISBLK(st.st_mode)))
if(st.st_rdev == dev)
if(st.st_uid == pwd->pw_uid)
if(st.st_gid == pwd->pw_gid)
if((st.st_mode & 0777) == entry->perms) {
/* We know how to create this, but we didn't. */
ret = 1;
continue;
}
/* Log a message if we're being verbose. */
if(flags & MANIFEST) {
printf("%%attr(0%o, %s, %s)", entry->perms, entry->user, entry->group);
printf(" %%dev(%c, %d, %d)",
(entry->type == CHAR) ? 'c' :
((entry->type == BLOCK) ? 'b' : '?'),
entry->major,
entry->minor + (mul * entry->minor_step));
printf(" %s\n", path);
} else
if(flags & SCRIPT) {
printf("mknod -m 0%o %s %c %d %d\n",
entry->perms, path, (entry->type == CHAR) ? 'c' :
((entry->type == BLOCK) ? 'b' : '?'),
entry->major,
entry->minor + (mul * entry->minor_step));
printf("chown %s.%s %s\n", "root", "root", path);
} else
if(flags & VERBOSE) {
printf("create %-30s %c %3d %3d %s:%s %3o\n",
path + dirlen + 1,
(entry->type == CHAR) ? 'c' :
((entry->type == BLOCK) ? 'b' : '?'),
entry->major,
entry->minor + (mul * entry->minor_step),
entry->user,
entry->group,
mode & 0777);
}
/* Create the node. */
if(!(flags & (FAKE | MANIFEST))) {
int r, made = 0;
strcpy(pattern, path);
strcat(pattern, "-");
/* First, create it with a different name. */
r = mknod(pattern, mode, makedev(entry->major, entry->minor + mul * entry->minor_step));
/* Well, we created something, so keep track
* of that fact in case things go awry. */
if(r != -1) {
made = 1;
}
/* Set permissions. */
if(r != -1) {
r = chmod(pattern, mode);
}
/* Set ownership. */
if(r != -1) {
r = chown(pattern, pwd ? pwd->pw_uid : -1, grp ? grp->gr_gid : -1);
}
/* Finally rename it to the right place. */
if(r != -1) {
r = rename(pattern, path);
}
/* Report any errors. */
if(r != 0) {
fprintf(stderr, "MAKEDEV: error making %s: %s\n", path, strerror(errno));
exit(8);
} else {
/* Clean up. */
if(made) {
unlink(pattern);
}
}
}
}
/* We're creating symlinks today. */
if(entry->type == LINK) {
/* Check that we aren't trying anything unnecessary. */
memset(tmp, '\0', sizeof(tmp));
if(lstat(path, &st) == 0)
if(S_ISLNK(st.st_mode))
if(readlink(path, tmp, sizeof(tmp) - 1) != -1)
if(strcmp(tmp, entry->link_target) == 0) {
/* We know how to create this, but didn't need
* to, as it was already there. */
ret = 1;
continue;
}
/* Mark that we're going to make a symlink. */
if(flags & MANIFEST) {
printf("%%attr(0%o, %s, %s) %s\n", 0777, "root", "root", path);
} else
if(flags & SCRIPT) {
printf("ln -s %s %s\n", path + dirlen + 1, entry->link_target);
} else
if(flags & VERBOSE) {
printf("symlink %s -> %s\n", path + dirlen + 1, entry->link_target);
}
/* Make the symlink. */
if(!(flags & FAKE)) {
int r;
r = symlink(entry->link_target, path);
if(r != 0) {
fprintf(stderr, "error making %s: %s\n", path, strerror(errno));
exit(9);
}
}
}
if(entry->type == SOCKET) {
struct sockaddr_un sun;
int sockfd, r;
memset(&sun, 0, sizeof(sun));
sun.sun_family = AF_UNIX;
snprintf(sun.sun_path, sizeof(sun.sun_path), "%s/%s", directory, entry->name);
/* Check that we aren't trying anything unnecessary. */
if(lstat(sun.sun_path, &st) == 0)
if(S_ISSOCK(st.st_mode))
if(st.st_uid == pwd->pw_uid)
if(st.st_gid == pwd->pw_gid)
if((st.st_mode & 0777) == entry->perms) {
/* We know how to create this, but we didn't
* need to bother. */
ret = 1;
continue;
}
/* Log a message if we're being verbose. */
if(flags & MANIFEST) {
printf("%%attr(0%o, %s, %s) %s\n", entry->perms, entry->user, entry->group, sun.sun_path);
} else
if(flags & SCRIPT) {
printf("mksock -m 0%o %s\n", entry->perms, sun.sun_path);
printf("chmod %s.%s %s\n", entry->user, entry->group, sun.sun_path);
} else
if(flags & VERBOSE) {
printf("bind %-30s %14s:%s %3o\n", entry->name, entry->user, entry->group, entry->perms);
}
sockfd = socket(PF_UNIX, SOCK_STREAM, 0);
if(!(flags & FAKE)) {
pwd = getpwnam(entry->user);
grp = getgrnam(entry->group);
r = bind(sockfd, (struct sockaddr*)&sun, sizeof(sun));
if(r != -1) {
r = chmod(sun.sun_path, entry->perms);
}
if(r != -1) {
if(!(flags & MANIFEST)) {
r = chown(sun.sun_path, pwd ? pwd->pw_uid : -1, grp ? grp->gr_gid : -1);
}
}
if(r != 0) {
fprintf(stderr, "MAKEDEV: error making %s: %s\n", path, strerror(errno));
exit(11);
}
}
close(sockfd);
}
/* We're executing an aliased item. */
if(entry->type == ALIAS) {
makedevices(directory, entry->link_target, max, flags);
}
}
return ret;
}
void
makedevices(const char *directory, const char *fragment, int max, int flags)
{
struct device_entry *entry = NULL;
int matched = 0, relevant = 0;
char buf[PATH_MAX];
while((fragment[relevant] != '\0') && (isalnum(fragment[relevant]) || (fragment[relevant] == '/')))
relevant++;
for(entry = devices;
(entry != NULL) && (entry->name != NULL);
entry = entry->next) {
if(entry->type == LINK) {
char *p = buf;
memset(buf, '\0', sizeof(buf));
strncpy(buf, entry->name, sizeof(buf) - 1);
if(strrchr(buf, '/') != NULL) {
p = strrchr(buf, '/') + 1;
strncpy(p, entry->link_target, sizeof(buf) - 1 - (p - buf));
} else {
strncpy(buf, entry->link_target, sizeof(buf) - 1);
}
}
matched += makenodes(directory, fragment, entry, max, flags);
}
if(matched == 0) {
fprintf(stderr, "don't know how to make device \"%s\"\n", fragment);
}
}
void
read_config_line(const char *path, const char *pline)
{
char *p, *q;
char buf[LINE_MAX], line[LINE_MAX];
struct device_entry *entry = NULL;
struct macro *macro = NULL;
enum entry_type type = -1;
/* Expand macros. This is not as elegant as it could be, but it
* should suffice for our use here. */
strncpy(line, pline, sizeof(line) - 1);
line[sizeof(line) - 1] = '\0';
while(strchr(line, '$')) {
strncpy(buf, line, sizeof(buf) - 1);
buf[sizeof(buf) - 1] = '\0';
p = strchr(buf, '$');
for(macro = macros; macro != NULL; macro = macro->next) {
if(!strncmp(p + 1, macro->name, strlen(macro->name))) {
q = p + strlen(p) + strlen(macro->expansion) - (1 + strlen(macro->name));
memmove(p + strlen(macro->expansion), p + 1 + strlen(macro->name),
strlen(p + 1 + strlen(macro->name)));
memcpy(p, macro->expansion, strlen(macro->expansion));
q[0] = '\0';
break;
}
}
if(macro == NULL) {
fprintf(stderr, "unrecognized macro at \"%s\"\n", pline);
exit(6);
}
macro = NULL;
strncpy(line, buf, sizeof(line) - 1);
line[sizeof(line) - 1] = '\0';
}
/* First, skip leading whitespace. */
for(p = line; (*p != '\0') && isspace(*p); p++);
/* If it's a comment of some kind, ignore it. */
if(*p == '\0') return;
if(*p == '\n') return;
if(*p == '\r') return;
if(*p == '#') return;
/* Now determine what kind of entry this is. */
if(*p == BLOCK) {
type = BLOCK;
} else
if(*p == CHAR) {
type = CHAR;
} else
if(*p == LINK) {
type = LINK;
} else
if(*p == ALIAS) {
type = ALIAS;
} else
if(*p == SOCKET) {
type = SOCKET;
} else
if(*p == MACRO) {
type = MACRO;
} else
{
fprintf(stderr, "error at \"%s\"\n", pline);
exit(6);
}
/* Allocate memory. */
switch(type) {
case BLOCK:
case CHAR:
case LINK:
case ALIAS:
case SOCKET:
entry = malloc(sizeof(struct device_entry));
if(entry == NULL) {
fprintf(stderr, "couldn't allocate buffer\n");
exit(5);
}
memset(entry, 0, sizeof(struct device_entry));
entry->type = type;
break;
case MACRO:
macro = malloc(sizeof(struct macro));
if(macro == NULL) {
fprintf(stderr, "couldn't allocate buffer\n");
exit(5);
}
memset(macro, 0, sizeof(struct macro));
break;
}
if(macro) {
/* Read the macro name. */
for(p++; (*p != '\0') && isspace(*p); p++);
memset(buf, '\0', sizeof(buf));
for(q = p; (*q != '\0') && !isspace(*q); q++);
memcpy(buf, p, q - p);
macro->name = strdup(buf);
if((macro->name == NULL) || (strlen(macro->name) == 0)) {
fprintf(stderr, "error parsing \"%s\": bad macro name in \"%s\"\n", path, line);
exit(7);
}
p = q;
/* Now read the expansion. */
for(; (*p != '\0') && isspace(*p); p++);
memset(buf, '\0', sizeof(buf));
strncpy(buf, p, sizeof(buf) - 1);
buf[sizeof(buf) - 1] = '\0';
macro->expansion = strdup(buf);
if((macro->expansion == NULL) ||
(strlen(macro->expansion) == 0)) {
fprintf(stderr, "error parsing \"%s\": bad expansion in \"%s\"\n", path, line);
exit(7);
}
p = q;
macro->next = macros;
macros = macro;
return;
}
if((entry->type == BLOCK) || (entry->type == CHAR)) {
/* Now read the permissions. */
for(p++; (*p != '\0') && isspace(*p); p++);
while(isdigit(*p) && (*p != '\0')) {
entry->perms *= 8;
entry->perms += (*p - '0');
p++;
}
/* Now read the owner. */
for(; (*p != '\0') && isspace(*p); p++);
memset(buf, '\0', sizeof(buf));
for(q = p; (*q != '\0') && !isspace(*q); q++);
memcpy(buf, p, q - p);
entry->user = strdup(buf);
if((entry->user == NULL) || (strlen(entry->user) == 0)) {
fprintf(stderr, "error parsing \"%s\": bad user in \"%s\"\n", path, line);
exit(7);
}
p = q;
/* Now read the group. */
for(; (*p != '\0') && isspace(*p); p++);
memset(buf, '\0', sizeof(buf));
for(q = p; (*q != '\0') && !isspace(*q); q++);
memcpy(buf, p, q - p);
entry->group = strdup(buf);
if((entry->group == NULL) || (strlen(entry->group) == 0)) {
fprintf(stderr, "error parsing \"%s\": bad group in \"%s\"\n", path, line);
exit(7);
}
p = q;
/* And now the major number. */
for(; (*p != '\0') && isspace(*p); p++);
while(isdigit(*p) && (*p != '\0')) {
entry->major *= 10;
entry->major += (*p - '0');
p++;
}
if(entry->major <= 0) {
fprintf(stderr, "error parsing \"%s\": bad major in \"%s\"\n", path, line);
exit(7);
}
/* And now the minor number. */
for(; (*p != '\0') && isspace(*p); p++);
while(isdigit(*p) && (*p != '\0')) {
entry->minor *= 10;
entry->minor += (*p - '0');
p++;
}
if(entry->minor < 0) {
fprintf(stderr, "error parsing \"%s\": bad minor in \"%s\"\n", path, line);
exit(7);
}
/* And now the minor step number. */
for(; (*p != '\0') && isspace(*p); p++);
while(isdigit(*p) && (*p != '\0')) {
entry->minor_step *= 10;
entry->minor_step += (*p - '0');
p++;
}
if(entry->minor_step < 0) {
fprintf(stderr, "error parsing \"%s\": bad step in \"%s\"\n", path, line);
exit(7);
}
/* And now the number of devices we can create this way. */
for(; (*p != '\0') && isspace(*p); p++);
while(isdigit(*p) && (*p != '\0')) {
entry->num *= 10;
entry->num += (*p - '0');
p++;
}
if(entry->num <= 0) {
fprintf(stderr, "error parsing \"%s\": bad count in \"%s\"\n", path, line);
exit(7);
}
/* Now read the device's (root) name. */
for(; (*p != '\0') && isspace(*p); p++);
memset(buf, '\0', sizeof(buf));
for(q = p; (*q != '\0') && !isspace(*q); q++);
memcpy(buf, p, q - p);
entry->name = strdup(buf);
p = q;
/* Now read the (optional) base. */
for(; (*p != '\0') && isspace(*p); p++);
memset(buf, '\0', sizeof(buf));
for(q = p; (*q != '\0') && !isspace(*q); q++);
memcpy(buf, p, q - p);
if(strstr(entry->name, "%c")) {
entry->base = buf[0];
} else {
entry->base = atoi(buf);
}
}
if(entry->type == LINK) {
/* Read the link's name. */
for(p++; (*p != '\0') && isspace(*p); p++);
memset(buf, '\0', sizeof(buf));
for(q = p; (*q != '\0') && !isspace(*q); q++);
memcpy(buf, p, q - p);
entry->name = strdup(buf);
p = q;
/* Read the link's target's name. */
for(; (*p != '\0') && isspace(*p); p++);
memset(buf, '\0', sizeof(buf));
for(q = p; (*q != '\0') && !isspace(*q); q++);
memcpy(buf, p, q - p);
entry->link_target = strdup(buf);
p = q;
entry->num = 1;
}
if(entry->type == ALIAS) {
/* Read the alias's name. */
for(p++; (*p != '\0') && isspace(*p); p++);
memset(buf, '\0', sizeof(buf));
for(q = p; (*q != '\0') && !isspace(*q); q++);
memcpy(buf, p, q - p);
entry->name = strdup(buf);
p = q;
/* Read the target's name. */
for(; (*p != '\0') && isspace(*p); p++);
memset(buf, '\0', sizeof(buf));
for(q = p; (*q != '\0') && !isspace(*q); q++);
memcpy(buf, p, q - p);
entry->link_target = strdup(buf);
p = q;
entry->num = 1;
}
if(entry->type == SOCKET) {
/* Now read the permissions. */
for(p++; (*p != '\0') && isspace(*p); p++);
while(isdigit(*p) && (*p != '\0')) {
entry->perms *= 8;
entry->perms += (*p - '0');
p++;
}
/* Now read the owner. */
for(; (*p != '\0') && isspace(*p); p++);
memset(buf, '\0', sizeof(buf));
for(q = p; (*q != '\0') && !isspace(*q); q++);
memcpy(buf, p, q - p);
entry->user = strdup(buf);
if((entry->user == NULL) || (strlen(entry->user) == 0)) {
fprintf(stderr, "error parsing \"%s\": bad user in \"%s\"\n", path, line);
exit(7);
}
p = q;
/* Now read the group. */
for(; (*p != '\0') && isspace(*p); p++);
memset(buf, '\0', sizeof(buf));
for(q = p; (*q != '\0') && !isspace(*q); q++);
memcpy(buf, p, q - p);
entry->group = strdup(buf);
if((entry->group == NULL) || (strlen(entry->group) == 0)) {
fprintf(stderr, "error parsing \"%s\": bad group in \"%s\"\n", path, line);
exit(7);
}
p = q;
/* Now read the socket's name. */
for(; (*p != '\0') && isspace(*p); p++);
memset(buf, '\0', sizeof(buf));
for(q = p; (*q != '\0') && !isspace(*q); q++);
memcpy(buf, p, q - p);
entry->name = strdup(buf);
p = q;
entry->num = 1;
}
/* Add it to the end of the list. */
if(devices == NULL) {
devices = entry;
last_device = entry;
} else {
last_device->next = entry;
last_device = entry;
}
}
void
read_config_single_file(const char *path)
{
FILE *fp = NULL;
char buf[LINE_MAX];
fp = fopen(path, "r");
if(fp == NULL) {
fprintf(stderr, "error opening %s: %s\n", path, strerror(errno));
exit(4);
}
while(fgets(buf, sizeof(buf), fp) != NULL) {
int l = strlen(buf);
while((l > 0) && ((buf[l - 1] == '\n') || (buf[l - 1] == '\r'))) {
l--;
buf[l] = '\0';
}
read_config_line(path, buf);
}
fclose(fp);
}
int
screen_out_bad(const struct dirent *ent)
{
size_t l;
if(strcmp(ent->d_name, ".") == 0)
return 0;
if(strcmp(ent->d_name, "..") == 0)
return 0;
l = sizeof(".rpmsave") - 1;
if(ent->d_reclen > l)
if(strcmp(ent->d_name + ent->d_reclen - l, ".rpmsave") == 0)
return 0;
l = sizeof(".rpmorig") - 1;
if(ent->d_reclen > l)
if(strcmp(ent->d_name + ent->d_reclen - l, ".rpmorig") == 0)
return 0;
l = sizeof(".rpmnew") - 1;
if(ent->d_reclen > l)
if(strcmp(ent->d_name + ent->d_reclen - l, ".rpmnew") == 0)
return 0;
return 1;
}
void
read_configs(const char *configdir, int flags)
{
struct dirent **ent;
struct stat st;
char path[PATH_MAX];
int i, count;
count = scandir(configdir, &ent, screen_out_bad, alphasort);
if(count == -1) {
if((flags & IGNORE)) {
fprintf(stderr, "warning: ");
} else {
fprintf(stderr, "error: ");
}
fprintf(stderr, "%s is not a directory\n", configdir);
if(!(flags & IGNORE)) {
exit(1);
}
return;
}
for(i = 0; i < count; i++) {
snprintf(path, sizeof(path), "%s/%s", configdir, ent[i]->d_name);
if(stat(path, &st) != -1) {
if(S_ISREG(st.st_mode)) {
read_config_single_file(path);
} else {
if((flags & IGNORE)) {
fprintf(stderr, "warning: ");
} else {
fprintf(stderr, "error: ");
}
fprintf(stderr, "%s is not a regular " "file\n", path);
if(!(flags & IGNORE)) {
exit(2);
}
}
} else {
if((flags & IGNORE)) {
fprintf(stderr, "warning: ");
} else {
fprintf(stderr, "error: ");
}
fprintf(stderr, "failure reading %s: %s\n", path, strerror(errno));
if(!(flags & IGNORE)) {
exit(3);
}
}
}
}
int
main(int argc, char **argv)
{
int c, i, flags = 0;
int max = -1;
const char *cfgdir = CFGDIR, *devdir = DEVDIR;
char *p;
/* Scan arguments. */
while((c = getopt(argc, argv, "c:d:m:invNMSV")) != -1)
switch(c) {
case 'c': cfgdir = strdup(optarg);
break;
case 'd': devdir = strdup(optarg);
break;
case 'm': max = strtol(optarg, &p, 10);
if((p != NULL) && (*p != '\0')) {
fprintf(stderr, "-m requires a numeric argument\n");
return -1;
}
break;
case 'i': flags |= IGNORE;
break;
case 'n': flags |= FAKE;
/* fall through */
case 'v': flags |= VERBOSE;
break;
case 'M': flags |= MANIFEST;
break;
case 'S': flags |= (FAKE | SCRIPT);
break;
case 'V': printf("MAKEDEV version " VERSION "\n");
return 0;
default: break;
}
/* Usage message. */
if(optind >= argc) {
printf("Usage: MAKEDEV -V\n"
" MAKEDEV [-c configdir] [-d devicedir] [-m maxdevices] [-i] [-n] [-v]\n"
" [-M] [-S] name\n");
return 0;
}
/* Read our configuration files. */
read_configs(cfgdir, flags);
/* Do the hard work now. */
for(i = optind; i < argc; i++) {
makedevices(devdir, argv[i], max, flags);
}
return 0;
}
MAKEDEV-3.3.8/COPYING 0100664 0004716 0004724 00000043110 07231446131 012634 0 ustar nalin nalin GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
MAKEDEV-3.3.8/makedev.d/ 0040775 0004716 0004724 00000000000 07731332762 013454 5 ustar nalin nalin MAKEDEV-3.3.8/makedev.d/00macros 0100664 0004716 0004724 00000000547 07450652616 015027 0 ustar nalin nalin =ALLREAD 644 root root
=ALLWRITE 666 root root
=FLOPPY 660 root floppy
=KMEM 640 root kmem
=PRINTER 660 root lp
=PTY 666 root tty
=ROOT 600 root root
=SERIAL 660 root uucp
=STORAGE 660 root disk
=TTY 620 root tty
=VCSA 620 vcsa tty
# Define "console" as an alias for root for specifying input devices and such.
=CONSOLE $ROOT
MAKEDEV-3.3.8/makedev.d/cdrom 0100664 0004716 0004724 00000000456 07134712647 014506 0 ustar nalin nalin # Just some aliases for non-SCSI, non-ATAPI CD-ROM devices.
a cdrom aztcd
a cdrom bpcd
a cdrom cdu31a
a cdrom cdu535
a cdrom cm205cd
a cdrom cm206cd
a cdrom gscd
a cdrom hitcd
a cdrom i2o/hdcd
a cdrom mcd
a cdrom mcdx
a cdrom optcd
a cdrom sdcd
a cdrom sjcd
a cdrom sonycd
a cdrom sbpcd
l sbpcd sbpcd0
MAKEDEV-3.3.8/makedev.d/console 0100664 0004716 0004724 00000000045 07135343662 015034 0 ustar nalin nalin # The "console" alias.
a console tty
MAKEDEV-3.3.8/makedev.d/ftape 0100664 0004716 0004724 00000000362 07134712647 014475 0 ustar nalin nalin # Aliases for devices used by the ftape driver.
a ftape qft
a ftape nqft
a ftape rft
a ftape nrft
a ftape zqft
a ftape nzqft
a ftape rawqft
a ftape nrawqft
a ftape tape-d
a ftape tape-reset
a ftape tpqic
a ftape ntpqic
a ftape st
a ftape nst
MAKEDEV-3.3.8/makedev.d/generic 0100664 0004716 0004724 00000000332 07134712647 015007 0 ustar nalin nalin # Support for the older "generic" devices.
a generic std
a generic fd
a generic hda
a generic hdb
a generic hdc
a generic hdd
a generic tty
a generic ptyp
a generic mouse
a generic lp
a generic parport
a generic sound
MAKEDEV-3.3.8/makedev.d/ia64 0100664 0004716 0004724 00000000215 07316453617 014137 0 ustar nalin nalin # Implements normal rtc access, but through EFI firmware
# (dunno why it's a different device).
c $ALLREAD 10 136 1 1 efirtc
MAKEDEV-3.3.8/makedev.d/ibcs 0100664 0004716 0004724 00000000322 07466570472 014320 0 ustar nalin nalin # Aliases for ibcs.
a ibcs2 egp
a ibcs2 ggp
a ibcs2 icmp
a ibcs2 idp
a ibcs2 inet
a ibcs2 ip
a ibcs2 ipip
a ibcs2 nfsd
a ibcs2 null
a ibcs2 pup
a ibcs2 socksys
a ibcs2 spx
a ibcs2 rawip
a ibcs2 tcp
a ibcs2 X0R
MAKEDEV-3.3.8/makedev.d/ide 0100664 0004716 0004724 00000000400 07253224736 014127 0 ustar nalin nalin # Some aliases for IDE controllers.
a ide0 hda
a ide0 hdb
a ide1 hdc
a ide1 hdd
a ide2 hde
a ide2 hdf
a ide3 hdg
a ide3 hdh
a ide4 hdi
a ide4 hdj
a ide5 hdk
a ide5 hdl
a ide6 hdm
a ide6 hdn
a ide7 hdo
a ide7 hdp
a ide8 hdq
a ide8 hdr
a ide9 hds
a ide9 hdt
MAKEDEV-3.3.8/makedev.d/ipfilter 0100664 0004716 0004724 00000000140 07134712647 015206 0 ustar nalin nalin # Aliases for firewalling.
a ipfilter ipauth
a ipfilter ipl
a ipfilter ipnat
a ipfilter ipstate
MAKEDEV-3.3.8/makedev.d/isdn 0100664 0004716 0004724 00000000132 07466553100 014321 0 ustar nalin nalin # Aliases for ISDN users.
a isdn dcbri
a isdn ippp
a isdn cui
a isdn ttyI
a isdn usb/auer
MAKEDEV-3.3.8/makedev.d/linux-2.2.x 0100664 0004716 0004724 00000106443 07324662300 015300 0 ustar nalin nalin # This file is written almost directly from the devices.txt file provided in
# the Documentation/ subdirectory of the Linux kernel source tree.
c 640 root kmem 1 1 1 1 mem
c 640 root kmem 1 2 1 1 kmem
c 666 root root 1 3 1 1 null
c 640 root kmem 1 4 1 1 port
c 666 root root 1 5 1 1 zero
c 666 root root 1 7 1 1 full
c 644 root root 1 8 1 1 random
c 644 root root 1 9 1 1 urandom
b 660 root disk 1 0 1 128 ram%d
b 660 root disk 1 250 1 1 initrd
c 666 root tty 2 0 1 16 ptyp%x
c 666 root tty 2 16 1 16 ptyq%x
c 666 root tty 2 32 1 16 ptyr%x
c 666 root tty 2 48 1 16 ptys%x
c 666 root tty 2 64 1 16 ptyt%x
c 666 root tty 2 80 1 16 ptyu%x
c 666 root tty 2 96 1 16 ptyv%x
c 666 root tty 2 112 1 16 ptyw%x
c 666 root tty 2 128 1 16 ptyx%x
c 666 root tty 2 144 1 16 ptyy%x
c 666 root tty 2 160 1 16 ptyz%x
c 666 root tty 2 176 1 16 ptya%x
c 666 root tty 2 192 1 16 ptyb%x
c 666 root tty 2 208 1 16 ptyc%x
c 666 root tty 2 224 1 16 ptyd%x
c 666 root tty 2 240 1 16 ptye%x
b 660 root floppy 2 0 1 4 fd%d 0
b 660 root floppy 2 128 1 4 fd%d 4
b 660 root floppy 2 4 1 4 fd%dd360 0
b 660 root floppy 2 20 1 4 fd%dh360 0
b 660 root floppy 2 48 1 4 fd%dh410 0
b 660 root floppy 2 64 1 4 fd%dh420 0
b 660 root floppy 2 24 1 4 fd%dh720 0
b 660 root floppy 2 80 1 4 fd%dh880 0
b 660 root floppy 2 8 1 4 fd%dh1200 0
b 660 root floppy 2 40 1 4 fd%dh1440 0
b 660 root floppy 2 56 1 4 fd%dh1476 0
b 660 root floppy 2 72 1 4 fd%dh1494 0
b 660 root floppy 2 92 1 4 fd%dh1660 0
b 660 root floppy 2 12 1 4 fd%du360 0
b 660 root floppy 2 16 1 4 fd%du720 0
b 660 root floppy 2 120 1 4 fd%du800 0
b 660 root floppy 2 52 1 4 fd%du820 0
b 660 root floppy 2 68 1 4 fd%du830 0
b 660 root floppy 2 84 1 4 fd%du1040 0
b 660 root floppy 2 88 1 4 fd%du1120 0
b 660 root floppy 2 28 1 4 fd%du1440 0
b 660 root floppy 2 124 1 4 fd%du1660 0
b 660 root floppy 2 44 1 4 fd%du1680 0
b 660 root floppy 2 60 1 4 fd%du1722 0
b 660 root floppy 2 76 1 4 fd%du1743 0
b 660 root floppy 2 96 1 4 fd%du1760 0
b 660 root floppy 2 116 1 4 fd%du1840 0
b 660 root floppy 2 100 1 4 fd%du1920 0
b 660 root floppy 2 32 1 4 fd%du2880 0
b 660 root floppy 2 104 1 4 fd%du3200 0
b 660 root floppy 2 108 1 4 fd%du3520 0
b 660 root floppy 2 112 1 4 fd%du3840 0
b 660 root floppy 2 132 1 4 fd%dd360 4
b 660 root floppy 2 148 1 4 fd%dh360 4
b 660 root floppy 2 176 1 4 fd%dh410 4
b 660 root floppy 2 192 1 4 fd%dh420 4
b 660 root floppy 2 152 1 4 fd%dh720 4
b 660 root floppy 2 208 1 4 fd%dh880 4
b 660 root floppy 2 136 1 4 fd%dh1200 4
b 660 root floppy 2 168 1 4 fd%dh1440 4
b 660 root floppy 2 184 1 4 fd%dh1476 4
b 660 root floppy 2 200 1 4 fd%dh1494 4
b 660 root floppy 2 220 1 4 fd%dh1660 4
b 660 root floppy 2 140 1 4 fd%du360 4
b 660 root floppy 2 144 1 4 fd%du720 4
b 660 root floppy 2 248 1 4 fd%du800 4
b 660 root floppy 2 180 1 4 fd%du820 4
b 660 root floppy 2 196 1 4 fd%du830 4
b 660 root floppy 2 212 1 4 fd%du1040 4
b 660 root floppy 2 216 1 4 fd%du1120 4
b 660 root floppy 2 156 1 4 fd%du1440 4
b 660 root floppy 2 252 1 4 fd%du1660 4
b 660 root floppy 2 172 1 4 fd%du1680 4
b 660 root floppy 2 188 1 4 fd%du1722 4
b 660 root floppy 2 204 1 4 fd%du1743 4
b 660 root floppy 2 224 1 4 fd%du1760 4
b 660 root floppy 2 244 1 4 fd%du1840 4
b 660 root floppy 2 228 1 4 fd%du1920 4
b 660 root floppy 2 160 1 4 fd%du2880 4
b 660 root floppy 2 232 1 4 fd%du3200 4
b 660 root floppy 2 236 1 4 fd%du3520 4
b 660 root floppy 2 240 1 4 fd%du3840 4
b 660 root floppy 2 4 1 4 fd%dCompaQ 0
b 660 root floppy 2 132 1 4 fd%dCompaQ 4
c 666 root tty 3 0 1 16 ttyp%x
c 666 root tty 3 16 1 16 ttyq%x
c 666 root tty 3 32 1 16 ttyr%x
c 666 root tty 3 48 1 16 ttys%x
c 666 root tty 3 64 1 16 ttyt%x
c 666 root tty 3 80 1 16 ttyu%x
c 666 root tty 3 96 1 16 ttyv%x
c 666 root tty 3 112 1 16 ttyw%x
c 666 root tty 3 128 1 16 ttyx%x
c 666 root tty 3 144 1 16 ttyy%x
c 666 root tty 3 160 1 16 ttyz%x
c 666 root tty 3 176 1 16 ttya%x
c 666 root tty 3 192 1 16 ttyb%x
c 666 root tty 3 208 1 16 ttyc%x
c 666 root tty 3 224 1 16 ttyd%x
c 666 root tty 3 240 1 16 ttye%x
b 660 root disk 3 0 1 64 hda
b 660 root disk 3 64 1 64 hdb
c 600 root root 4 0 1 1 systty
c 600 root tty 4 0 1 64 tty%d
c 660 root uucp 4 64 1 192 ttyS%d
c 666 root root 5 0 1 1 tty
c 600 root root 5 1 1 1 console
c 666 root root 5 2 1 1 ptmx
c 660 root uucp 5 64 1 192 cua%d
c 660 root lp 6 0 1 4 lp%d
c 620 root tty 7 0 1 64 vcs
c 620 root tty 7 128 1 64 vcsa
b 660 root disk 7 0 1 16 loop%d
b 660 root disk 8 0 1 16 sda
b 660 root disk 8 16 1 16 sdb
b 660 root disk 8 32 1 16 sdc
b 660 root disk 8 48 1 16 sdd
b 660 root disk 8 64 1 16 sde
b 660 root disk 8 80 1 16 sdf
b 660 root disk 8 96 1 16 sdg
b 660 root disk 8 112 1 16 sdh
b 660 root disk 8 128 1 16 sdi
b 660 root disk 8 144 1 16 sdj
b 660 root disk 8 160 1 16 sdk
b 660 root disk 8 176 1 16 sdl
b 660 root disk 8 192 1 16 sdm
b 660 root disk 8 208 1 16 sdn
b 660 root disk 8 224 1 16 sdo
b 660 root disk 8 240 1 16 sdp
c 660 root disk 9 0 1 32 st%d
c 660 root disk 9 32 1 32 st%dl
c 660 root disk 9 64 1 32 st%dm
c 660 root disk 9 96 1 32 st%da
c 660 root disk 9 128 1 32 nst%d
c 660 root disk 9 160 1 32 nst%dl
c 660 root disk 9 192 1 32 nst%dm
c 660 root disk 9 224 1 32 nst%da
b 660 root disk 9 0 1 32 md%d
c 660 root root 10 0 1 1 logibm
c 660 root root 10 1 1 1 psaux
c 660 root root 10 2 1 1 inportbm
c 660 root root 10 3 1 1 atibm
c 660 root root 10 4 1 1 jbm
c 660 root root 10 4 1 1 amigamouse
c 660 root root 10 5 1 1 atarimouse
c 660 root root 10 6 1 1 sunmouse
c 660 root root 10 7 1 1 amigamouse1
c 660 root root 10 8 1 1 smouse
c 660 root root 10 9 1 1 pc110pad
c 660 root root 10 10 1 1 adbmouse
c 660 root root 10 11 1 1 vrtpanel
c 660 root root 10 128 1 1 beep
c 660 root root 10 129 1 1 modreq
c 660 root root 10 130 1 1 watchdog
c 660 root root 10 131 1 1 temperature
c 660 root root 10 132 1 1 hwtrap
c 660 root root 10 133 1 1 exttrp
c 660 root sys 10 134 1 1 apm_bios
c 664 root root 10 135 1 1 rtc
# Where did 136, 137, and 138 go?
c 660 root root 10 139 1 1 openprom
c 660 root root 10 140 1 1 relay8
c 660 root root 10 141 1 1 relay16
c 660 root root 10 142 1 1 msr
c 660 root root 10 143 1 1 pciconf
c 660 root root 10 144 1 1 nvram
c 660 root root 10 145 1 1 hfmodem
c 660 root root 10 146 1 1 graphics
c 660 root root 10 147 1 1 opengl
c 660 root root 10 148 1 1 gfx
c 666 root sys 10 149 1 1 input/mouse
c 660 root root 10 150 1 1 input/keyboard
c 660 root root 10 151 1 1 led
# Where did 152 go?
c 660 root root 10 153 1 1 mergemem
c 660 root root 10 154 1 1 pmu
c 660 root root 10 155 1 1 isictl
c 660 root root 10 156 1 1 lcd
c 660 root root 10 157 1 1 ac
c 660 root root 10 158 1 1 nwbutton
c 660 root root 10 159 1 1 nwdebug
c 660 root root 10 160 1 1 nwflash
c 660 root root 10 161 1 1 userdma
c 660 root root 10 162 1 1 smbus
c 660 root root 10 163 1 1 lik
c 660 root root 10 164 1 1 ipmo
c 660 root root 10 165 1 1 vmmon
c 660 root root 10 166 1 1 i2o/ctl
c 660 root root 10 167 1 1 specialix_sxctl
c 660 root root 10 168 1 1 tcldrv
c 660 root root 10 169 1 1 specialix_rioctl
c 660 root root 10 170 1 1 smapi
c 660 root root 10 171 1 1 srripc
c 660 root root 10 172 1 1 usemacclone
c 660 root root 10 173 1 1 ipmikcs
c 660 root root 10 174 1 1 uctrl
c 664 root root 10 175 1 1 agpgart
c 660 root root 10 176 1 1 gtrsc
c 660 root root 10 177 1 1 cbm
c 660 root root 10 178 1 1 jsflash
c 660 root root 10 179 1 1 xsvc
c 660 root root 10 180 1 1 vrbuttons
c 660 root root 11 0 1 1 kbd
b 660 root disk 11 0 1 32 sr%d
c 660 root disk 12 2 1 1 ntpqic11
c 660 root disk 12 3 1 1 tpqic11
c 660 root disk 12 4 1 1 ntpqic24
c 660 root disk 12 5 1 1 tpqic24
c 660 root disk 12 6 1 1 ntpqic120
c 660 root disk 12 7 1 1 tpqic120
c 660 root disk 12 8 1 1 ntpqic150
c 660 root disk 12 9 1 1 tpqic150
b 660 root root 12 0 1 8 dos_cd%d
# These are obsolete!
# c 660 root sys 13 0 1 1 pcmixer
# c 660 root sys 13 1 1 1 pcsp
# c 660 root sys 13 4 1 1 pcaudio
# c 660 root sys 13 5 1 1 pcsp16r
b 660 root disk 13 0 1 64 xda
b 660 root disk 13 64 1 64 xdb
c 600 root sys 14 0 1 1 mixer
c 666 root sys 14 1 1 1 sequencer
c 600 root sys 14 2 1 1 midi00
c 600 root sys 14 3 1 1 dsp
c 600 root sys 14 4 1 1 audio
# Where did 5 go?
c 644 root sys 14 6 1 1 sndstat
c 600 root sys 14 7 1 1 audioctl
c 600 root sys 14 8 1 1 sequencer2
c 600 root sys 14 16 1 1 mixer1
c 600 root sys 14 17 1 1 patmgr0
c 600 root sys 14 18 1 1 midi01
c 600 root sys 14 19 1 1 dsp1
c 600 root sys 14 20 1 1 audio1
c 600 root sys 14 33 1 1 patmgr1
c 600 root sys 14 34 1 1 midi02
c 600 root sys 14 50 1 1 midi03
b 660 root root 14 0 1 64 dos_hda
b 660 root root 14 64 1 64 dos_hdb
b 660 root root 14 128 1 64 dos_hdc
b 660 root root 14 192 1 64 dos_hdd
c 600 root root 15 0 1 128 js%d
c 660 root sys 15 128 1 128 djs%d
b 660 root disk 15 0 1 1 sonycd
c 660 root root 16 0 1 1 gs4500
b 660 root disk 16 0 1 1 gscd
c 660 root uucp 17 0 1 16 ttyH%d
b 660 root disk 17 0 1 1 optcd
c 660 root uucp 18 0 1 16 cuh%d
b 660 root disk 18 0 1 1 sjcd
c 660 root uucp 19 0 1 33 ttyC%d
b 660 root root 19 0 1 8 double%d
b 660 root root 19 128 1 8 cdouble%d
c 660 root uucp 20 0 1 32 cub%d
b 660 root disk 20 0 1 1 hitcd
c 600 root sys 21 0 1 32 sg%d
b 660 root root 21 0 1 64 mfma
b 660 root root 21 64 1 64 mfmb
c 660 root uucp 22 0 1 32 ttyD%d
b 660 root disk 22 0 1 64 hdc
b 660 root disk 22 64 1 64 hdd
c 660 root uucp 23 0 1 32 cud%d
b 660 root disk 23 0 1 1 mcd
c 660 root uucp 24 0 1 256 ttyE%d
b 660 root disk 24 0 1 1 cdu535
c 660 root uucp 25 0 1 256 cue%d
b 660 root disk 25 0 1 4 sbpcd%d 0
c 660 root sys 26 0 1 1 wvisfgrab
b 660 root disk 26 0 1 4 sbpcd%d 4
c 660 root disk 27 0 1 4 qft%d
c 660 root disk 27 4 1 4 nqft%d
c 660 root disk 27 16 1 4 zqft%d
c 660 root disk 27 20 1 4 nzqft%d
c 660 root disk 27 32 1 4 rawqft%d
c 660 root disk 27 36 1 4 nrawqft%d
b 660 root disk 27 0 1 4 sbpcd%d 8
c 600 root sys 28 0 1 4 staliomem%d
c 660 root daemon 28 0 1 4 slm%d
b 660 root disk 28 0 1 4 sbpcd%d 12
# This next set's commented out because it conflicts with the Apple Desktop
# Bus driver, which appears to be the more correct of the two.
# b 660 root root 28 0 1 16 ada
# b 660 root root 28 16 1 16 adb
# b 660 root root 28 32 1 16 adc
# b 660 root root 28 48 1 16 add
# b 660 root root 28 64 1 16 ade
# b 660 root root 28 80 1 16 adf
# b 660 root root 28 96 1 16 adg
# b 660 root root 28 112 1 16 adh
# b 660 root root 28 128 1 16 adi
# b 660 root root 28 144 1 16 adj
# b 660 root root 28 160 1 16 adk
# b 660 root root 28 176 1 16 adl
# b 660 root root 28 192 1 16 adm
# b 660 root root 28 208 1 16 adn
# b 660 root root 28 224 1 16 ado
# b 660 root root 28 240 1 16 adp
# Aaargh. Change the 8 to a 1 on the next line for 2.4!
c 600 root root 29 0 32 8 fb%d
b 660 root disk 29 0 1 1 aztcd
#c 660 root root 30 0 1 1 socksys
#c 660 root root 30 1 1 1 spx
#c 660 root root 30 2 1 1 inet/arp
#c 660 root root 30 2 1 1 inet/icmp
#c 660 root root 30 2 1 1 inet/ip
#c 660 root root 30 2 1 1 inet/udp
#c 660 root root 30 2 1 1 inet/tcp
b 660 root root 30 0 1 1 cm205cd
c 600 root sys 31 0 1 1 mpu401data
c 600 root sys 31 1 1 1 mpu401stat
b 660 root disk 31 0 1 8 rom%d
b 660 root disk 31 8 1 8 rrom%d
b 660 root disk 31 16 1 8 flash%d
b 660 root disk 31 24 1 8 rflash%d
c 660 root uucp 32 0 1 16 ttyX%d
b 660 root disk 32 0 1 1 cm206cd
c 660 root uucp 33 0 1 16 cux%d
b 660 root disk 33 0 1 64 hde
b 660 root disk 33 64 1 64 hdf
c 600 root sys 34 0 1 16 scc%d
b 660 root disk 34 0 1 64 hdg
b 660 root disk 34 64 1 64 hdh
c 600 root sys 35 0 1 4 midi%d
c 600 root sys 35 64 1 4 rmidi%d
c 600 root sys 35 128 1 4 smpte%d
b 600 root root 35 0 1 1 slram
c 600 root sys 36 0 1 1 route
c 600 root sys 36 1 1 1 skip
c 660 root root 36 2 1 1 fwmonitor
c 660 root root 36 16 1 16 tap%d
b 660 root root 36 0 1 64 eda
b 660 root root 36 64 1 64 edb
c 660 root disk 37 0 1 128 ht%d
c 660 root disk 37 128 1 128 nht%d
b 660 root root 37 0 1 1 z2ram
c 660 root root 38 0 1 16 mlanai%d
c 660 root root 39 0 1 16 ml16pa-a%d
c 660 root root 39 16 1 1 ml16pa-d
c 660 root root 39 17 1 3 ml16pa-c%d
c 660 root root 39 32 1 16 ml16pb-a%d
c 660 root root 39 48 1 1 ml16pb-d
c 660 root root 39 49 1 3 ml16pb-c%d
c 660 root sys 40 0 1 1 mmetfgrab
#b 660 root root 40 0 1 1 eza
c 660 root root 41 0 1 1 yamm
b 660 root disk 41 0 1 1 bpcd
# Stay away from 42!
c 660 root uucp 43 0 1 64 ttyI%d
b 660 root disk 43 0 1 128 nb%d
c 660 root uucp 44 0 1 64 cui%d
b 660 root root 44 0 1 16 ftla
b 660 root root 44 16 1 16 ftlb
b 660 root root 44 32 1 16 ftlc
b 660 root root 44 48 1 16 ftld
b 660 root root 44 64 1 16 ftle
b 660 root root 44 80 1 16 ftlf
b 660 root root 44 96 1 16 ftlg
b 660 root root 44 112 1 16 ftlh
b 660 root root 44 128 1 16 ftli
b 660 root root 44 144 1 16 ftlj
b 660 root root 44 160 1 16 ftlk
b 660 root root 44 176 1 16 ftll
b 660 root root 44 192 1 16 ftlm
b 660 root root 44 208 1 16 ftln
b 660 root root 44 224 1 16 ftlo
b 660 root root 44 240 1 16 ftlp
c 600 root root 45 0 1 64 isdn%d
c 600 root root 45 64 1 64 isdnctrl%d
c 600 root root 45 128 1 64 ippp%d
c 600 root root 45 255 1 1 isdninfo
b 660 root disk 45 0 1 16 pda
b 660 root disk 45 16 1 16 pdb
b 660 root disk 45 32 1 16 pdc
b 660 root disk 45 48 1 16 pdd
c 660 root uucp 46 0 1 16 ttyR%d
b 660 root disk 46 0 1 4 pcd%d
c 660 root uucp 47 0 1 16 cur%d
b 660 root disk 47 0 1 4 pf%d
c 660 root uucp 48 0 1 16 ttyL%d
c 660 root uucp 49 0 1 16 cul%d
c 660 root root 51 0 1 16 bc%d
c 600 root sys 52 0 1 4 dcbri%d
c 660 root root 53 0 1 3 pd_bdm%d
c 660 root root 53 3 1 3 icd_bdm%d
c 660 root root 54 0 1 3 holter%d
c 660 root root 55 0 1 1 dsp56k
c 660 root root 56 0 1 1 adb
b 660 root disk 56 0 1 64 hdi
b 660 root disk 56 64 1 64 hdj
c 660 root uucp 57 0 1 16 ttyP%d
b 660 root disk 57 0 1 64 hdk
b 660 root disk 57 64 1 64 hdl
c 660 root uucp 58 0 1 16 cup%d
c 660 root root 59 0 1 1 firewall
b 660 root root 59 0 1 8 pda%d
# Here there be dragons.
c 600 root sys 64 0 1 1 enskip
c 660 root root 65 0 1 4 plink%d
c 660 root root 65 64 1 4 rplink%d
c 660 root root 65 128 1 4 plink%dd
c 660 root root 65 192 1 4 rplink%dd
b 660 root disk 65 0 1 16 sdq
b 660 root disk 65 16 1 16 sdr
b 660 root disk 65 32 1 16 sds
b 660 root disk 65 48 1 16 sdt
b 660 root disk 65 64 1 16 sdu
b 660 root disk 65 80 1 16 sdv
b 660 root disk 65 96 1 16 sdw
b 660 root disk 65 112 1 16 sdx
b 660 root disk 65 128 1 16 sdy
b 660 root disk 65 144 1 16 sdz
b 660 root disk 65 160 1 16 sdaa
b 660 root disk 65 176 1 16 sdab
b 660 root disk 65 192 1 16 sdac
b 660 root disk 65 208 1 16 sdad
b 660 root disk 65 224 1 16 sdae
b 660 root disk 65 240 1 16 sdaf
c 660 root root 66 0 1 16 yppcpci%d
b 660 root disk 66 0 1 16 sdag
b 660 root disk 66 16 1 16 sdah
b 660 root disk 66 32 1 16 sdai
b 660 root disk 66 48 1 16 sdaj
b 660 root disk 66 64 1 16 sdak
b 660 root disk 66 80 1 16 sdal
b 660 root disk 66 96 1 16 sdam
b 660 root disk 66 112 1 16 sdan
b 660 root disk 66 128 1 16 sdao
b 660 root disk 66 144 1 16 sdap
b 660 root disk 66 160 1 16 sdaq
b 660 root disk 66 176 1 16 sdar
b 660 root disk 66 192 1 16 sdas
b 660 root disk 66 208 1 16 sdat
b 660 root disk 66 224 1 16 sdau
b 660 root disk 66 240 1 16 sdav
c 600 root sys 67 0 1 1 cfs0
b 660 root disk 67 0 1 16 sdaw
b 660 root disk 67 16 1 16 sdax
b 660 root disk 67 32 1 16 sday
b 660 root disk 67 48 1 16 sdaz
b 660 root disk 67 64 1 16 sdba
b 660 root disk 67 80 1 16 sdbb
b 660 root disk 67 96 1 16 sdbc
b 660 root disk 67 112 1 16 sdbd
b 660 root disk 67 128 1 16 sdbe
b 660 root disk 67 144 1 16 sdbf
b 660 root disk 67 160 1 16 sdbg
b 660 root disk 67 176 1 16 sdbh
b 660 root disk 67 192 1 16 sdbi
b 660 root disk 67 208 1 16 sdbj
b 660 root disk 67 224 1 16 sdbk
b 660 root disk 67 240 1 16 sdbl
c 600 root sys 68 0 1 1 capi20
c 600 root sys 68 1 1 20 capi20.%02d
b 660 root disk 68 0 1 16 sdbm
b 660 root disk 68 16 1 16 sdbn
b 660 root disk 68 32 1 16 sdbo
b 660 root disk 68 48 1 16 sdbp
b 660 root disk 68 64 1 16 sdbq
b 660 root disk 68 80 1 16 sdbr
b 660 root disk 68 96 1 16 sdbs
b 660 root disk 68 112 1 16 sdbt
b 660 root disk 68 128 1 16 sdbu
b 660 root disk 68 144 1 16 sdbv
b 660 root disk 68 160 1 16 sdbw
b 660 root disk 68 176 1 16 sdbx
b 660 root disk 68 192 1 16 sdby
b 660 root disk 68 208 1 16 sdbz
b 660 root disk 68 224 1 16 sdca
b 660 root disk 68 240 1 16 sdcb
c 660 root root 69 0 1 1 ma16
b 660 root disk 69 0 1 16 sdcc
b 660 root disk 69 16 1 16 sdcd
b 660 root disk 69 32 1 16 sdce
b 660 root disk 69 48 1 16 sdcf
b 660 root disk 69 64 1 16 sdcg
b 660 root disk 69 80 1 16 sdch
b 660 root disk 69 96 1 16 sdci
b 660 root disk 69 112 1 16 sdcj
b 660 root disk 69 128 1 16 sdck
b 660 root disk 69 144 1 16 sdcl
b 660 root disk 69 160 1 16 sdcm
b 660 root disk 69 176 1 16 sdcn
b 660 root disk 69 192 1 16 sdco
b 660 root disk 69 208 1 16 sdcp
b 660 root disk 69 224 1 16 sdcq
b 660 root disk 69 240 1 16 sdcr
c 660 root root 70 0 1 1 apscfg
c 660 root root 70 1 1 1 apsauth
c 660 root root 70 2 1 1 apslog
c 660 root root 70 3 1 1 apsdbg
c 660 root root 70 64 1 1 apsisdn
c 660 root root 70 65 1 1 apsasync
c 660 root root 70 128 1 1 apsmon
b 660 root disk 70 0 1 16 sdcs
b 660 root disk 70 16 1 16 sdct
b 660 root disk 70 32 1 16 sdcu
b 660 root disk 70 48 1 16 sdcv
b 660 root disk 70 64 1 16 sdcw
b 660 root disk 70 80 1 16 sdcx
b 660 root disk 70 96 1 16 sdcy
b 660 root disk 70 112 1 16 sdcz
b 660 root disk 70 128 1 16 sdda
b 660 root disk 70 144 1 16 sddb
b 660 root disk 70 160 1 16 sddc
b 660 root disk 70 176 1 16 sddd
b 660 root disk 70 192 1 16 sdde
b 660 root disk 70 208 1 16 sddf
b 660 root disk 70 224 1 16 sddg
b 660 root disk 70 240 1 16 sddh
c 660 root uucp 71 0 1 256 ttyF%d
b 660 root disk 71 0 1 16 sddi
b 660 root disk 71 16 1 16 sddj
b 660 root disk 71 32 1 16 sddk
b 660 root disk 71 48 1 16 sddl
b 660 root disk 71 64 1 16 sddm
b 660 root disk 71 80 1 16 sddn
b 660 root disk 71 96 1 16 sddo
b 660 root disk 71 112 1 16 sddp
b 660 root disk 71 128 1 16 sddq
b 660 root disk 71 144 1 16 sddr
b 660 root disk 71 160 1 16 sdds
b 660 root disk 71 176 1 16 sddt
b 660 root disk 71 192 1 16 sddu
b 660 root disk 71 208 1 16 sddv
b 660 root disk 71 224 1 16 sddw
b 660 root disk 71 240 1 16 sddx
c 660 root uucp 72 0 1 256 cuf%d
c 600 root sys 73 0 4 4 ip2ipl%d
c 600 root sys 73 1 4 4 ip2stat%d
c 660 root root 74 0 1 16 SCI/%d
c 660 root uucp 75 0 1 16 ttyW%d
c 660 root uucp 76 0 1 16 cuw%d
c 600 root sys 77 0 1 1 qng
#c 660 root uucp 78 0 1 16 ttyM%x
#c 660 root uucp 79 0 1 16 cum%d
c 660 root root 80 0 1 1 at200
b 660 root root 80 0 1 16 i2o/hda
b 660 root root 80 16 1 16 i2o/hdb
b 660 root root 80 32 1 16 i2o/hdc
b 660 root root 80 48 1 16 i2o/hdd
b 660 root root 80 64 1 16 i2o/hde
b 660 root root 80 80 1 16 i2o/hdf
b 660 root root 80 96 1 16 i2o/hdg
b 660 root root 80 112 1 16 i2o/hdh
b 660 root root 80 128 1 16 i2o/hdi
b 660 root root 80 144 1 16 i2o/hdj
b 660 root root 80 160 1 16 i2o/hdk
b 660 root root 80 176 1 16 i2o/hdl
b 660 root root 80 192 1 16 i2o/hdm
b 660 root root 80 208 1 16 i2o/hdn
b 660 root root 80 224 1 16 i2o/hdo
b 660 root root 80 240 1 16 i2o/hdp
c 600 root sys 81 0 1 64 video%d
c 600 root sys 81 64 1 64 radio%d
c 600 root sys 81 192 1 32 vtx%d
c 600 root sys 81 224 1 32 vbi%d
b 660 root root 81 0 1 16 i2o/hdq
b 660 root root 81 16 1 16 i2o/hdr
b 660 root root 81 32 1 16 i2o/hds
b 660 root root 81 48 1 16 i2o/hdt
b 660 root root 81 64 1 16 i2o/hdu
b 660 root root 81 80 1 16 i2o/hdv
b 660 root root 81 96 1 16 i2o/hdw
b 660 root root 81 112 1 16 i2o/hdx
b 660 root root 81 128 1 16 i2o/hdy
b 660 root root 81 144 1 16 i2o/hdz
b 660 root root 81 160 1 16 i2o/hdaa
b 660 root root 81 176 1 16 i2o/hdab
b 660 root root 81 192 1 16 i2o/hdac
b 660 root root 81 208 1 16 i2o/hdad
b 660 root root 81 224 1 16 i2o/hdae
b 660 root root 81 240 1 16 i2o/hdaf
c 600 root sys 82 0 1 4 winradio%d
b 660 root root 82 0 1 16 i2o/hdag
b 660 root root 82 16 1 16 i2o/hdah
b 660 root root 82 32 1 16 i2o/hdai
b 660 root root 82 48 1 16 i2o/hdaj
b 660 root root 82 64 1 16 i2o/hdak
b 660 root root 82 80 1 16 i2o/hdal
b 660 root root 82 96 1 16 i2o/hdam
b 660 root root 82 112 1 16 i2o/hdan
b 660 root root 82 128 1 16 i2o/hdao
b 660 root root 82 144 1 16 i2o/hdap
b 660 root root 82 160 1 16 i2o/hdaq
b 660 root root 82 176 1 16 i2o/hdar
b 660 root root 82 192 1 16 i2o/hdas
b 660 root root 82 208 1 16 i2o/hdat
b 660 root root 82 224 1 16 i2o/hdau
b 660 root root 82 240 1 16 i2o/hdav
c 600 root sys 83 0 1 1 vtx
c 600 root sys 83 16 1 1 vttuner
b 660 root root 83 0 1 16 i2o/hdaw
b 660 root root 83 16 1 16 i2o/hdax
b 660 root root 83 32 1 16 i2o/hday
b 660 root root 83 48 1 16 i2o/hdaz
b 660 root root 83 64 1 16 i2o/hdba
b 660 root root 83 80 1 16 i2o/hdbb
b 660 root root 83 96 1 16 i2o/hdbc
b 660 root root 83 112 1 16 i2o/hdbd
b 660 root root 83 128 1 16 i2o/hdbe
b 660 root root 83 144 1 16 i2o/hdbf
b 660 root root 83 160 1 16 i2o/hdbg
b 660 root root 83 176 1 16 i2o/hdbh
b 660 root root 83 192 1 16 i2o/hdbi
b 660 root root 83 208 1 16 i2o/hdbj
b 660 root root 83 224 1 16 i2o/hdbk
b 660 root root 83 240 1 16 i2o/hdbl
c 660 root root 84 0 1 2 ihcp%d
b 660 root root 84 0 1 16 i2o/hdbm
b 660 root root 84 16 1 16 i2o/hdbn
b 660 root root 84 32 1 16 i2o/hdbo
b 660 root root 84 48 1 16 i2o/hdbp
b 660 root root 84 64 1 16 i2o/hdbq
b 660 root root 84 80 1 16 i2o/hdbr
b 660 root root 84 96 1 16 i2o/hdbs
b 660 root root 84 112 1 16 i2o/hdbt
b 660 root root 84 128 1 16 i2o/hdbu
b 660 root root 84 144 1 16 i2o/hdbv
b 660 root root 84 160 1 16 i2o/hdbw
b 660 root root 84 176 1 16 i2o/hdbx
b 660 root root 84 192 1 16 i2o/hdby
b 660 root root 84 208 1 16 i2o/hdbz
b 660 root root 84 224 1 16 i2o/hdca
b 660 root root 84 240 1 16 i2o/hdcb
c 660 root root 85 0 1 1 shmiq
c 660 root root 85 1 1 8 qcntl%d
b 660 root root 85 0 1 16 i2o/hdcc
b 660 root root 85 16 1 16 i2o/hdcd
b 660 root root 85 32 1 16 i2o/hdce
b 660 root root 85 48 1 16 i2o/hdcf
b 660 root root 85 64 1 16 i2o/hdcg
b 660 root root 85 80 1 16 i2o/hdch
b 660 root root 85 96 1 16 i2o/hdci
b 660 root root 85 112 1 16 i2o/hdcj
b 660 root root 85 128 1 16 i2o/hdck
b 660 root root 85 144 1 16 i2o/hdcl
b 660 root root 85 160 1 16 i2o/hdcm
b 660 root root 85 176 1 16 i2o/hdcn
b 660 root root 85 192 1 16 i2o/hdco
b 660 root root 85 208 1 16 i2o/hdcp
b 660 root root 85 224 1 16 i2o/hdcq
b 660 root root 85 240 1 16 i2o/hdcr
c 660 root root 86 0 1 8 sch%d
b 660 root root 86 0 1 16 i2o/hdcs
b 660 root root 86 16 1 16 i2o/hdct
b 660 root root 86 32 1 16 i2o/hdcu
b 660 root root 86 48 1 16 i2o/hdcv
b 660 root root 86 64 1 16 i2o/hdcw
b 660 root root 86 80 1 16 i2o/hdcx
b 660 root root 86 96 1 16 i2o/hdcy
b 660 root root 86 112 1 16 i2o/hdcz
b 660 root root 86 128 1 16 i2o/hdda
b 660 root root 86 144 1 16 i2o/hddb
b 660 root root 86 160 1 16 i2o/hddc
b 660 root root 86 176 1 16 i2o/hddd
b 660 root root 86 192 1 16 i2o/hdde
b 660 root root 86 208 1 16 i2o/hddf
b 660 root root 86 224 1 16 i2o/hddg
b 660 root root 86 240 1 16 i2o/hddh
c 660 root root 87 0 1 8 controla%d
b 660 root root 87 0 1 16 i2o/hddi
b 660 root root 87 16 1 16 i2o/hddj
b 660 root root 87 32 1 16 i2o/hddk
b 660 root root 87 48 1 16 i2o/hddl
b 660 root root 87 64 1 16 i2o/hddm
b 660 root root 87 80 1 16 i2o/hddn
b 660 root root 87 96 1 16 i2o/hddo
b 660 root root 87 112 1 16 i2o/hddp
b 660 root root 87 128 1 16 i2o/hddq
b 660 root root 87 144 1 16 i2o/hddr
b 660 root root 87 160 1 16 i2o/hdds
b 660 root root 87 176 1 16 i2o/hddt
b 660 root root 87 192 1 16 i2o/hddu
b 660 root root 87 208 1 16 i2o/hddv
b 660 root root 87 224 1 16 i2o/hddw
b 660 root root 87 240 1 16 i2o/hddx
c 600 root sys 88 0 1 8 comx%d
b 660 root root 88 0 1 64 hdm
b 660 root root 88 64 1 64 hdn
c 600 root sys 89 0 1 8 i2c-%d
b 660 root root 89 0 1 64 hdo
b 660 root root 89 64 1 64 hdp
c 660 root root 90 0 2 16 mtd%d
c 660 root root 90 1 2 16 mtdr%d
b 660 root root 90 0 1 64 hdq
b 660 root root 90 64 1 64 hdr
c 660 root root 91 0 1 16 can%d
b 660 root root 91 0 1 64 hds
b 660 root root 91 64 1 64 hdt
b 660 root root 92 0 1 64 ppdd%d
c 660 root sys 93 0 1 8 iscc%d
c 660 root sys 93 128 1 8 isccctl%d
b 660 root root 93 0 16 1 nftla
b 660 root root 93 16 16 15 nftl%c a
c 660 root sys 94 0 1 8 dcxx%d
c 600 root sys 95 0 1 1 ipl
c 600 root sys 95 1 1 1 ipnat
c 600 root sys 95 2 1 1 ipstate
c 600 root sys 95 3 1 1 ipauth
c 660 root disk 96 0 1 16 pt%d
c 660 root disk 96 128 1 16 npt%d
b 660 root root 96 0 8 4 msd%d
c 600 root sys 97 0 1 4 pg%d
c 660 root root 98 0 1 4 comedi%d
c 660 root daemon 99 0 1 8 parport%d
c 660 root root 100 0 1 8 phone%d
c 660 root root 101 0 1 1 mdspstat
c 660 root root 101 1 1 16 mdsp%d 1
c 600 root sys 102 0 1 4 tlk%d
c 600 root sys 103 0 1 1 xfs0
c 660 root uucp 105 0 1 16 ttyV%d
c 660 root uucp 106 0 1 16 cuv%d
c 660 root root 107 0 1 1 3dfx
c 660 root root 108 0 1 1 ppp
c 600 root sys 110 0 1 8 srnd%d
c 660 root root 111 0 1 8 av%d
c 660 root uucp 112 0 1 16 ttyM%x
c 660 root uucp 113 0 1 16 cum%d
c 660 root root 114 0 1 16 ise%d
c 660 root root 114 128 1 16 isex%d
c 660 root root 115 0 1 1 speaker
c 660 root root 117 0 1 16 cosa0c%d
c 660 root root 117 16 1 16 cosa1c%d
c 660 root root 118 0 1 16 solnp%d
c 660 root root 118 128 1 16 solnpctl%d
c 660 root root 119 0 1 16 vnet%d
c 660 root root 144 0 1 64 pppox%d
c 600 root sys 145 0 64 4 sam%d_mixer
c 600 root sys 145 1 64 4 sam%d_sequencer
c 600 root sys 145 2 64 4 sam%d_midi00
c 600 root sys 145 3 64 4 sam%d_dsp
c 600 root sys 145 4 64 4 sam%d_audio
c 600 root sys 145 6 64 4 sam%d_sndstat
c 600 root sys 145 18 64 4 sam%d_midi01
c 600 root sys 145 34 64 4 sam%d_midi02
c 600 root sys 145 50 64 4 sam%d_midi03
c 660 root root 146 0 1 8 scramnet%d
c 660 root root 147 0 1 8 aureal%d
c 660 root uucp 148 0 1 16 ttyT%d
c 660 root uucp 149 0 1 16 cut%d
c 660 root root 150 0 1 16 rtf%d
c 660 root root 151 0 1 16 dpti%d
c 660 root uucp 154 0 1 256 ttySR%d
c 660 root uucp 155 0 1 256 cusr%d
c 660 root uucp 156 0 1 256 ttySR%d 256
c 660 root uucp 157 0 1 256 cusr%d 256
c 660 root root 158 0 1 16 gfax%d
c 660 root root 159 0 1 16 ixj%d
c 660 root root 160 0 1 16 gpib%d
c 660 root root 161 0 1 16 ircomm%d
c 660 root root 161 16 1 16 irlpt%d
# c 660 root disk 162 1 1 256 raw%d
c 660 root root 163 0 1 64 bimrt%d
c 660 root uucp 164 0 1 64 ttyCH%d
c 660 root uucp 165 0 1 64 cuch%d
# c 660 root root 166 0 1 16 ttyACM%d
# c 660 root uucp 167 0 1 16 cuacm%d
c 660 root root 168 0 1 64 ecsa%d
c 660 root root 169 0 1 64 ecsa8-%d
c 660 root root 170 0 1 64 megarac%d
c 660 root uucp 171 0 1 128 ttyMX%d
c 660 root root 171 128 1 1 moxactl
c 660 root uucp 172 0 1 128 cumx%d
c 660 root uucp 174 0 1 16 ttySI%d
c 660 root uucp 175 0 1 16 cusi%d
c 660 root root 176 0 1 16 nfastpci%d
c 660 root root 177 0 1 16 pcilynx/aux%d
c 660 root root 177 16 1 16 pcilynx/rom%d
c 660 root root 177 32 1 16 pcilynx/ram%d
c 660 root root 178 0 1 16 clanvi%d
c 660 root root 179 0 1 16 dvxirq%d
# c 660 root daemon 180 0 1 16 usb/lp%d
# c 666 root sys 180 16 1 16 usb/mouse%d
# c 660 root root 180 32 1 16 usb/ez%d
# c 660 root root 180 48 1 16 usb/scanner%d
c 660 root root 181 0 1 16 pcfclock%d
c 660 root root 182 0 1 16 pethr%d
c 660 root root 183 0 1 16 ss5136dn%d
c 660 root root 184 0 1 16 pevss%d
c 660 root root 186 0 1 16 obd%d
c 660 root uucp 188 0 1 16 ttyUSB%d
c 660 root uucp 189 0 1 16 cuusb%d
c 660 root root 190 0 1 16 kctt%d
MAKEDEV-3.3.8/makedev.d/linux-2.4.x 0100664 0004716 0004724 00000156175 07731332706 015317 0 ustar nalin nalin # This file is written almost directly from the devices.txt file kept at
# http://www.lanana.org/docs/device-list/devices.txt, as of 16 January 2001
# Type Perms User Group Major Minor Inc Count Base
#
# USB devices have their own configuration file.
#
c $KMEM 1 1 1 1 mem
c $KMEM 1 2 1 1 kmem
c $ALLWRITE 1 3 1 1 null
c $KMEM 1 4 1 1 port
c $ALLWRITE 1 5 1 1 zero
c $ROOT 1 6 1 1 core
c $ALLWRITE 1 7 1 1 full
c $ALLREAD 1 8 1 1 random
c $ALLREAD 1 9 1 1 urandom
c $ALLREAD 1 10 1 1 vsys
b $STORAGE 1 0 1 128 ram%d
b $STORAGE 1 250 1 1 initrd
c $PTY 2 0 1 16 ptyp%x
c $PTY 2 16 1 16 ptyq%x
c $PTY 2 32 1 16 ptyr%x
c $PTY 2 48 1 16 ptys%x
c $PTY 2 64 1 16 ptyt%x
c $PTY 2 80 1 16 ptyu%x
c $PTY 2 96 1 16 ptyv%x
c $PTY 2 112 1 16 ptyw%x
c $PTY 2 128 1 16 ptyx%x
c $PTY 2 144 1 16 ptyy%x
c $PTY 2 160 1 16 ptyz%x
c $PTY 2 176 1 16 ptya%x
c $PTY 2 192 1 16 ptyb%x
c $PTY 2 208 1 16 ptyc%x
c $PTY 2 224 1 16 ptyd%x
c $PTY 2 240 1 16 ptye%x
b $FLOPPY 2 0 1 4 fd%d 0
b $FLOPPY 2 128 1 4 fd%d 4
b $FLOPPY 2 4 1 4 fd%dd360 0
b $FLOPPY 2 20 1 4 fd%dh360 0
b $FLOPPY 2 48 1 4 fd%dh410 0
b $FLOPPY 2 64 1 4 fd%dh420 0
b $FLOPPY 2 24 1 4 fd%dh720 0
b $FLOPPY 2 80 1 4 fd%dh880 0
b $FLOPPY 2 8 1 4 fd%dh1200 0
b $FLOPPY 2 40 1 4 fd%dh1440 0
b $FLOPPY 2 56 1 4 fd%dh1476 0
b $FLOPPY 2 72 1 4 fd%dh1494 0
b $FLOPPY 2 92 1 4 fd%dh1660 0
b $FLOPPY 2 12 1 4 fd%du360 0
b $FLOPPY 2 16 1 4 fd%du720 0
b $FLOPPY 2 120 1 4 fd%du800 0
b $FLOPPY 2 52 1 4 fd%du820 0
b $FLOPPY 2 68 1 4 fd%du830 0
b $FLOPPY 2 84 1 4 fd%du1040 0
b $FLOPPY 2 88 1 4 fd%du1120 0
b $FLOPPY 2 28 1 4 fd%du1440 0
b $FLOPPY 2 124 1 4 fd%du1660 0
b $FLOPPY 2 44 1 4 fd%du1680 0
b $FLOPPY 2 60 1 4 fd%du1722 0
b $FLOPPY 2 76 1 4 fd%du1743 0
b $FLOPPY 2 96 1 4 fd%du1760 0
b $FLOPPY 2 116 1 4 fd%du1840 0
b $FLOPPY 2 100 1 4 fd%du1920 0
b $FLOPPY 2 32 1 4 fd%du2880 0
b $FLOPPY 2 104 1 4 fd%du3200 0
b $FLOPPY 2 108 1 4 fd%du3520 0
b $FLOPPY 2 112 1 4 fd%du3840 0
b $FLOPPY 2 132 1 4 fd%dd360 4
b $FLOPPY 2 148 1 4 fd%dh360 4
b $FLOPPY 2 176 1 4 fd%dh410 4
b $FLOPPY 2 192 1 4 fd%dh420 4
b $FLOPPY 2 152 1 4 fd%dh720 4
b $FLOPPY 2 208 1 4 fd%dh880 4
b $FLOPPY 2 136 1 4 fd%dh1200 4
b $FLOPPY 2 168 1 4 fd%dh1440 4
b $FLOPPY 2 184 1 4 fd%dh1476 4
b $FLOPPY 2 200 1 4 fd%dh1494 4
b $FLOPPY 2 220 1 4 fd%dh1660 4
b $FLOPPY 2 140 1 4 fd%du360 4
b $FLOPPY 2 144 1 4 fd%du720 4
b $FLOPPY 2 248 1 4 fd%du800 4
b $FLOPPY 2 180 1 4 fd%du820 4
b $FLOPPY 2 196 1 4 fd%du830 4
b $FLOPPY 2 212 1 4 fd%du1040 4
b $FLOPPY 2 216 1 4 fd%du1120 4
b $FLOPPY 2 156 1 4 fd%du1440 4
b $FLOPPY 2 252 1 4 fd%du1660 4
b $FLOPPY 2 172 1 4 fd%du1680 4
b $FLOPPY 2 188 1 4 fd%du1722 4
b $FLOPPY 2 204 1 4 fd%du1743 4
b $FLOPPY 2 224 1 4 fd%du1760 4
b $FLOPPY 2 244 1 4 fd%du1840 4
b $FLOPPY 2 228 1 4 fd%du1920 4
b $FLOPPY 2 160 1 4 fd%du2880 4
b $FLOPPY 2 232 1 4 fd%du3200 4
b $FLOPPY 2 236 1 4 fd%du3520 4
b $FLOPPY 2 240 1 4 fd%du3840 4
b $FLOPPY 2 4 1 4 fd%dCompaQ 0
b $FLOPPY 2 132 1 4 fd%dCompaQ 4
c $PTY 3 0 1 16 ttyp%x
c $PTY 3 16 1 16 ttyq%x
c $PTY 3 32 1 16 ttyr%x
c $PTY 3 48 1 16 ttys%x
c $PTY 3 64 1 16 ttyt%x
c $PTY 3 80 1 16 ttyu%x
c $PTY 3 96 1 16 ttyv%x
c $PTY 3 112 1 16 ttyw%x
c $PTY 3 128 1 16 ttyx%x
c $PTY 3 144 1 16 ttyy%x
c $PTY 3 160 1 16 ttyz%x
c $PTY 3 176 1 16 ttya%x
c $PTY 3 192 1 16 ttyb%x
c $PTY 3 208 1 16 ttyc%x
c $PTY 3 224 1 16 ttyd%x
c $PTY 3 240 1 16 ttye%x
b $STORAGE 3 0 1 33 hda
b $STORAGE 3 64 1 33 hdb
l systty tty0
c $TTY 4 0 1 64 tty%d
c $SERIAL 4 64 1 192 ttyS%d
c $ALLWRITE 5 0 1 1 tty
c $CONSOLE 5 1 1 1 console
c $ALLWRITE 5 2 1 1 ptmx
c $SERIAL 5 64 1 192 cua%d
c $PRINTER 6 0 1 4 lp%d
c $VCSA 7 0 1 64 vcs
c $VCSA 7 128 1 64 vcsa
b $STORAGE 7 0 1 16 loop%d
b $STORAGE 8 0 1 16 sda
b $STORAGE 8 16 1 16 sdb
b $STORAGE 8 32 1 16 sdc
b $STORAGE 8 48 1 16 sdd
b $STORAGE 8 64 1 16 sde
b $STORAGE 8 80 1 16 sdf
b $STORAGE 8 96 1 16 sdg
b $STORAGE 8 112 1 16 sdh
b $STORAGE 8 128 1 16 sdi
b $STORAGE 8 144 1 16 sdj
b $STORAGE 8 160 1 16 sdk
b $STORAGE 8 176 1 16 sdl
b $STORAGE 8 192 1 16 sdm
b $STORAGE 8 208 1 16 sdn
b $STORAGE 8 224 1 16 sdo
b $STORAGE 8 240 1 16 sdp
c $STORAGE 9 0 1 32 st%d
c $STORAGE 9 32 1 32 st%dl
c $STORAGE 9 64 1 32 st%dm
c $STORAGE 9 96 1 32 st%da
c $STORAGE 9 128 1 32 nst%d
c $STORAGE 9 160 1 32 nst%dl
c $STORAGE 9 192 1 32 nst%dm
c $STORAGE 9 224 1 32 nst%da
b $STORAGE 9 0 1 32 md%d
c $CONSOLE 10 0 1 1 logibm
c $CONSOLE 10 1 1 1 psaux
c $CONSOLE 10 2 1 1 inportbm
c $CONSOLE 10 3 1 1 atibm
c $CONSOLE 10 4 1 1 jbm
c $CONSOLE 10 4 1 1 amigamouse
c $CONSOLE 10 5 1 1 atarimouse
c $CONSOLE 10 6 1 1 sunmouse
c $CONSOLE 10 7 1 1 amigamouse1
c $CONSOLE 10 8 1 1 smouse
c $CONSOLE 10 9 1 1 pc110pad
c $CONSOLE 10 10 1 1 adbmouse
c $CONSOLE 10 11 1 1 vrtpanel
# Where did 12 go?
c $CONSOLE 10 13 1 1 vpcmouse
c $CONSOLE 10 14 1 1 touchscreen/ucb1x00
c $CONSOLE 10 15 1 1 touchscreen/mk712
c $CONSOLE 10 128 1 1 beep
c $ROOT 10 129 1 1 modreq
c $ROOT 10 130 1 1 watchdog
c $ROOT 10 131 1 1 temperature
c $ROOT 10 132 1 1 hwtrap
c $ROOT 10 133 1 1 exttrp
c $ROOT 10 134 1 1 apm_bios
c $ALLREAD 10 135 1 1 rtc
# Where did 136, 137, and 138 go?
c $ROOT 10 139 1 1 openprom
c $ROOT 10 140 1 1 relay8
c $ROOT 10 141 1 1 relay16
c $ROOT 10 142 1 1 msr
c $ROOT 10 143 1 1 pciconf
c $ROOT 10 144 1 1 nvram
c $CONSOLE 10 145 1 1 hfmodem
c $CONSOLE 10 146 1 1 graphics
c $CONSOLE 10 147 1 1 opengl
c $CONSOLE 10 148 1 1 gfx
c $CONSOLE 10 149 1 1 input/mouse
c $CONSOLE 10 150 1 1 input/keyboard
c $CONSOLE 10 151 1 1 led
c $ROOT 10 152 1 1 kpoll
c $ROOT 10 153 1 1 mergemem
c $CONSOLE 10 154 1 1 pmu
c $SERIAL 10 155 1 1 isictl
c $ROOT 10 156 1 1 lcd
c $ROOT 10 157 1 1 ac
c $ROOT 10 158 1 1 nwbutton
c $ROOT 10 159 1 1 nwdebug
c $ROOT 10 160 1 1 nwflash
c $ROOT 10 161 1 1 userdma
c $ROOT 10 162 1 1 smbus
c $CONSOLE 10 163 1 1 lik
c $ROOT 10 164 1 1 ipmo
c $ROOT 10 165 1 1 vmmon
c $ROOT 10 166 1 1 i2o/ctl
c $SERIAL 10 167 1 1 specialix_sxctl
c $SERIAL 10 168 1 1 tcldrv
c $SERIAL 10 169 1 1 specialix_rioctl
c $ROOT 10 170 1 1 thinkpad/thinkpad
c $ROOT 10 171 1 1 srripc
c $ROOT 10 172 1 1 usemaclone
c $ROOT 10 173 1 1 ipmikcs
c $ROOT 10 174 1 1 uctrl
c $ALLREAD 10 175 1 1 agpgart
c $ALLREAD 10 176 1 1 gtrsc
c $SERIAL 10 177 1 1 cbm
c $ROOT 10 178 1 1 jsflash
c $ROOT 10 179 1 1 xsvc
c $CONSOLE 10 180 1 1 vrbuttons
c $ROOT 10 181 1 1 toshiba
c $ROOT 10 182 1 1 perfctr
c $ROOT 10 183 1 1 hwrng
# Replaced with per-cpu paths (see redhat).
#c $ROOT 10 184 1 1 cpu/microcode
# Where did 185 go?
c $ROOT 10 186 1 1 atomicps
c $ROOT 10 187 1 1 irnet
c $ROOT 10 188 1 1 smbusbios
c $ROOT 10 189 1 1 ussp_ctl
c $ROOT 10 190 1 1 crash
c $ROOT 10 191 1 1 pcl181
c $ROOT 10 192 1 1 nas_xbus
c $ROOT 10 193 1 1 d7s
c $ROOT 10 194 1 1 zkshim
c $CONSOLE 10 195 1 1 elographics/e2201
# Where did 196 and 197 go?
c $ROOT 10 198 1 1 sexec
c $CONSOLE 10 199 1 1 scanners/cuecat
c $ROOT 10 200 1 1 net/tun
c $ROOT 10 201 1 1 button/gulpb
# Where did 202 and 203 go?
c $CONSOLE 10 204 1 1 video/em8300
c $CONSOLE 10 205 1 1 video/em8300_mv
c $CONSOLE 10 206 1 1 video/em8300_ma
c $CONSOLE 10 207 1 1 video/em8300_sp
c $ROOT 10 208 1 1 compaq/cpqphpc
c $ROOT 10 209 1 1 compaq/cpqrid
c $ROOT 10 210 1 1 impi/bt
c $ROOT 10 211 1 1 impi/smic
c $ROOT 10 212 1 1 watchdogs/0
c $ROOT 10 213 1 1 watchdogs/1
c $ROOT 10 214 1 1 watchdogs/2
c $ROOT 10 215 1 1 watchdogs/3
c $ROOT 10 216 1 1 fujitsu/apanel
c $ROOT 10 217 1 1 ni/natmotn
c $ROOT 10 218 1 1 kchuid
c $ROOT 10 219 1 1 modems/mwave
c $ROOT 10 220 1 1 mptctl
c $ROOT 10 221 1 1 mvista/hssdsi
c $ROOT 10 222 1 1 mvista/hasi
c $ROOT 10 223 1 1 systrace
c $ROOT 10 224 1 1 tpm
c $ROOT 10 225 1 1 pps
# SPARC only
c $CONSOLE 11 0 1 1 kbd
# PA-RISC only
# c $SERIAL 11 0 1 4 ttyB%d
b $STORAGE 11 0 1 32 scd%d
c $STORAGE 12 2 1 1 ntpqic11
c $STORAGE 12 3 1 1 tpqic11
c $STORAGE 12 4 1 1 ntpqic24
c $STORAGE 12 5 1 1 tpqic24
c $STORAGE 12 6 1 1 ntpqic120
c $STORAGE 12 7 1 1 tpqic120
c $STORAGE 12 8 1 1 ntpqic150
c $STORAGE 12 9 1 1 tpqic150
b $STORAGE 12 0 1 8 dos_cd%d
c $CONSOLE 13 0 1 32 input/js%d
c $CONSOLE 13 32 1 31 input/mouse%d
c $CONSOLE 13 63 1 1 input/mice
c $CONSOLE 13 64 1 32 input/event%d
b $STORAGE 13 0 1 64 xda
b $STORAGE 13 64 1 64 xdb
c $CONSOLE 14 0 1 1 mixer
c $CONSOLE 14 1 1 1 sequencer
c $CONSOLE 14 2 1 1 midi00
c $CONSOLE 14 3 1 1 dsp
c $CONSOLE 14 4 1 1 audio
# Where did 5 go?
c $CONSOLE 14 6 1 1 sndstat
c $CONSOLE 14 7 1 1 audioctl
c $CONSOLE 14 8 1 1 sequencer2
c $CONSOLE 14 16 1 1 mixer1
c $CONSOLE 14 17 1 1 patmgr0
c $CONSOLE 14 18 1 1 midi01
c $CONSOLE 14 19 1 1 dsp1
c $CONSOLE 14 20 1 1 audio1
c $CONSOLE 14 33 1 1 patmgr1
c $CONSOLE 14 34 1 1 midi02
c $CONSOLE 14 50 1 1 midi03
b $STORAGE 14 0 1 17 dos_hda
b $STORAGE 14 64 1 17 dos_hdb
b $STORAGE 14 128 1 17 dos_hdc
b $STORAGE 14 192 1 17 dos_hdd
l js0 input/js0
l js1 input/js1
l js2 input/js2
l js3 input/js3
# Replaced with symlinks to input core joystick devices (see usb).
#c $CONSOLE 15 0 1 128 js%d
#c $CONSOLE 15 128 1 128 djs%d
b $STORAGE 15 0 1 1 sonycd
c $CONSOLE 16 0 1 1 gs4500
b $STORAGE 16 0 1 1 gscd
c $SERIAL 17 0 1 16 ttyH%d
b $STORAGE 17 0 1 1 optcd
c $SERIAL 18 0 1 16 cuh%d
b $STORAGE 18 0 1 1 sjcd
c $SERIAL 19 0 1 33 ttyC%d
b $STORAGE 19 0 1 8 double%d
b $STORAGE 19 128 1 8 cdouble%d
c $SERIAL 20 0 1 32 cub%d
b $STORAGE 20 0 1 1 hitcd
c $STORAGE 21 0 1 32 sg%d
b $STORAGE 21 0 1 64 mfma
b $STORAGE 21 64 1 64 mfmb
c $SERIAL 22 0 1 32 ttyD%d
b $STORAGE 22 0 1 33 hdc
b $STORAGE 22 64 1 33 hdd
c $SERIAL 23 0 1 32 cud%d
b $STORAGE 23 0 1 1 mcd
c $SERIAL 24 0 1 256 ttyE%d
b $STORAGE 24 0 1 1 cdu535
c $SERIAL 25 0 1 256 cue%d
b $STORAGE 25 0 1 4 sbpcd%d 0
c $CONSOLE 26 0 1 1 wvisfgrab
b $STORAGE 26 0 1 4 sbpcd%d 4
c $STORAGE 27 0 1 4 qft%d
c $STORAGE 27 4 1 4 nqft%d
c $STORAGE 27 16 1 4 zqft%d
c $STORAGE 27 20 1 4 nzqft%d
c $STORAGE 27 32 1 4 rawqft%d
c $STORAGE 27 36 1 4 nrawqft%d
b $STORAGE 27 0 1 4 sbpcd%d 8
c $ROOT 28 0 1 4 staliomem%d
c $PRINTER 28 0 1 4 slm%d
b $STORAGE 28 0 1 4 sbpcd%d 12
# This next set's commented out because it conflicts with the Apple Desktop
# Bus driver, which appears to be the more correct of the two.
# b $STORAGE 28 0 1 16 ada
# b $STORAGE 28 16 1 16 adb
# b $STORAGE 28 32 1 16 adc
# b $STORAGE 28 48 1 16 add
# b $STORAGE 28 64 1 16 ade
# b $STORAGE 28 80 1 16 adf
# b $STORAGE 28 96 1 16 adg
# b $STORAGE 28 112 1 16 adh
# b $STORAGE 28 128 1 16 adi
# b $STORAGE 28 144 1 16 adj
# b $STORAGE 28 160 1 16 adk
# b $STORAGE 28 176 1 16 adl
# b $STORAGE 28 192 1 16 adm
# b $STORAGE 28 208 1 16 adn
# b $STORAGE 28 224 1 16 ado
# b $STORAGE 28 240 1 16 adp
c $CONSOLE 29 0 1 32 fb%d
b $STORAGE 29 0 1 1 aztcd
c $ROOT 30 0 1 1 socksys
c $ROOT 30 1 1 1 spx
c $ROOT 30 32 1 1 inet/ip
c $ROOT 30 33 1 1 inet/icmp
c $ROOT 30 34 1 1 inet/ggp
c $ROOT 30 35 1 1 inet/ipip
c $ROOT 30 36 1 1 inet/tcp
c $ROOT 30 37 1 1 inet/egp
c $ROOT 30 38 1 1 inet/pup
c $ROOT 30 39 1 1 inet/udp
c $ROOT 30 40 1 1 inet/idp
c $ROOT 30 41 1 1 inet/rawip
l ip inet/ip
l icmp inet/icmp
l ggp inet/ggp
l ipip inet/ipip
l tcp inet/tcp
l egp inet/egp
l pup inet/pup
l udp inet/udp
l idp inet/idp
l rawip inet/rawip
l inet/arp udp
l inet/rip udp
l nfsd socksys
l X0R null
b $STORAGE 30 0 1 1 cm205cd
c $CONSOLE 31 0 1 1 mpu401data
c $CONSOLE 31 1 1 1 mpu401stat
b $STORAGE 31 0 1 8 rom%d
b $STORAGE 31 8 1 8 rrom%d
b $STORAGE 31 16 1 8 flash%d
b $STORAGE 31 24 1 8 rflash%d
c $SERIAL 32 0 1 16 ttyX%d
b $STORAGE 32 0 1 1 cm206cd
c $SERIAL 33 0 1 16 cux%d
b $STORAGE 33 0 1 33 hde
b $STORAGE 33 64 1 33 hdf
c $ROOT 34 0 1 16 scc%d
b $STORAGE 34 0 1 33 hdg
b $STORAGE 34 64 1 33 hdh
c $CONSOLE 35 0 1 4 midi%d
c $CONSOLE 35 64 1 4 rmidi%d
c $CONSOLE 35 128 1 4 smpte%d
b $STORAGE 35 0 1 1 slram
c $ROOT 36 0 1 1 route
c $ROOT 36 1 1 1 skip
c $ROOT 36 2 1 1 fwmonitor
c $ROOT 36 16 1 16 tap%d
b $STORAGE 36 0 1 64 eda
b $STORAGE 36 64 1 64 edb
c $STORAGE 37 0 1 128 ht%d
c $STORAGE 37 128 1 128 nht%d
b $STORAGE 37 0 1 1 z2ram
c $ROOT 38 0 1 16 mlanai%d
c $ROOT 39 0 1 16 ml16pa-a%d
c $ROOT 39 16 1 1 ml16pa-d
c $ROOT 39 17 1 3 ml16pa-c%d
c $ROOT 39 32 1 16 ml16pb-a%d
c $ROOT 39 48 1 1 ml16pb-d
c $ROOT 39 49 1 3 ml16pb-c%d
c $CONSOLE 40 0 1 1 mmetfgrab
# Obsolete (see devices.txt).
#b $ROOT 40 0 1 16 eza
c $ROOT 41 0 1 1 yamm
b $STORAGE 41 0 1 1 bpcd
# Stay away from major 42! Don't add any entries which use it! I mean it!
c $SERIAL 43 0 1 64 ttyI%d
b $STORAGE 43 0 1 128 nb%d
c $SERIAL 44 0 1 64 cui%d
b $STORAGE 44 0 1 16 ftla
b $STORAGE 44 16 1 16 ftlb
b $STORAGE 44 32 1 16 ftlc
b $STORAGE 44 48 1 16 ftld
b $STORAGE 44 64 1 16 ftle
b $STORAGE 44 80 1 16 ftlf
b $STORAGE 44 96 1 16 ftlg
b $STORAGE 44 112 1 16 ftlh
b $STORAGE 44 128 1 16 ftli
b $STORAGE 44 144 1 16 ftlj
b $STORAGE 44 160 1 16 ftlk
b $STORAGE 44 176 1 16 ftll
b $STORAGE 44 192 1 16 ftlm
b $STORAGE 44 208 1 16 ftln
b $STORAGE 44 224 1 16 ftlo
b $STORAGE 44 240 1 16 ftlp
c $ROOT 45 0 1 64 isdn%d
c $ROOT 45 64 1 64 isdnctrl%d
c $ROOT 45 128 1 64 ippp%d
c $ROOT 45 255 1 1 isdninfo
b $STORAGE 45 0 1 16 pda
b $STORAGE 45 16 1 16 pdb
b $STORAGE 45 32 1 16 pdc
b $STORAGE 45 48 1 16 pdd
c $SERIAL 46 0 1 16 ttyR%d
b $STORAGE 46 0 1 4 pcd%d
c $SERIAL 47 0 1 16 cur%d
b $STORAGE 47 0 1 4 pf%d
c $SERIAL 48 0 1 16 ttyL%d
c $SERIAL 49 0 1 16 cul%d
c $SERIAL 51 0 1 16 bc%d
c $ROOT 52 0 1 4 dcbri%d
c $ROOT 53 0 1 3 pd_bdm%d
c $ROOT 53 3 1 3 icd_bdm%d
c $SERIAL 54 0 1 3 holter%d
c $ROOT 55 0 1 1 dsp56k
c $ROOT 56 0 1 1 adb
b $STORAGE 56 0 1 33 hdi
b $STORAGE 56 64 1 33 hdj
c $SERIAL 57 0 1 16 ttyP%d
b $STORAGE 57 0 1 33 hdk
b $STORAGE 57 64 1 33 hdl
c $SERIAL 58 0 1 16 cup%d
c $ROOT 59 0 1 1 firewall
# Conflicts with parallel-port disks (see devices.txt).
#b $STORAGE 59 0 1 8 pda%d
#b $STORAGE 59 0 1 8 rpda%d
# Here there be dragons.
c $ROOT 64 0 1 1 enskip
b $STORAGE 64 0 1 1 scramdisk/master
b $STORAGE 64 1 1 254 scramdisk/%d
c $ROOT 65 0 1 4 plink%d
c $ROOT 65 64 1 4 rplink%d
c $ROOT 65 128 1 4 plink%dd
c $ROOT 65 192 1 4 rplink%dd
b $STORAGE 65 0 1 16 sdq
b $STORAGE 65 16 1 16 sdr
b $STORAGE 65 32 1 16 sds
b $STORAGE 65 48 1 16 sdt
b $STORAGE 65 64 1 16 sdu
b $STORAGE 65 80 1 16 sdv
b $STORAGE 65 96 1 16 sdw
b $STORAGE 65 112 1 16 sdx
b $STORAGE 65 128 1 16 sdy
b $STORAGE 65 144 1 16 sdz
b $STORAGE 65 160 1 16 sdaa
b $STORAGE 65 176 1 16 sdab
b $STORAGE 65 192 1 16 sdac
b $STORAGE 65 208 1 16 sdad
b $STORAGE 65 224 1 16 sdae
b $STORAGE 65 240 1 16 sdaf
c $ROOT 66 0 1 16 yppcpci%d
b $STORAGE 66 0 1 16 sdag
b $STORAGE 66 16 1 16 sdah
b $STORAGE 66 32 1 16 sdai
b $STORAGE 66 48 1 16 sdaj
b $STORAGE 66 64 1 16 sdak
b $STORAGE 66 80 1 16 sdal
b $STORAGE 66 96 1 16 sdam
b $STORAGE 66 112 1 16 sdan
b $STORAGE 66 128 1 16 sdao
b $STORAGE 66 144 1 16 sdap
b $STORAGE 66 160 1 16 sdaq
b $STORAGE 66 176 1 16 sdar
b $STORAGE 66 192 1 16 sdas
b $STORAGE 66 208 1 16 sdat
b $STORAGE 66 224 1 16 sdau
b $STORAGE 66 240 1 16 sdav
c $STORAGE 67 0 1 1 cfs0
b $STORAGE 67 0 1 16 sdaw
b $STORAGE 67 16 1 16 sdax
b $STORAGE 67 32 1 16 sday
b $STORAGE 67 48 1 16 sdaz
b $STORAGE 67 64 1 16 sdba
b $STORAGE 67 80 1 16 sdbb
b $STORAGE 67 96 1 16 sdbc
b $STORAGE 67 112 1 16 sdbd
b $STORAGE 67 128 1 16 sdbe
b $STORAGE 67 144 1 16 sdbf
b $STORAGE 67 160 1 16 sdbg
b $STORAGE 67 176 1 16 sdbh
b $STORAGE 67 192 1 16 sdbi
b $STORAGE 67 208 1 16 sdbj
b $STORAGE 67 224 1 16 sdbk
b $STORAGE 67 240 1 16 sdbl
c $ROOT 68 0 1 1 capi20
c $ROOT 68 1 1 20 capi20.%02d
b $STORAGE 68 0 1 16 sdbm
b $STORAGE 68 16 1 16 sdbn
b $STORAGE 68 32 1 16 sdbo
b $STORAGE 68 48 1 16 sdbp
b $STORAGE 68 64 1 16 sdbq
b $STORAGE 68 80 1 16 sdbr
b $STORAGE 68 96 1 16 sdbs
b $STORAGE 68 112 1 16 sdbt
b $STORAGE 68 128 1 16 sdbu
b $STORAGE 68 144 1 16 sdbv
b $STORAGE 68 160 1 16 sdbw
b $STORAGE 68 176 1 16 sdbx
b $STORAGE 68 192 1 16 sdby
b $STORAGE 68 208 1 16 sdbz
b $STORAGE 68 224 1 16 sdca
b $STORAGE 68 240 1 16 sdcb
c $ROOT 69 0 1 1 ma16
b $STORAGE 69 0 1 16 sdcc
b $STORAGE 69 16 1 16 sdcd
b $STORAGE 69 32 1 16 sdce
b $STORAGE 69 48 1 16 sdcf
b $STORAGE 69 64 1 16 sdcg
b $STORAGE 69 80 1 16 sdch
b $STORAGE 69 96 1 16 sdci
b $STORAGE 69 112 1 16 sdcj
b $STORAGE 69 128 1 16 sdck
b $STORAGE 69 144 1 16 sdcl
b $STORAGE 69 160 1 16 sdcm
b $STORAGE 69 176 1 16 sdcn
b $STORAGE 69 192 1 16 sdco
b $STORAGE 69 208 1 16 sdcp
b $STORAGE 69 224 1 16 sdcq
b $STORAGE 69 240 1 16 sdcr
c $ROOT 70 0 1 1 apscfg
c $ROOT 70 1 1 1 apsauth
c $ROOT 70 2 1 1 apslog
c $ROOT 70 3 1 1 apsdbg
c $ROOT 70 64 1 1 apsisdn
c $ROOT 70 65 1 1 apsasync
c $ROOT 70 128 1 1 apsmon
b $STORAGE 70 0 1 16 sdcs
b $STORAGE 70 16 1 16 sdct
b $STORAGE 70 32 1 16 sdcu
b $STORAGE 70 48 1 16 sdcv
b $STORAGE 70 64 1 16 sdcw
b $STORAGE 70 80 1 16 sdcx
b $STORAGE 70 96 1 16 sdcy
b $STORAGE 70 112 1 16 sdcz
b $STORAGE 70 128 1 16 sdda
b $STORAGE 70 144 1 16 sddb
b $STORAGE 70 160 1 16 sddc
b $STORAGE 70 176 1 16 sddd
b $STORAGE 70 192 1 16 sdde
b $STORAGE 70 208 1 16 sddf
b $STORAGE 70 224 1 16 sddg
b $STORAGE 70 240 1 16 sddh
c $SERIAL 71 0 1 256 ttyF%d
b $STORAGE 71 0 1 16 sddi
b $STORAGE 71 16 1 16 sddj
b $STORAGE 71 32 1 16 sddk
b $STORAGE 71 48 1 16 sddl
b $STORAGE 71 64 1 16 sddm
b $STORAGE 71 80 1 16 sddn
b $STORAGE 71 96 1 16 sddo
b $STORAGE 71 112 1 16 sddp
b $STORAGE 71 128 1 16 sddq
b $STORAGE 71 144 1 16 sddr
b $STORAGE 71 160 1 16 sdds
b $STORAGE 71 176 1 16 sddt
b $STORAGE 71 192 1 16 sddu
b $STORAGE 71 208 1 16 sddv
b $STORAGE 71 224 1 16 sddw
b $STORAGE 71 240 1 16 sddx
c $SERIAL 72 0 1 256 cuf%d
c $ROOT 73 0 4 4 ip2ipl%d
c $ROOT 73 1 4 4 ip2stat%d
c $ROOT 74 0 1 16 SCI/%d
c $SERIAL 75 0 1 16 ttyW%d
c $SERIAL 76 0 1 16 cuw%d
c $ALLREAD 77 0 1 1 qng
# Conflict with isicom driver (see devices.txt).
#c $SERIAL 78 0 1 16 ttyM%x
#c $SERIAL 79 0 1 16 cum%d
c $CONSOLE 80 0 1 1 at200
b $STORAGE 80 0 1 16 i2o/hda
b $STORAGE 80 16 1 16 i2o/hdb
b $STORAGE 80 32 1 16 i2o/hdc
b $STORAGE 80 48 1 16 i2o/hdd
b $STORAGE 80 64 1 16 i2o/hde
b $STORAGE 80 80 1 16 i2o/hdf
b $STORAGE 80 96 1 16 i2o/hdg
b $STORAGE 80 112 1 16 i2o/hdh
b $STORAGE 80 128 1 16 i2o/hdi
b $STORAGE 80 144 1 16 i2o/hdj
b $STORAGE 80 160 1 16 i2o/hdk
b $STORAGE 80 176 1 16 i2o/hdl
b $STORAGE 80 192 1 16 i2o/hdm
b $STORAGE 80 208 1 16 i2o/hdn
b $STORAGE 80 224 1 16 i2o/hdo
b $STORAGE 80 240 1 16 i2o/hdp
c $CONSOLE 81 0 1 64 video%d
c $CONSOLE 81 64 1 64 radio%d
c $CONSOLE 81 192 1 32 vtx%d
c $CONSOLE 81 224 1 32 vbi%d
b $STORAGE 81 0 1 16 i2o/hdq
b $STORAGE 81 16 1 16 i2o/hdr
b $STORAGE 81 32 1 16 i2o/hds
b $STORAGE 81 48 1 16 i2o/hdt
b $STORAGE 81 64 1 16 i2o/hdu
b $STORAGE 81 80 1 16 i2o/hdv
b $STORAGE 81 96 1 16 i2o/hdw
b $STORAGE 81 112 1 16 i2o/hdx
b $STORAGE 81 128 1 16 i2o/hdy
b $STORAGE 81 144 1 16 i2o/hdz
b $STORAGE 81 160 1 16 i2o/hdaa
b $STORAGE 81 176 1 16 i2o/hdab
b $STORAGE 81 192 1 16 i2o/hdac
b $STORAGE 81 208 1 16 i2o/hdad
b $STORAGE 81 224 1 16 i2o/hdae
b $STORAGE 81 240 1 16 i2o/hdaf
c $CONSOLE 82 0 1 4 winradio%d
b $STORAGE 82 0 1 16 i2o/hdag
b $STORAGE 82 16 1 16 i2o/hdah
b $STORAGE 82 32 1 16 i2o/hdai
b $STORAGE 82 48 1 16 i2o/hdaj
b $STORAGE 82 64 1 16 i2o/hdak
b $STORAGE 82 80 1 16 i2o/hdal
b $STORAGE 82 96 1 16 i2o/hdam
b $STORAGE 82 112 1 16 i2o/hdan
b $STORAGE 82 128 1 16 i2o/hdao
b $STORAGE 82 144 1 16 i2o/hdap
b $STORAGE 82 160 1 16 i2o/hdaq
b $STORAGE 82 176 1 16 i2o/hdar
b $STORAGE 82 192 1 16 i2o/hdas
b $STORAGE 82 208 1 16 i2o/hdat
b $STORAGE 82 224 1 16 i2o/hdau
b $STORAGE 82 240 1 16 i2o/hdav
c $CONSOLE 83 0 1 1 vtx
c $CONSOLE 83 16 1 1 vttuner
b $STORAGE 83 0 1 16 i2o/hdaw
b $STORAGE 83 16 1 16 i2o/hdax
b $STORAGE 83 32 1 16 i2o/hday
b $STORAGE 83 48 1 16 i2o/hdaz
b $STORAGE 83 64 1 16 i2o/hdba
b $STORAGE 83 80 1 16 i2o/hdbb
b $STORAGE 83 96 1 16 i2o/hdbc
b $STORAGE 83 112 1 16 i2o/hdbd
b $STORAGE 83 128 1 16 i2o/hdbe
b $STORAGE 83 144 1 16 i2o/hdbf
b $STORAGE 83 160 1 16 i2o/hdbg
b $STORAGE 83 176 1 16 i2o/hdbh
b $STORAGE 83 192 1 16 i2o/hdbi
b $STORAGE 83 208 1 16 i2o/hdbj
b $STORAGE 83 224 1 16 i2o/hdbk
b $STORAGE 83 240 1 16 i2o/hdbl
c $ROOT 84 0 1 2 ihcp%d
b $STORAGE 84 0 1 16 i2o/hdbm
b $STORAGE 84 16 1 16 i2o/hdbn
b $STORAGE 84 32 1 16 i2o/hdbo
b $STORAGE 84 48 1 16 i2o/hdbp
b $STORAGE 84 64 1 16 i2o/hdbq
b $STORAGE 84 80 1 16 i2o/hdbr
b $STORAGE 84 96 1 16 i2o/hdbs
b $STORAGE 84 112 1 16 i2o/hdbt
b $STORAGE 84 128 1 16 i2o/hdbu
b $STORAGE 84 144 1 16 i2o/hdbv
b $STORAGE 84 160 1 16 i2o/hdbw
b $STORAGE 84 176 1 16 i2o/hdbx
b $STORAGE 84 192 1 16 i2o/hdby
b $STORAGE 84 208 1 16 i2o/hdbz
b $STORAGE 84 224 1 16 i2o/hdca
b $STORAGE 84 240 1 16 i2o/hdcb
c $ROOT 85 0 1 1 shmiq
c $ROOT 85 1 1 8 qcntl%d
b $STORAGE 85 0 1 16 i2o/hdcc
b $STORAGE 85 16 1 16 i2o/hdcd
b $STORAGE 85 32 1 16 i2o/hdce
b $STORAGE 85 48 1 16 i2o/hdcf
b $STORAGE 85 64 1 16 i2o/hdcg
b $STORAGE 85 80 1 16 i2o/hdch
b $STORAGE 85 96 1 16 i2o/hdci
b $STORAGE 85 112 1 16 i2o/hdcj
b $STORAGE 85 128 1 16 i2o/hdck
b $STORAGE 85 144 1 16 i2o/hdcl
b $STORAGE 85 160 1 16 i2o/hdcm
b $STORAGE 85 176 1 16 i2o/hdcn
b $STORAGE 85 192 1 16 i2o/hdco
b $STORAGE 85 208 1 16 i2o/hdcp
b $STORAGE 85 2