linux-0.01 読み
生越さんが 1999/04/19 に書かれた Linux になろう! -- 君にも書ける OS kernel を見つつソース確認な方向。スデに global でタグも作成済み。
そりゃ良いのですが
上記エントリが 99/4 に、という事はわしはスデに Linux 弄り始めているはず。その頃って Debian 2.0 だったのかなぁ。あるいは 0.01 なリリースが 91/9 って事で、わしはその頃 IBM PC/AT で仕事してました。CPU は 386 とか 486 とかだったはずなので、環境としてはスデに 32bits だったのか。
なんかダブルバッファ使って画面更新なツールが作れないものか、とかヤッておりました。その頃のセンパイは unix 使って云々ってヤッておられましたが、わしは Unix の存在自体を未だ知らなかったス。
閑話休題
確かにエントリポイントって init/main.c だけど、カーネルを load するソレが必要なんだよね。
$ ls -l vmware/root/linux-0.01-rm-3.5/boot/ total 48 -rwxr-xr-x 1 root root 484 2011-01-16 23:37 boot -rw-r--r-- 1 root root 954 2011-01-16 23:37 boot.o -rw-r--r-- 1 1004 1004 7851 2008-01-14 05:58 boot.s -rw-r--r-- 1 root root 21648 2011-01-16 23:21 head.o -rw-r--r-- 1 1004 1004 4683 2008-01-14 05:58 head.s $
上記の boot がナニされるのかな。qemuctl なソレでも
Booting from Floppy...
ってカーネルバッファに出力されておりますな。そーか Image 自体がフロッピーの先頭に書かれてる、が前提なのか。
とりあえず Makefile 見てみたらそのまんま杉で笑いました。このあたり?
all: Image Image: boot/boot tools/system tools/build objcopy -O binary -R .note -R .comment tools/system tools/system.bin tools/build boot/boot tools/system.bin > Image # sync tools/build: tools/build.c $(CC) $(CFLAGS) \ -o tools/build tools/build.c #chmem +65000 tools/build boot/head.o: boot/head.s tools/system: boot/head.o init/main.o \ $(ARCHIVES) $(LIBS) $(LD) $(LDFLAGS) boot/head.o init/main.o \ $(ARCHIVES) \ $(LIBS) \ -o tools/system > System.map
objcopy で何してるのか、がイマイチ理解できてなかったりします。
- -O binary な記述
- raw バイナリファイルを生成することもできるとの事。
- -R なオプション
- .note とか .comment なセクションが削除される模様
これって
よくよく考えたら、ひらメソドに最適な材料ではないのか、って事に思い至っていたりしてます。誰か一緒にヤりませんか?