Using Linux v0.11 Linus Torvalds 08.12.91 NOTE: Users of 0.10, please check the "changed" list before using 0.11. Booting linux Linux-0.11 can easily be booted by getting the 2 files bootimage-0.11.Z and rootimage-0.11.Z from the linux archive, uncompressing them and writing them out to disks of the same size (ie 2 1.44M floppies or 2 1.2M floppies). Writing the disks is done with the "rawrite.exe" program from dos, or with "dd" from unix. Linux is then booted simply by inserting the bootdiskette in drive A, and rebooting the machine. If everything goes well, linux will ask you to insert the root-disk after loading the system. Hopefully linux will then correctly load the shell executable, and leave you as root on the new system (prompt '# '). Using it. You can get a complete list of available commands by pressing twice: the root-disk contains mostly setup-programs needed to install the system on a harddisk. You can test them a bit, reading directories etc. In order to install linux on the harddisk, first check out your harddisk by executing the command "fdisk" - it should show you all the partitions available. If you have only 1 AT-harddisk, you should get a errormessage, just ignore it. At my system fdisk reports the following: /dev/hd1: 20476 blocks minix /dev/hd2: 19975 blocks minix /dev/hd3: 1020 blocks minix /dev/hd4: 170 blocks active 16-bit DOS (>=32M) /dev/hd6: 41641 blocks active minix The partition type given (12-bit DOS, minix etc) doesn{t really mean anything, unless it's a "extended partition", in which case you shouldn't use that partition for anything: linux doesn't yet understand them. When later using "mkfs" to make a linux file system, it won't change the output of fdisk, so fdisk may well report "DOS", while in fact you have made it a linux partition. If fdisk doesn't print out anything but errors, linux is unable to read your harddisk, and you are f**ked. Play around with the floppy version, but you won't be able to do anything real. Making a filesystem In order to really use linux, you will have to make a filesystem on your harddisk. This starts by deciding which partition you can use. Look again at what fdisk reports, and try to figure out which of the partitions you are using for DOS, OS/2 etc. /dev/hdX where X={1,2,3,4} always refers to the first harddisk, X={6,7,8,9} always refers to the second disk. /dev/hd0 and /dev/hd5 are special: they are all of the drive, and mkfs will refuse to use them for a filesystem. When you are certain you know which device points to which partition, you make a filesystem on the partition of your choice by writing: mkfs -c /dev/hdX blocks where "-c" means that you want mkfs to check for errors, "dev/hdX" is the free partition you intend to use for linux, and "blocks" is the number of blocks fdisk reports for that particular partition. NOTE! mkfs will overwrite the partition you selected, so be doubly (or triply) sure that you don't mind that. Note that when using the "-c" flag, mkfs will read through the entire partition: this can take some time. If there are read errors, mkfs will mark the particular block as bad, and continue: linux will also print a little message "harddisk I/O error". After running mkfs these messages should never occur again: if they do, your data may be corrupted. Mounting the filesystem After mkfs has exited, it's time to mount the file-system, and do the necessary things to make it a root file system. Mount the new filesystem on /user by writing: cd / mount /dev/hdX /user If you get errors for this, mkfs failed, and there is probably something seriously wrong. After mounting the device, you want to move all the files on the current floppy-root to the new fs. This can most easily be done by writing: cd /user for i in bin dev etc usr tmp floppy do cp +recursive +verbose /$i $i done sync which will also tell you what it is doing (/bin/sh -> bin/sh etc). After that, you should have a new filesystem that contains the bare necessities to start hacking linux. Play around some more, and exit linux by writing "logout or exit". This should result in child 4 died with error code 0000 # Do a couple of syncs (3 is a magic number), and reboot the machine. ALWAYS remember to sync before rebooting: terrible things happen if you don't. Using the harddisk as root Once you have happily made a new root, you will want to boot up with it. This is done by changing a word at offset 508 in the boot-image. The word (in 386-order, ie low byte first) tells the system which device to use as root: it is initially 0, which means that we want to use a floppy of the same type as the boot-disk (and this is the reason that you may not use a 360kB boot-disk even though the system fits on one: it has to be the same type as the root-diskette). In order to use the harddisk as root, this value has to be changed to point to the correct device. Harddisks have a major number of 3 under linux, and the minor nr is the same as the number X in /dev/hdX. The complete device number is then calculated with DEV_NO = (major<<8)+minor or alternatively major*256+minor. Thus /dev/hd1 is (3<<8)+1 = 0x301, /dev/hd6 = 0x0306 etc. Assuming the partition you made into the new root was /dev/hd2, you will have to write 0x0302 into the boot-image. That is, you should change the 508th byte in the image to 0x02, and the 509th byte to 0x03. There is a sample program for this in some of the older INSTALL-notes, if you don't understand what it's all about. Ok, I got the root on hd, what now? As you have probably noticed, you cannot get very far with the binaries found on the original root-diskette. So the first thing you want to do is to import some new binaries. To do this you need to tell linux what kind of floppies you have, as that's the easiest way to import things. As with harddisk, floppies have device numbers, but this time major = 2 instead of 3. The minor number is not as easy: it's a composite that tells which drive (A, B, C or D) and what type of drive (360kB, 1.2M, 1.44M etc). The formula is 'minor = type*4+nr', where nr is 0-3 for A-D, and type is 2 for 1.2M disks, and 7 for 1.44M disks. There are other types, but these should suffice for now. Thus if you have a 1.2M A-drive, and want to call it "floppy0", you have to tell linux so. This is done with the "mknod" command. mknod takes 4 paramters: the unix name of the device, a "b" or a "c" depending on whether it's a Block of Character device, and the major and minor numbers. Thus to make "floppy0" a 1.2M A-drive, you write: mknod /dev/floppy0 b 2 8 b is for Block-device, the 2 is for floppy, and the 8 is 4*2+0, where the 2 is 1.2M-drive and the 0 is drive A. Likewise to make a "floppy1" device that is a 1.44M drive in B, you write: mknod /dev/floppy1 b 2 29 where 29 = 4*7 + 1. There are a couple of standard names, for users that are used to minix (major, minor in parentheses): /dev/PS0 is a 1.44M in A (2,28), /dev/PS1 a 1.44M in B (2,29), /dev/at0 is a 1.2M in A (2,8), /dev/at1 is a 1.2M in B (2,9). Use mknod to make those that fit your computer. After you have made these special block devices, you can now read a floppy under linux. The easiest way to import things into linux is by writing a tar-file to a floppy with rawrite.exe, and then using: tar xvf /dev/floppy0 to untar it under linux. This way you can get the gcc binaries etc available from the linux-carrying sites. Changes from 0.10: - /bin/update is no longer automatically executed upon bootup: instead the file /etc/rc is evaluated by the shell. This file can then start the update process, mount andy needed filesystems, possibly fsck'ing them first. A minimal /etc/rc looks like this: /bin/update & > /etc/mtab echo " Ok." - init() restarts the shell every time it is exited: logout from the login shell results in a "child xxx died with error code yyy", a sync and then a new shell as root. - floppies work a lot better than in 0.10. Even using two floppies at the same time seems to work out ok. Reading big chunks at a time is also faster then in 0.10 (I think). - harddisk errors are handled better. Use the "-c" option in mkfs to map out all errors. - linux accepts most video-cards: harcules, MDA, CGA etc seem to work. - ^G beeps on the console, so command completion under bash etc will notify of errors. - sticky directories, corrected handling of uid/gid bits, and better handling of protections when not root. Most of these won't be noticeable until we get a init/login.