iSCSI rootで必要になったinitramfs。クロスコンパイルでも使えます。
基本的にはRPi iSCSI Initiatorの後半iSCSI rootに記述されている通りでいいですが修正点として以下です。
・initramfsの展開先は/bootでは無くmake環境へ展開
・imagetool-uncompressed.pyは不要
というかなんで/bootに展開してんの?って話でして、おかげで/bootパーティションに空きが少なくなりますよ。
1.カーネルソースと現在のconfigの取得(未取得の場合)
コンパイルするマシンで実行
$ sudo apt-get install git $ mkdir -p ~/raspberrypi $ cd ~/raspberrypi $ git clone https://github.com/raspberrypi/linux.git # git cloneは時間がかかります
configは稼働している実機から取得します。
$ zcat /proc/config.gz > ~/raspberrypi/linux/.config # クロスコンパイルの場合はこのconfigファイルを転送
2.initramfsイメージの作成
$ sudo apt-get install initramfs-tools $ cd /boot # initramfsイメージ作成 $ update-initramfs -c -k $(uname -r) $ ls /boot/initrd.img-$(uname -r) /boot/initrd.img-3.6.11+
3.イメージコピーをmakeする環境に展開します。
a) イメージを展開(Raspberry Pi上でカーネルをmakeする場合)
$ mkdir -p ~/raspberrypi/initramfs $ cd ~/raspberrypi/initramfs $ gunzip -c -9 /boot/initrd.img-$(uname -r) | cpio -i -d -H newc --no-absolute-filenames
b) イメージを展開(クロスコンパイル環境上でカーネルをmakeする場合)
予めRaspberry Piで作ったinitrd.imgをscp等でコピーしておきます。
$ mkdir -p ~/raspberrypi/initramfs $ cd ~/raspberrypi/ $ ls initrd.img* initrd.img-3.6.11+ # 転送してきたinitrd.img $ cd ~/raspberrypi/initramfs $ gunzip -c -9 ~/raspberrypi/initrd.img-* | cpio -i -d -H newc --no-absolute-filenames
4.カーネルにinitramfsの設定を行いmake
$ cd ~/raspberrypi/linux $ make menuconfig # メニューからたどり以下を設定する # General Setup # -> Initial RAM filesystem and RAM disk (initramfs/initrd) support (*) # -> Initramfs source file(s) (~/raspberrypi/initramfs) # -> Built-in initramfs compression mode (gzip)
a) Raspberry Pi実機でmakeする場合
$ cd ~/raspberrypi/linux $ make $ make firmware_install headers_install modules_install install
b) クロス環境でmakeする場合
前のエントリ参照のこと
5.config.txtの設定
/boot/config.txtに以下を記述します。initramfsには読み込むアドレスを指定できるのですが意味がわからないのでスルーです。
kernel=vmlinuz-3.6.11+ initramfs initrd.img-3.6.11+
rebootして起動するのを確認!
コメントを残す