tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: amd64 kernel, i386 userland



On Fri, 24 Jan 2014, Alan Barrett wrote:
I have successfully used "magic symlinks" (see symlink(7)) to allow
i386 and amd64 to use different instances of /dev.  The basic scheme is:

   Build a kernel with "options MAGICLINKS", or arrange to run
   sysctl -w vfs.generic.magiclinks=1 very early in /etc/rc.
   Putting the setting in /etc/sysctl.conf will probably be too late.

   mkdir /dev.i386
   mkdir /dev.amd64
   copy the i386 version of MAKEDEV to /dev.i386/MAKEDEV
   copy the amd64 version of MAKEDEV to /dev.amd64/MAKEDEV
   ( cd /dev.i386 && sh ./MAKEDEV all )
   ( cd /dev.amd64 && sh ./MAKEDEV all )
   mv /dev /dev.old && ln -sf dev.@machine /dev

   reboot.  If it works then rm -rf /dev.old.

Oh, I forgot to address the issue of booting without "options MAGICLINKS" in the kernel. No matter how early in /etc/rc you try to put the "sysctl -w vfs.generic.magiclinks=1" command, init(8) will want to open /dev/console earlier than that. So you either have to enable magiclinks in the kernel (so it's already enabled before init(8) starts), or you have to arrange for /dev/console to work even before magiclinks are enabled via the sysctl command.

Adding a symlink from /dev.@machine to dev.i386 works for this (taking "dev.@machine" literally instead of as a magic expansion):

    ln -s dev.i386 /dev.@machine

This is good enough for /dev/console and /dev/null, because the amd64 and i386 versions of those device nodes are identical.

--apb (Alan Barrett)


Home | Main Index | Thread Index | Old Index