Linuxカーネルデバッグ その7(SDカード作成)
SDブート用のSD用カードを作成する。SDカードのベースは、BeagleBoneBlackの公式サイトのlatest-image(https://beagleboard.org/latest-images)で配布されているeMMC flasherを用いる。ただし、このイメージは2Gbyteにパーティションが切られているので、通常用途では使いづらい。そのため、イメージの内容を一度HDDへコピーして、パーティションを切り直して使用する。
eMMC Flasherイメージの作成
公式サイトからイメージファイルをダウンロードする。2018/08/10時点での最新ファイルはBBB-eMMC-flasher-debian-7.5-2014-05-14-2gb.img.xzだった。
ダウンロード後、SDカードへ書き込む。ここで、/dev/sdbがSDカードである。
xzcat BBB-eMMC-flasher-debian-7.5-2014-05-14-2gb.img.xz | sudo dd of=/dev/sdb
このままでは、SDカードを刺した時点でeMMCの更新スクリプトが走ってしまう*1ので、無効化する。SDカード内のFATパーティションの/boot/uboot/flash-eMMC.txtをリネームする。
cd /media/ubuntu/BEAGLE_BONE/
HDDへの一時退避
作成したSDカードの内容をHDDへ一時退避する。適当なディレクトリを作成し、そこへコピーする。
mkdir sdcard
cd sdcard
mkdir BOOT
mkdir rootfs
cd BOOT
sudo rsync -avxHAX /media/ubuntu/BEAGLE_BONE/ .
cd ..
cd rootfs
パーティション分割&フォーマット&ファイルのコピー
あらためてSDカードのパーティションを分割する。16GbyteのSDカードをfdiskで以下のように分割した。
/dev/sdb1 256MB BOOT
/dev/sdb2 14.6G rootfs
それぞれ、フォーマットする。
sudo mkfs.vfat /dev/sdb1 -n BOOT
sudo mkfs.ext4 -L rootfs /dev/sdb2
HDDへ一時退避していたファイルをSDカードへコピーする。BOOTパーティションについては、必要なもののみコピーする。
cd sdcard/BOOT
sudo cp MLO /media/ubuntu/BOOT/
sudo cp -r dtbs/ /media/ubuntu/BOOT/
sudo cp SOC.sh /media/ubuntu/BOOT/
sudo cp initrd.img /media/ubuntu/BOOT/
sudo cp u-boot.img /media/ubuntu/BOOT/
sudo cp uEnv.txt /media/ubuntu/BOOT/
sudo cp zImage /media/ubuntu/BOOT/cd ../rootfs
カーネルの更新
事前にビルドしていたカーネルイメージをコピーする。
cd kernel_src/kernel/kernel/arch/arm/boot
sudo cp zImage /media/ubuntu/BOOT/
sudo cp dts/am335x-boneblack.dtb /media/ubuntu/BOOT/dtbs/
cd kernel_src/kernel/kernel
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/media/ubuntu/rootfs modules_install
作成したSDカードでブートし、uname -aでビルド時間が更新されていることを確認する。
今回作成したバージョンは3.8.13-00770-ged37066だった。
initrd.imgの更新
以降の作業は新たに作成したSDカードでブートしたdebian上で行う。
cd /boot/uboot
sudo update-initramfs -c -k 3.8.13-00770-ged37066
sudo mv initrd.img initrd.img.old
sudo mv ../initrd.img-3.8.13-00770-ged37066 initrd.img
再起動し、起動時に、
modprobe: chdir(3.8.13-00770-ged37066): No such file or directory
modprobe: chdir(3.8.13-00770-ged37066): No such file or directory
modprobe: chdir(3.8.13-00770-ged37066): No such file or directory
のメッセージが表示されないことを確認する。
参考URL
BeagleBone Blackのkernelの再構築を試みる – JUNK-BOX