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 なセクションが削除される模様

これって

よくよく考えたら、ひらメソドに最適な材料ではないのか、って事に思い至っていたりしてます。誰か一緒にヤりませんか?