Installing Linux on your system Ok, this is a short guide for those people who actually want to get a running system, not just look at the pretty source code :-). You'll certainly need minix for most of the steps. 0. Back up any important software. This kernel has been working beautifully on my machine for some time, and has never destroyed anything on my hard-disk, but you never can be too careful when it comes to using the disk directly. I'd hate to get flames like "you destroyed my entire collection of Sam Fox nude gifs (all 103 of them), I'll hate you forever", just because I may have done something wrong. Double-check your hardware. If you are using other than EGA/VGA, you'll have to make the appropriate changes to 'linux/kernel/console.c', which may not be easy. If you are able to use the at_wini.c under minix, linux will probably also like your drive. If you feel comfortable with scan-codes, you might want to hack 'linux/kernel/keyboard.s' making it more practical for your [US|German|...] keyboard. 1. Decide on what root device you'll be using. You can use any (standard) partition on any of your harddisks, the numbering is the same as for minix (ie 0x306, which I'm using, means partition 1 on hd2). It is certainly possible to use the same device as for minix, but I wouldn't recommend it. You'd have to change pathnames (or make a chroot in init) to get minix and linux to live together peacefully. I'd recommend making a new filesystem, and filling it with the necessary files: You need at least the following: - /dev/tty0 (same as under minix, ie mknod ...) - /dev/tty (same as under minix) - /bin/sh (link to bash) - /bin/update (I guess this should be /etc/update ...) Note that linux and minix binaries aren't compatible, although they use the same (gcc-)header (for ease of cross-compiling), so running one under the other will result in errors. 2. Compile the source, making necessary changes into the makefiles and linux/include/linux/config.h and linux/boot/boot.s. I'm using a slightly hacked gcc-1.40, to which I have added a -mstring-insns flag, which uses the i386 string instructions for structure copy etc. Removing the flag from all makefiles should do the trick for you. NOTE! I'm using -Wall, and I'm not seeing many warnings (2 I think, one about _exit returning although it's volatile - it's ok.) If you get more warnings when compiling, something's wrong. 3. Copy the resultant code to a diskette of the right type. Use 'cp Image /dev/PS0' or equivalent. 4. Boot with the new diskette. If you've done everything right (and if *I've* done everything right), you should now be running bash as root. You can't do much (alias ls='echo *' is a good idea :-), but if you do run, most other things should work. I'd be happy to hear from anybody that has come this far - and I'll send any ported binaries you might want (and I have). I'll also put them out for ftp if there is enough interest. With gcc, make and uemacs, I've been able to stop crosscompiling and actually compile natively under linux. (I also have a term-emu, sz/rz, sed, etc ...) The boot-sequence should start with "Loading system...", and then a "Partition table ok" followed by some root-dev info. If you forget to make the /dev/tty0-character device, you'll never see anything but the "loading" message. Hopefully errors will be told to the console, but if there are problems at boot-up there is a distinct possibility that the machine just hangs. 5. Check the new filesystem regularly with (minix) fsck. I haven't got any errors for some time now, but I cannot guarantee that this means it will never happen. Due to slight differences in 'unlink', fsck will report "mode inode XXX not cleared", but that isn't an error, and you can safely ignore it (if you don't like it, do a fsck -a every once in a while). Minix "restore" will not work on a file deleted with linux - so be extra careful if you have a tendency to delete files you don't really want to. Logging out from the "login-shell" will automatically do a sync, and will leave you hanging without any processes (except update, which isn't much fun), so do the "three-finger-salute" to restart dos/minix/linux or whatever. 6. Mail me and ask about problems/updates etc. Even more welcome are success-reports (yeah, sure), and bugreports or even patches (or pointers to corrections). NOTE!!! I haven't included diffs with the binaries I've posted for the simple reason that there aren't any - I've had this silly idea that I'd rather change the OS than do a lot of porting. All source to the binaries can be found on nic.funet.fi under /pub/gnu or /pub/unix. Changes have been to makefiles or configuration files, and anybody interested in them might want to contact me. Mostly it's been a matter of adding a -DUSG to makefiles. The one exception if gcc - I've made some hacks on it (string-insns), and have got it (with the gracious help of Bruce Evans) to correctly emit software floating point. I haven't got diffs to that one either, as my hard-disk is overflowing and I cannot accomodate both originals and changes, but as per the GNU copyleft I'll make them available if someone wants them. I hope nobody want's them :-) Linus torvalds@kruuna.helsinki.fi