This is an old revision of the document!
This is a dump of a the minix.txt file I created, containing my notes/TODOs about MINIX. As you can see from the dates mentioned, I put all this down some time ago. That also helps explain why all this is in the form of a dump and not… something else. MINIX-the-project's structure and processes are just really lacking; there's not exactly a good home for any of these things that I can see.
(Originally formatted as a text file, so the wiki will render some things improperly. I haven't converted it to wikitext, because the doku syntax, like most wikitext dialects, is atrocious and totally unsuitable for reading as plain text.)
The MINIX MOTD says “We'd like your feedback”. I hope that offer is still good.
Source tree is confusing.
Need some sort of comment-embedded meta language a la javadoc for a machine-readable way to verify the kinds of claims that you can already find in the comments. E.g., in kernel/main.c, |shutdown| is really minix_shutdown, and in kernel/proc.c, |sys_call| doesn't even exist anymore…
commands/svrctl/svrctl.c says “PM handles calls for itself and the kernel” ('M', and 'S') and “VFS handles calls for itself and inet” ('F', and 'I'). However, minix/servers/pm/misc.c returns EINVAL if not 'M'. Why are these servers handling these other areas, anyway?
Images to play with. I should be able to write a simple “Let's implement malloc” tutorial and the reader can experience near-immediate setup.
What license is the wiki content under?
In the build video linked from the minixonarm page, he says it should take about 10 minutes. Enviable.
TODO: - Enable virtio in netconf. Kernel panic. Pop the disk an eSATA enclosure
and run qemu so that hda is pointing to the associated block device on the host OS, using hostfwd as appropriate to make networking available. Run netconf and select the suggested device. Forget to disable it before poweroff in the emulator. Pop the disk out of the enclosure and into machine so it can run on bare metal. Boot it. Kernel panic. Pop the disk back into the enclosure so you can rerun netconf in the emulator to disable the selected device.
- Document how to deploy a newly built Minix 3 with your changes. - There's a hello world driver (or server?). Document what's going on there,
by which I mean to say, do a better job than just saying "here's the source". Explain the "framework" that's in use there.
- Need an outline of what's involved with the Minix live CD: what's on it, how
it differs from a disk install, and what installation does.
- In depth description of booting. Give MBR and partition table examples.
Reader should be able to follow along and verify. This means giving exact descriptions of commands. Include exercises. E.g., "Suppose the disk were instead X-size instead of the Y-size disk from the previous example. If the difference in space were allocated entirely to the /usr/ partition, how would the partition table differ from the one in the example?"
- Originally tried installing over a FAT32 filesystem that had contained Live
at the Beacon before deleting it. A functional MBR wasn't created. Try to get STR and file a bug.
- Virtual console scrollback: there isn't any. - Virtual console alternate screen: there isn't any? - To a bare metal install with no networking, and try to use pkgin. - Why am I having to reboot in order to enable networking?
$ su # cd /usr/src/ # make build
- /usr/src doesn't exist by default - building as root?
# cd /usr/src # make build
- Why is this repeated here on this page? It should link to another page. - building as root?
Bare Metal Install
I boot from CD with menu item 1. I use login "root" and run "setup".
1 I press enter at the colon. 2 I choose keyboard layout “dvorak”. 3 I press enter for automatic mode. 3.1 I press enter to choose disk . 3.2 I type “delete” to delete the existing Minix install.
I type "0" to delete region 0. I type "yes" I press enter to select the free space on disk .
3.3 I type “yes” 4 (Automatically skipped.)* 5 I type 50000 to make a 50GB /home partition.
I hit enter to confirm 50000 GB.
6 I hit enter for 4 KiB blocks.* 7? I wait for files to be copied to disk.* 8 I press enter to go with no networking. 9 I press enter to go with DHCP*
I type "poweroff" now that setup has finished. (I went through setup once and did this, and the screen blanked, but the computer never shut down. I had to hold down the power button. I decided to redo install to see if I could reproduce it. I recorded the exact steps of that attempt, which are above; that's actually my second run this morning. NB: It's 2014 December 23, and I've already been through the install process approaching around a dozen times now both on bare metal and in emulators over the last month or so. I hope this is an indicator of my commitment. See my comments about "On Volunteerism" below.)
I press down arrow and the countdown stops. The boot options are a little confusing. They are:
1. Start MINIX 3 2. Start latest MINIX 3 3. Start latest MINIX 3 in single user mode 4. Edit menu option 5. Drop to boot prompt 6. Start MINIX 3 (3.3.0)
I can appreciate the differences between option 1 and 3, and even 1 and 2, although that one is a bit superfluous on a bare install. I am left wondering, though, what's with option 6. How does it differ from option 1 or option 2?
It seems there should only be four options at this point: 1, 3, 4, and 5.
If I choose option 4 try to compare 1 and 6, the way to exit from edit mode for one boot menu item in order to go back and view the boot parameter for the other choice seems to be to delete the entire line and hit enter. (It would be nice if hitting escape worked). Hitting enter otherwise will boot with be those parameters. It's not even clear that's what's going to happen. This is edit mode. One might think that pressing enter here would accept the current value and put you back at the menu so that you could select the item you may have just changed, or choose something else. (NB: I'm not saying that's what should happen or that the current behavior is not okay. I'm only saying it should be clear what's going to happen, even if that's only in the form of documentation and not necessarily on-screen text. PS: If this seems like a stupid bikeshed quibble, realize that I don't really give much of a shit about this. This is basically stream-of-consciousness here, and I understand that of all the things that could be worked on, this is way down on the list. The inexplicable difference between the six different boot options is a real problem, though.)
A Word on Volunteerism - As I said above, I hope this is an indicator of my commitment. - AST mentions “the thing about volunteers is…”
It's the least interesting part and yet the biggest barrier.
BUG: When curl isn't installed fetch.sh ftp can drop to the interactive ftp prompt on some systems where ftp doesn't support HTTP. (E.g., netkit-ftp on Ubuntu.)
BUG: Building on arch fails with texinfo.
BUG: Cross compile by building targets “tools”, then “distribution”. releasetools/x86_hdimage.sh complains that minix isn't built. It's because the wiki suggests using ../build, but the script expects ../obj.i386
BUG: releasetools/x86_hdimage.sh mentions “/root” partition. It should say “/ (root)”.
BUG: Building on Minix fails.
I clone the repo into /usr/src.
I run “make build && date”
I go out while the build runs, and when I come back the build has errored out. Since the console has no scrollback, all I can see now is “make: stopped in /usr/src/gnu”. (I've run whoami, followed by pwd, followed by ls by the time I'm writing this comment, so even more has scrolled off the screen than was there when I first came back. I think it was two lines in make and make, both in /usr/src/gnu/dist.) I google to see if the NetBSD build system produces a log file, but it doesn't look like it.
This is probably due to fetch.sh as above, BUT THIS ISN'T MENTIONED ANYWHERE.
I shouldn't have to compile as root. To install a newly built image? Sure. But not to compile.
MINIX AS A DRIVER DEVELOPMENT PLATFORM