土日は出勤だったため、集中して勉強することが出来なかった...
xv6を勉強していきたくて、ひととおりテキストは読み込んだものの、実際のコードはどこから手を付けていいのか分からない。 まずは、xv6の動作の仕組みを分かるところから探っていこう。
make qemu-noxをすると何が起こるのか
make qemu-noxをすると、自動的にxv6が立ち上がって、QEMU上でエミュレートが走りだす。
$ make qemu-nox dd if=/dev/zero of=xv6.img count=10000 10000+0 records in 10000+0 records out 5120000 bytes (5.1 MB) copied, 0.0159053 s, 322 MB/s dd if=bootblock of=xv6.img conv=notrunc 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.00308072 s, 166 kB/s dd if=kernel of=xv6.img seek=1 conv=notrunc 331+1 records in 331+1 records out 169508 bytes (170 kB) copied, 0.00104549 s, 162 MB/s qemu-system-i386 -nographic -hdb fs.img xv6.img -smp 2 -m 512 xv6... cpu1: starting cpu0: starting sb: size 1000 nblocks 941 ninodes 200 nlog 30 logstart 2 inodestart 32 bmap start 58 init: starting sh
まずはディスクイメージを作成している。
./mkfs fs.img README _cat _echo _forktest _grep _init _kill _ln _ls _mkdir _rm _sh _stressfs _usertests _wc _zombie nmeta 59 (boot, super, log blocks 30 inode blocks 26, bitmap blocks 1) blocks 941 total 1000 balloc: first 570 blocks have been allocated balloc: write bitmap block at sector 58 dd if=/dev/zero of=xv6.img count=10000 10000+0 records in 10000+0 records out 5120000 bytes (5.1 MB) copied, 0.0114842 s, 446 MB/s dd if=bootblock of=xv6.img conv=notrunc 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.000372747 s, 1.4 MB/s dd if=kernel of=xv6.img seek=1 conv=notrunc 331+1 records in 331+1 records out 169508 bytes (170 kB) copied, 0.000937154 s, 181 MB/s
mkfs.c が鍵になっているようだが、これは何を生成するものだろうか。
qemu-system-i386 -nographic -hdb fs.img xv6.img -smp 2 -m 512