Minix ST 1.5.10 upgrade guide -- Howard Chu, July 1990 INTRODUCTION This document is part of a kit for upgrading your stock, unmodified Minix ST 1.1 system to version 1.5.10, the latest official ST version. The kit goes straight to 1.5.10 with no stops along the way... Please read this entire document before doing anything to your system. We'll both be happier for it in the end. This kit is basically a synthesis of all the work done by Frans Meulenbroeks, who posted the original upgrade material. His ":Install" installation guide is also included here, you should read the introduction there for more background info, restrictions, copyright, etc. HARDWARE REQUIREMENTS I did this upgrade on a system with a hard drive. I don't really want to think about doing it on a floppy-only system. I've tried, and it makes my brain hurt. The entire upgrade package compresses down to a 2.5 megabyte compressed tar file. You'll need nearly 6 megabytes of space to extract everything. You'll need around another 2.5 megabytes for all the resulting binary files. I worked out this package on a Unix system, and downloaded files to a TOS partition to be retrieved later (using tosread in Minix). If you don't have 10 megabytes of disk space attached to your ST you might consider splitting things up on a Unix box before going to your ST. This will be practical for a system with two double-sided disk drives, as the largest directory is only 500K (Kermit source). SETTING UP The whole kit consists of three parts, including this document. The other two parts are: up1510a.tar - 1.5 binaries necessary for the upgrade up1510b.tar - the complete 1.5.10 upgrade files. I suggest extracting the up1510a tar file into your /tmp directory, and moving the files to their proper place from there. There are two versions of cv in this tar file, a 1.1 and a 1.5 version. I'm not sure that the 1.1 version works very well... I think you will need the 1.5 version to create kernel.mix from kernel.out. (Sorry, when I got to this stage things weren't working very well and I didn't keep good track of what the problems were...) At any rate, you may want to grab the source for the version 1.1 cv from the 1.1fixes file (also available on terminator, er, atari.archive.umich.edu, the same place you found this stuff...). If you compile that on your 1.1 system before doing this upgrade, you will have a good, usable version 1.1 cv. The up1510b.tar file is meant to be extracted into /usr of your Minix filesystem. You need to make some preparations before this, of course. You will only need a few parts of the 1.1 source tree, and none of the include directory. I suggest renaming them, just to keep them handy in case you have trouble with the upgrade. mv /usr/src /usr/src1.1 mv /usr/include /usr/include1.1 mv /usr/lib/libc.a /usr/lib/libc1.1.a You should then make a new /usr/src directory, and copy a few files from /usr/src1.1 to it. mkdir /usr/src /usr/src/commands /usr/src/lib /usr/src/lib/M68000 cp /usr/src1.1/commands/dd.c /usr/src/commands cpdir /usr/src1.1/commands/mined /usr/src/commands/mined cpdir /usr/src1.1/commands/sh /usr/src/commands/sh cp /usr/src1.1/lib/*.s /usr/src/lib/M68000 cpdir /usr/src1.1/fs /usr/src/fs cpdir /usr/src1.1/kernel /usr/src/kernel cpdir /usr/src1.1/mm /usr/src/mm That's it for reusing 1.1 sources. Everything else is included here, as well as some patches to the above-mentioned source files. As mentioned before, you should also have the patch program from the 1.1 fixup posting. If you're feeling particularly brave, or confident that you have all your 1.1 stuff backed up safely on floppy, you can simply move the appropriate files to their new destinations instead of copying them. You will also need to rename a few of the .s source files in the M68000 directory. cd /usr/src/lib/M68000 mv stbrksz.s brksize.s mv stcrtso.s crtso.s mv stend.s end.s mv sthead.s head.s mv stsetjmp.s setjmp.s mv stsndrec.s sendrec.s If you have enough memory, you should create a system with a huge RAM disk. If you can fit all of the compiler files onto it, the compilation step will go a lot faster. (Probably talking around a 700K RAM disk here. 270K is used for /lib.) /bin/ar - needed after the new library is done /bin/as - needed for all compiles /bin/cat - helpful for applying the patches /bin/cc - needed for all compiles /bin/chmem - needed for most commands /bin/chmod - needed for some commands /bin/compress - actually zcat - for setup /bin/cp - needed for some commands /bin/cpdir - helpful in setup /bin/echo - needed for many commands (used in makefile) /bin/ln - needed for some installation steps /bin/ls - helpful /bin/make - needed for all compiles /bin/mkdir - setup /bin/mv - needed for library /bin/rm - needed for some pieces /bin/sh - needed for everything /bin/tar - setup /bin/tos... - setup /lib/cem /lib/cg /lib/cpp /lib/cv - all parts of the compiler /lib/ld /lib/opt CONFIGURING THE TOOLS These are the recommended amounts of memory for each of the compiler tools: cc 20000 cpp 30000 cv 50000 as 50000 ld 100000 cem 110000 cg 30000 opt 60000 sh 20000 INSTALLATION PROCESS 1. go to /usr, extract the up1510b.tar file. I recommend leaving the file compressed on a TOS partition, to save space. Extract with something like: tosread hd0a minix/upgrade.z | zcat | tar x - (you will need the binary of tar included in up1510a.tar, which allows reading from stdin instead of a named file.) The file Total.crc has the full crc values for what you should have *after* applying the patches that are also included. The directories containing patches have a file Diff.crc containing the crc values for all the patches. You shouldn't need to check these values, since any corruption would cause either/both zcat or tar to fail. [Another note - I named my hard drive devices: hd00 - block 0 hd10 = 2nd drive, hd20 = 3rd drive hd0a - 1st partition hd1a = 2nd drive, hd2a = 3rd drive hd0b - 2nd partition ... etc... hd0c - 3rd partition hd0d - 4th partition hd0e - entire disk] 2. cd /usr/include/minix edit the config.h file. you may want to edit boot.h, but I have no idea what you'd want to stick in there. 3. cd /usr/src/lib; make 4. mv libc.a /usr/lib If you're short on space, you can remove the .o files after any successful compilation step. 4a. You may want to make the new version of make at this point. It'll come in handy for the following compilation. cd /usr/src/commands/make; make; mv make /bin 5. cd /usr/src/fs; cat *.D | patch If you get any rejects, use the crc program from up1510a and compare the crc values for the .D diff files with the values in Diff.crc. If you're really short on space, you can "rm *~ *.D Diff.crc" after running patch. make 6. cd /usr/src/kernel; cat *.D | patch; make 7. cd /usr/src/mm; cat *.D | patch; make 8. cd /usr/src/tools; make 9. copy the files from /usr/etc to /etc. If /etc is on the ram disk, make sure you copy the files to the real disk that the ram disk was loaded from. You may want to edit the passwd file as well. I wasn't able to log in as root after the upgrade, so I dropped back and blanked out the root password in the new passwd file. You may also want to edit the rc file to suit your system. If your minix.img is larger than 0x40000 bytes (due to allocating more buffer cache in /usr/include/minix/config.h) you will have to change the value of ldaddr in boot.s, then remake minix.img. copy the minix.img file to a disk. 10. cd /usr/src/test; make 11. cd /usr/src/commands; patch < *.D (there's only one .D diff file here.) 12. cd mined; cat *.D | patch 13. cd ../sh; cat *.D | patch 14. cd .. (run make in /usr/src/commands) You may want to go out for a while. libc took a long time, and the other directories were so-so, but this is gonna go for *hours*... Also, the official makefile doesn't make it particularly easy to install the compiled files. I've put a slightly modified Makefile.hyc here, that puts the newly created executables in /usr/src/commands/bin. You can sort out the new binaries more easily with my makefile. Decide what you want to do, then maybe type "make -f Makefile.hyc" or just "make," then find something else to do. 15. Back already, huh? Hopefully nothing died in the middle of things. You should now be ready to install all the new commands into your /bin and /usr/bin directories. You may want to keep backups of the 1.1 commands, just in case. Make sure you install the new stuff on the real disk for /bin, if /bin is a ram disk. I did something like the following: mv /usr/bin /usr/bin1.1 mount /dev/hd0c /user mv /user/bin /usr/rootbin1.1 mkdir /usr/bin /user/bin cd /usr/bin1.1 for i in *;do mv /usr/src/commands/bin/$i /usr/bin; done cd /usr/rootbin1.1 for i in *;do mv /usr/src/commands/bin/$i /user/bin; done This preserved the layout of my original /bin and /usr/bin allocation. You'll still have some files in /usr/src/commands/bin to move. There will also be one or two 1.1 commands you can say goodbye to, like uudecode and uuencode which are replaced by uud and uue, respectively. 16. Go to the dev directory on the real root disk and execute the Makedev script from the /usr/src/tools directory. There was a typo in the official distribution, causing tty1 (the serial port) not to be made. It's fixed in this copy of Makedev. 17. Boot the new kernel. If all went well, you're now running Minix 1.5.10. (There, that wasn't so bad, was it? }-) 18. Ok, unfinished business. Move tos.arc to a TOS disk, and unarc it on your Minix TOS disk. 19. (optionally) Run the tests in /usr/src/test. Tests 17, 18, and 20 seemed to fail miserably on my system. Oh well. 20. Read thru the /etc/setup_usr script. You'll want to create the new /usr/adm and /usr/spool directories. 21. You need to do some fiddling to get the ps command working. ps tries to read the symbol tables of /usr/src/fs/fs.mix, /usr/src/kernel/kernel.mix, and /usr/src/mm/mm.mix. The distributed makefiles don't leave the symbol tables intact in the .mix files. I think the ast command will come in handy here, but I haven't tried it. Instead, I added the flags -a0:2 -a1:2 -a2:2 -a3:3 to the ld command line, and remade the .out and .mix files. That worked fine, and ps was happy after that. (It appears that you should feed the output of "anm kernel.out" to ast, and use it on kernel.mix. I dunno.) I think that's it. If you have a hard drive, this installation should be pretty painless. If not, well... Go ahead and try it and tell me how you did things. If patch rejects any of the diffs, you probably didn't use the original 1.1 source. The contents of up1510b.tar are completely in sync with the PC 1.5.10 sources, except for the kernel and two header files. (a.out.h and out.h). Only binaries are provided for elle, you should be able to get the sources from another Minix archive. Ok. Any feedback is welcome, let me know how things went. -- Howard Chu hyc@math.lsa.umich.edu .