Hello,
Harold Baur <hb@hoyte.nl> wrote:
> Ad 1.
> The configure script generates errros. As a result of this
> I cannot do a "make bootrom" as suggested in the INSTALL file.
> Here's the output:
> [...]
> creating bootrom/make.defs
> sed: can't read /home/bo/etherboot-3.1/netboot-0.5.3/./bootrom/make.defs.in: No such file or directory
> mkdir: cannot make directory `bootrom/utils/utilsrc': No such file or directory
> creating bootrom/utils/utilsrc/Makefile
> ./config.status: bootrom/utils/utilsrc/Makefile: No such file or directory
> creating config.h
This looks like a mixup in the etherboot package. Please get the complete
netboot package from sunsite and try again. The configure script can only
run when you have the full netboot sources.
> Ad 2.
> [...]
> I figured this is a device problem, and indeed when I look at the device
> numbers on the NFS mounted system I see that all major numbers are 0.
> [...]
> cp them to server (HP-UX):
> crw------- 1 root root 18 0x000004 Feb 19 1994 udp
> [...]
> Oops. Major number is 0. This appears to be a problem with nfsd
> on the HP-UX, but I am not sure. The documentation doesn't mention
> it at all.
With the help of Jens-Uwe Mager (thanks to him) I think that I got a
solution to this. The problem is the different representation of major/
minor numbers on the filesystems. While HP-UX (and most other systems)
use 32 bit for encoding both major and minor, Linux just uses 16 bit.
However, the NFS protocol always transfers 32 bits. Now, the encoding
of device numbers on HP-UX looks like (with "a" being a bit of the major
number, and "b" being a bit of the minor number):
major << 24 | minor ==> aaaaaaaabbbbbbbbbbbbbbbbbbbbbbbb
while on Linux it looks like:
major << 8 | minor ==> 0000000000000000aaaaaaaabbbbbbbb
As you can see, the full Linux definition fits into the minor number
space on HP-UX. So in order to produce devices which can be exported
via NFS correctly, you should go to your HP-UX system and issue a
mknod command with major number 0, and the minor number computed the
way Linux wants it. Let's say you want to create a device which looks
to Linux like major/minor = 18/4. Then you can calculate the minor
number to use on HP-UX as follows:
18 << 8 | 4 = 4608 | 4 = 4612
So you should issue the following command on your HP-UX:
mknod udp c 0 4612
A device created this way will then look correctly when exported to your
Linux system. Since HP-UX understands hex with the mknod command, you could
alternatively also issue the command
mknod udp c 0 0x1204
For everybody having the same problem also with other servers, maybe the
following small program might be useful. It does not depend on the re-
presentation of the MKDEV system macro on each different platform, but
rather always uses the way, Linux wants device codes to be assembled.
=========================================================================
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <stdio.h>
void main(int argc, char **argv)
{
char *fname;
int major, minor;
mode_t mode;
dev_t dev;
if (argc != 5) {
fprintf(stderr, "Usage: mknod-linux <name> <type> <major> <minor>\n");
exit(1);
}
fname = argv[1];
major = atoi(argv[3]) & 0xff;
minor = atoi(argv[4]) & 0xff;
if (!strcmp(argv[2], "c"))
mode = 0666 | S_IFCHR;
else if (!strcmp(argv[2], "b"))
mode = 0666 | S_IFBLK;
else {
fprintf(stderr, "Error: <type> has to be either <c> or <b>\n");
exit(1);
}
dev = major << 8 | minor;
if (mknod(fname, mode, dev) < 0) {
perror("mknod");
exit(1);
}
exit(0);
}
=========================================================================
This program is just a quick hack, and not very sensitive about errors
on command line options. You would also need to port it to different
platforms, as I didn't care about that. However, when you run this
program on your HP-UX (or AIX or Solaris or whatever), and give it
the major/minor numbers you want to see on your Linux box after NFS
export, it will create a device entry which looks like described above
on your server. For example, if you name the above sample program
mknod-linux, and call it on your HP box with
mknod-linux udp c 4 18
you will (hopefully ;-)) get this output with ls -l:
crw------- 1 root root 0 0x001204 Feb 19 1994 udp
just as in the example above. After mounting the directory via NFS, Linux
however will show you the same directory entry as:
crw------- 1 root root 18, 4 Feb 19 1994 udp
which is what you wanted. But please note that so far this is all theory! Since
I don't have anything else but Linux available at the moment I can't tell you
whether this really works or not, but I think so.
> Ad 3.
> Since I can't do an NFS mount I'll do it with a ramdisk.
> After preparing a compressed filesystem image, I run
Try an uncompressed filesystem image. I don't think Linux can handle
compressed ones.
gero.
--
I hate quotations. Tell me what you know.
- Ralph Waldo Emerson
--
Gero Kuhlmann, Hannover 0511/6497525 (Voice) gero@gkminix.han.de
For requests or suggestions regarding this mailing list archive please write to netboot@gkminix.han.de.