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.

Bugzilla, or…?

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?

SYSTEMATIC

Docs

http://wiki.minix3.org/doku.php?id=developersguide:rebuildingsystem

$ su
# cd /usr/src/
# make build

- /usr/src doesn't exist by default - building as root?

http://wiki.minix3.org/doku.php?id=developersguide:trackingcurrent#recompiling_the_system

# 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

Installation process

  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 [0]. 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 [0].

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.)

“First” boot

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…”

ON BUILDING

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[3]: 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[4] and make[5], 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.

ACCOUNTS

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