kls@ditka.UUCP (Karl Swartz) (09/10/90)
In the past ten days I've spent a lot of time working on and
with Minix, and I'm still as impressed as last time I wrote.
But the road is far from smooth. Here is a condensation of
my notes which hopefully will help guide others along the path.
disk partitions
I've kept the partitions as Bruce built them, using hd3
as my / (root) filesystem (you'll need to patch the kernel
to make this the default) and hd4 for /u (home directories
for users). I kept the initial mini-system in hd2, safe
in case I need it to save my butt, and hd5 is a scratch
area. (I've configured in additional partitions beyond
hd5 for more scratch space.)
One gotcha is that the ROM monitor talks about physical
blocks on the drive, which are 512 bytes long, while the
numbers in the partition table are in 1024 byte logical
blocks. Some day I'll learn but I still end up being
very puzzled every time I look at this until I again
learn this. For reference, here is a list of partitions
and where the ROM monitor thinks they live:
/dev start size (hex/dec) phys block
hd0 0 9d40 / 40256 0
hd1 0 100 / 256 0
hd2 100 2710 / 10000 200
hd3 2810 2710 / 10000 5020
hd4 4f20 2710 / 10000 9e40
hd5 7630 2710 / 10000 ec60
multiple kernel images
You've got room for several kernels in the hd1 partition
so it's a nice idea to make a duplicate in case you screw
something up. Use the ROM monitor to do this:
Command (? for help): read 0 2000 80
Command (? for help): write 100 2000 80
To run one of the kernels enter
Command (? for help): read X 2000 80
Command (? for help): run 2000
where X is either 0 or 100 depending on where you want
the main or the backup kernel image.
loading the rest of the files
I did this step from Bruce's "install" notes two pieces
at a time, saving one piece to hd4 (write to 9e40) and
the other to hd5 (write to ec60) in each pass. It still
is tedious, but with half as many reboots it's gotta be
better.
include files
Like any sane individual I immediately started tinkering
with my new system, bypassing the documentation and most
of the README files. (Documentation?! We don't need no
steenking documentation!)
Unfortunately, this means you'll probably miss a critical
step -- some important include files. Go read the README
in /usr/src, or wherever your sources ended up, and make
the appropriate links.
important utilities
Take a look in /usr/src/commands for several utilities you
will want to compile and install in /etc. Amongst these,
bpt and fsck will be particularly desireable. You'll also
want to recompile postmort and replace the version that's
already in /usr/bin as it has a bad path wired into it.
increase size of disk cache
Dave Rand suggested increasing the size of the disk cache
from 128 KB to 1 MB. Assuming your Minix kernel source
lives in /usr/src/minix like mine does, look in fs/const.h
for a line like
#define NR_BUFS 128
and change 128 to 1024. Make sure that you do this in the
else part of the conditional.
Rebuilding this kernel from scratch took about ten and a
half minutes, 10:29 to be precise. After booting this new
kernel (see next two sections) I cleaned the slate and built
the same kernel again. This time the time was 2:10! This
is a big win, folks!
building a kernel
Before typing make, you need to make a few chanes to the
Makefile in /usr/src/minix. First, unless you have an OMTI
controller like Bruce, you'll want to comment out the rule
for "all" and the next couple of lines. Add a new line that
says simply "all: dist" and life will be much easier.
Also, the four lines that tell make where to find various
tools (as, cc, ld, nm) have a comment saying to comment them
out on the pc532. Unfortunately make doesn't know about at
least one of them (probably nm but I've forgotten) so just
change the path on each one to /usr/bin.
installing your new kernel
If you followed the hints I offered above, it's easy. Just
follow these steps:
$ su
Password:
# cat image >/dev/hd1
# sync; bpt
... hardware reset
Command (? for help): read 0 2000 80
Command (? for help): run 2000
If something went awry, just go back and read the backup
kernel from block 100. (You did make one didn't you?)
setting the real-time clock
Bruce's instructions for setting the clock use his floppy
drive. If you don't have a floppy (like me), just use a
scratch partition on your hard disk. Assuming hd5 is
free for this use, do this after editing rtc.s:
$ as rtc.s
$ su
Password:
# cat image >/dev/hd5
# sync; bpt
... hardware reset
Command (? for help): read ec60 2000-30 2
Then continue with Bruce's directions.
tailoring boot options once and for all
If you have a clock chip and normally boot from hd3 as I
do, you'll want to change several lines in kernel/mpx32k.s:
_have_rtc:: double 1
ROOT_MINOR: .equ 3
tty driver drops NUL characters
The tty driver throws away incoming NULs even in raw mode,
which is hell on communications protocols like uucp. To
correct this, look in file kernel/tty.c near the top of the
in_char() routine. Find the line
if (ch == 0) return;
and delete it.
multiple tty lines
The distributed tty driver appears to have a bug that hangs
the system if both ports on the same DUART are active at the
same time. With 4 DUARTs available just use a different one.
You'll have to make some device files though since only the
first two ports are in the distributed system:
# su
Password:
# for i in 2 3 4 5 6 7; do
? mknod /dev/tty$i c 3 $i
? done
#
Set the protection and ownership of the new files to match
/dev/tty1.
increasing number of processes
With the disk cache increased it's almost reasonable to try
doing other work while make is running in the background.
But the stock kernel is only built for 16 processes, which
can quickly be used up. Edit h/const.h; change the define
for NR_PROCS as desired. (I set mine to 32.)
large partitions
I have one of the Miniscribe 9380S drives (after plunking
down a check for 50 of them you better believe I got one
for myself!) and of course wanted to use big partitions.
A 30,000 block partition worked fine, but 60,000 resulted
in a panic as soon as I tried to mount it. The "obvious"
solution was to increase ZMAP_SLOTS (in fs/const.h) but
this resulted in a kernel that wouldn't boot -- somewhere
near when I'd expect the disk mounts to be done it simply
did a breakpoint trap back to the ROM monitor.
Until somebody works on this, don't expect big partitions
to work.
startup and shutdown
There's some cleanup you should probably do on startup and
shutdown of the system. The shell archive at the end of
this message includes an /etc/shutdown and a new /etc/rc
script that do a few more desireable things. Note that rc
says "Invalid errno" when it clears /etc/wtmp but it still
works.
more include files
Several include files that one would expect to find with
GCC are missing. I've included two in the attached shell
archive that came from the 3B1 GCC but appear to be proper
for a pc532. We still need float.h.
floating point library routines
Neither printf() nor scanf() seem to work correctly. I'll
take a look at these as soon as I get the sources.
The libm.a library should have a fabs() routine but does
not. I wrote the obvious C routine but didn't like the
code generated by GCC so wrote it myself; this is in the
attached archive. Other routines probably are missing ...
uucp
I've gotten the uucp from the NLMUG working and added many
enhancements, though it still doesn't know how to dial out.
A fully functional version is waiting on some fixes to the
tty driver which Dave is working on.
If anybody wants what I have now let me know and I'll send
cdiffs for the affected files, or post them to the mailing
list if there's enough interest.
mail, smail2.5
I've also gotten both of these running. I'll include notes
with the uucp stuff.
Well, that's probably enough for one night. I hope this helps
a few of you out there. (Appended to this message is the shell
archive of files mentioned above.)
--
Karl Swartz |UUCP uunet!apple!zygot!ditka!kls
1-408/223-1308 |INet zygot!ditka!kls@apple.com
"I never let my schooling get in |BIX kswartz
the way of my education."(Twain) |Snail 1738 Deer Creek Ct., San Jose CA 95148
--- cut here ---
#!/bin/sh
#
# This is a shell archive. Feed it to /bin/sh to unpack these files:
#
# ./etc/rc
# ./etc/shutdown
# ./usr/include/stdarg.h
# ./usr/include/stddef.h
# ./usr/src/libm/fabs.s
#
echo "creating ./etc/rc"
sed -e 's/^@//' <<EOF >./etc/rc
@#!/bin/sh
@
@#
@# Disk management
@#
@#substitute your root device for "/dev/fd0" in the next line
@echo "/dev/hd3 is mounted on /" >/etc/mtab
@mount /dev/hd4 /u
@rm -f /tmp/*
@
@#
@# Set date, clear wtmp, and display boot message
@#
@#/bin/date -q </dev/tty
@cat /dev/null >/usr/adm/wtmp
@cat /etc/message
@
@#
@# Start daemons
@#
@/etc/update &
EOF
echo "creating ./etc/shutdown"
sed -e 's/^@//' <<EOF >./etc/shutdown
@#!/bin/sh
@
@PATH=/bin
@
@#
@# Dismount all filesystems.
@#
@cd /
@cat /etc/mtab \
@| while read dev x1 x2 x3 dir; do
@ case "$dir" in
@ /)
@ ;;
@ /*)
@ echo "/etc/umount $dev ($dir)"
@ #/etc/umount $dev
@ ;;
@ *)
@ echo "shutdown: bad mtab entry: $dev $x1 $x2 $x3 $dir"
@ ;;
@ esac
@done
@
@#
@# Flush remaining disk buffers and get out.
@#
@sync
@sync
@sync
@/etc/bpt
EOF
echo "creating ./usr/include/stdarg.h"
sed -e 's/^@//' <<EOF >./usr/include/stdarg.h
@#ifndef _STDARG_H
@#define _STDARG_H
@
@typedef char *va_list;
@
@/* Amount of space required in an argument list for an arg of type TYPE.
@ TYPE may alternatively be an expression whose type is used. */
@
@#define __va_rounded_size(TYPE) \
@ (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
@
@#ifndef __sparc__
@#define va_start(AP, LASTARG) \
@ (AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG)))
@#else
@#define va_start(AP, LASTARG) \
@ (__builtin_saveregs (), \
@ AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG)))
@#endif
@
@void va_end (va_list); /* Defined in gnulib */
@#define va_end(AP)
@
@#define va_arg(AP, TYPE) \
@ (AP += __va_rounded_size (TYPE), \
@ *((TYPE *) (AP - __va_rounded_size (TYPE))))
@
@#endif /* _STDARG_H */
EOF
echo "creating ./usr/include/stddef.h"
sed -e 's/^@//' <<EOF >./usr/include/stddef.h
@#ifndef _STDDEF_H
@#define _STDDEF_H
@
@/* Signed type of difference of two pointers. */
@
@typedef long ptrdiff_t;
@
@/* Unsigned type of `sizeof' something. */
@
@#ifndef _SIZE_T /* in case <sys/types.h> has defined it. */
@#define _SIZE_T
@typedef unsigned long size_t;
@#endif /* _SIZE_T */
@
@/* A null pointer constant. */
@
@#undef NULL /* in case <stdio.h> has defined it. */
@#define NULL ((void *)0)
@
@/* Offset of member MEMBER in a struct of type TYPE. */
@
@#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
@
@#endif /* _STDDEF_H */
EOF
echo "creating ./usr/src/libm/fabs.s"
sed -e 's/^@//' <<EOF >./usr/src/libm/fabs.s
@.text
@ .align 2
@.globl _fabs
@_fabs:
@ absl 4(sp),f0
@ ret 0
EOFevans@syd.dit.CSIRO.AU (Bruce.Evans) (09/10/90)
In article <9009100320.AA22237@ditka.UUCP> kls@ditka.UUCP (Karl Swartz) writes: > A 30,000 block partition worked fine, but 60,000 resulted > in a panic as soon as I tried to mount it. The "obvious" > solution was to increase ZMAP_SLOTS (in fs/const.h) but I fixed this for 1.5.10 (PC version). ZMAP_SLOTS and I_MAP_SLOTS are now 8. The counting of bufs_in_use was doubled up for mounting. mkfs, df and fsck had overflow bugs. The limit is now 65535 blocks. >floating point library routines > Neither printf() nor scanf() seem to work correctly. I'll > take a look at these as soon as I get the sources. Earl Chew wrote a good version of stdio. Portable, but with Minix as a principal target. We spent a long time attempting to make printf and scanf ANSI-compliant and fast. -- Bruce Evans evans@syd.dit.csiro.au
dlr@daver.bungi.com (Dave Rand) (09/10/90)
[In the message entitled "ten days with Minix" on Sep 10, 3:20, Karl Swartz writes:] > In the past ten days I've spent a lot of time working on and > with Minix, and I'm still as impressed as last time I wrote. Let me second this. George and I have been hacking on it this weekend (George got an LED driver working, I fixed up part of the TTY code and SCSI code). _Very_ nice. For those of you that are skeptics - please go out and buy a copy. It does work, quite well! With this in mind, and the number of people working on the code, I've decided to set up YAML (Yet Another Mailing List). This mailing list will be a source-code only distribution of patches, new code, and the like. George has pointed out that the MINIX distribution clearly states that the code may be transfered among non-commercial interested parties; I think we fall into that catagory. I still believe that everyone should purchase a copy of MINIX, though. This mailing list will not be gated to usenet. If you would like to join, please send your request to: pc532-src-request@daver.bungi.com -- Dave Rand {pyramid|mips|bct|vsi1}!daver!dlr Internet: dlr@daver.bungi.com
news@daver.bungi.com (09/11/90)
Good article, Karl. > In the past ten days I've spent a lot of time working on and > with Minix, and I'm still as impressed as last time I wrote. > But the road is far from smooth. Here is a condensation of > my notes which hopefully will help guide others along the path. > > disk partitions > I've kept the partitions as Bruce built them, using hd3 [ stuff deleted ] An additional suggestion: Layout your partitions without regard to the Version 1.3 32 Mbyte partition size limit. That is if you ultimately want say several 50 Mbyte partitions, create a 30000 block partition, followed by a 20000 block gap, etc. Hopefully, this will make the transformation to larger paritions with verion 1.5 easier. > multiple kernel images > You've got room for several kernels in the hd1 partition > so it's a nice idea to make a duplicate in case you screw > something up. Use the ROM monitor to do this: > > Command (? for help): read 0 2000 80 > Command (? for help): write 100 2000 80 > > To run one of the kernels enter > > Command (? for help): read X 2000 80 > Command (? for help): run 2000 > > where X is either 0 or 100 depending on where you want > the main or the backup kernel image. I consider this an absolute must at this point in time -- particularly if you are modifing OS code. The last thing you want is to find out our new image will not run and you have on good OS images on-line. The implication, of course, is to leave sufficent room at the beginning of the disk to hold two or more images each beginning at convient block number. > increase size of disk cache > Dave Rand suggested increasing the size of the disk cache > from 128 KB to 1 MB. Assuming your Minix kernel source > lives in /usr/src/minix like mine does, look in fs/const.h > for a line like > > #define NR_BUFS 128 > > and change 128 to 1024. Make sure that you do this in the > else part of the conditional. You might want to also increase NR_BUFS_HASH accordingly. I am not sure of what the best value is for NR_BUFS = 1024. I arbitrarly set mine to 1024. Bruce Evans, a PC-Minix wizard from oz, has NR_BUF = 320 and NR_HASH_BUF = 512 in his 32-bit 386 release. > multiple tty lines If you have a second terminal, you might want to direct printk to this terminal. It makes debugging or monitoring OS activity a lot cleaner. Best regards, johnc --
news@daver.bungi.com (09/14/90)
Dave: ... > go out and buy a copy. It does work, quite well! Now that 1.5 is released, all the more reason! You can make a PC using a (shudder) 286 CPU into a reasonable machine even (tho not as fast as a pc532) > With this in mind, and the number of people working on the code, I've > decided to set up YAML (Yet Another Mailing List). This mailing list > will be a source-code only distribution of patches, new code, and the like. You know there is comp.os.minix... > George has pointed out that the MINIX distribution clearly states that > the code may be transfered among non-commercial interested parties; I > think we fall into that catagory. I still believe that everyone should > purchase a copy of MINIX, though. > > This mailing list will not be gated to usenet. If you would like to > join, please send your request to: > > pc532-src-request@daver.bungi.com Again, I don't seem to be able to use addresses with '@'s in them. I would like to join, and I seem to be able to *reply*, but if I send mail I have to use uunet!snerdly!foobar!glortch format. Dunno why. Maybe after I get the pc532 up with Minix and uucp all my problems will be solved.