jslinux向けに最新カーネル3.8.5をビルド(つづき)
こちらの記事のつづきです。
ビルド
以下のファイルを生成して、「~/jslinux/」以下のものと差し替えます。
- linuxstart.bin
- vmlinux-3.8.5.bin
ビルドの手順は、大まかに以下の通りです。
- 「.config」の生成
- 「linuxstart-20120111」に付属の「Makefile」を修正
- 修正したMakefileで、「linuxstart.bin」と「vmlinux-38.bin」を生成
「.config」の生成
「linuxstart-20120111」に付属の「config_linux-2.6.20」を元に、
「make oldconfig」で「linux-3.8.5」用の「.config」を生成します。
コマンドライン上では以下の様に操作します。
$ cd ~/make_jskernel/linux-3.8.5/ $ make mrproper $ cp ../linuxstart-20120111/config_linux-2.6.20 .config $ make oldconfig
「make oldconfig」の実行後は、全てデフォルトの設定を選択するために、
Enterキーを押しっぱなしにしてください。
(そして、「make oldconfig」自体の実行が終了して、次のプロンプトが現れたら、キーを離します。)
また、「make mrproper」は、設定ファイルも含めてカーネルビルド時の中間ファイルを削除するコマンドです。
「linuxstart-20120111」に付属の「Makefile」を修正
以下の様に修正してください。
LD=ld -m elf_i386 CC=gcc -m32 CFLAGS= -O2 -Wall -fno-builtin -fno-stack-protector #-march=i386 HOST_CFLAGS=-O2 -Wall # modify to set the kernel path ===== ここから ===== KERNEL_PATH=../linux-3.8.5 ===== ここまでの様に修正 ===== all: linuxstart.bin linuxstart.out: linuxstart_head.o linuxstart.o libc.o $(LD) -o $@ -N -Ttext 0x00010000 $^ linuxstart.bin: linuxstart.out objcopy -O binary $< $@ %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< %.o: %.S $(CC) -m32 -D__ASSEMBLY__ -c -o $@ $< # target to generate kernel kernel: make -C $(KERNEL_PATH) -j4 ===== ここから ===== objcopy -O binary $(KERNEL_PATH)/vmlinux vmlinux38.bin ===== ここまでの様に修正 ===== clean: rm -f linuxstart.bin linuxstart.out *.o *~
生成したファイルで元ファイルを置換
先ほど生成した
- linuxstart.bin
- vmlinux38.bin
で「~/jslinux/」以下のファイルを置換します。
「linuxstart.bin」は、そのまま置換すれば良いですが、
「vmlinux38.bin」は、「vmlinux-2.6.20.bin」を置換するには、ファイル名の整合性が合わなくなるので、
「jslinux.js」を一部修正して、「vmlinux-3.8.5.bin」を読み込むようにし、
「vmlinux38.bin」を「vmlinux-3.8.5.bin」へリネームします。
コマンドライン上での操作は以下の様になります。
- 「linuxstart.bin」
$ cd ~/jslinux/
$ mv linuxstart.bin linuxstart_old.bin
$ cp ~/make_jskernel/linuxstart-20120111/linuxstart.bin .
- 「vmlinux-3.8.5.bin」
「~/jslinux/jslinux.js」の82行目辺りにある
pc.load_binary("vmlinux-2.6.20.bin", 0x00100000, start2);
を、以下の様に修正してください。
pc.load_binary("vmlinux-3.8.5.bin", 0x00100000, start2);
そして、以下の操作で適用します。
$ cp ~/make_jskernel/linuxstart-20120111/vmlinux38.bin ~/jslinux/vmlinux-3.8.5.bin
【追記】2013/04/07 22:34
カーネルバージョン「3.8.6」でも動作確認できました。
また、作業時に気付いたことがありましたので追記しておきます。
ローカル環境にウェブサーバを立てて作業している場合(今回、例として説明している場合)に関してで、
以下の2つに注意してください。
- 「jslinux.js」で「vmlinux-*.bin」の変更時にはブラウザのキャッシュクリアが必要
- バックスペースキーが効かない
2つ目に関しては、私の環境のみかも知れませんが、
ターミナル画面上でバックスペースキーが効きません。
(借りているVPS上で確認すると、バックスペースキーも正しく動作していました。)