オリジナルLinuxを自作

以前買った本に全く手を付けてなかったのでやってみる。

自分で作るLinux OS (日経BPパソコンベストムック)

自分で作るLinux OS (日経BPパソコンベストムック)

第1部(Busyboxを使うやつ)はつまらなそうだったので第2部をやってみることにしました。
付録DVDに収録されてるカーネルは2.4系と古かったので2.6系で作ることにしました。

いろいろと本の内容と変わった点があるのでメモをしておきます。

Tux Finderが落ちている

ソースコードの入手先などを調べられるTux Finderがどうやら落ちている。
手作業でいちいちコードを探すのは面倒なので

# apt-get source ..

で得たやつでほとんど代用しました。

util-linuxコンパイルができない

util-linuxに含まれるfdiskがコンパイルできなかったです。原因は_syscall5マクロがunistd.h内から無くなっているから。
代案は

  1. asm-486/unistd.hを使う
  2. syscallを代わりに使う

あたりでしょうか?
自分はsyscallを代わりに使う事で解決できました。

/* _syscall5 を使う箇所はifdefで囲む */
#ifdef _syscall5
static _syscall5(int, _llseek,unsigned int,.......)
#endif

/* _syscall5がない場合はsyscallを使って呼ぶ */
#ifdef _syscall5
    _llseek(.....);
#else
    syscall(__NR__llseek, ....);
#endif

それから細かいけれどもMCONFIGの書き方が本の内容では間違ってます。LOCALE_DIRを変更したのにLOCALEDIRが元のままになっています。

LOCALE_DIR= /usr/local/src/origdev/usr/share/locale

LOCALEDIR= $(DESTDIR)/share/locale <- こうしないと

initrdの作成

initrdの中身が大きく変わってるみたいです。

  1. 圧縮方法がzip + cpioに変わっている
  2. linuxrcというスクリプトがinitスクリプトに変わっている
  3. ディレクトリ構成ががらっと変わっている

旧バージョンのinitrdの中身

bin/ dev/ etc/ lib/ linuxrc loopfs/ proc/ sbin@ sys/ sysroot/

2.6でのinitrdの中身

bin/  conf/  etc/  init  lib/  modules/  sbin / scripts/

具体的にどういう変更がなされたのか調べる必要があるなぁ。

(もう遅い(早い)ので今日はここまで)