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/

mv flash-eMMC.txt flash-eMMC.txt.org

 

 

HDDへの一時退避

作成したSDカードの内容をHDDへ一時退避する。適当なディレクトリを作成し、そこへコピーする。

mkdir sdcard

cd sdcard

mkdir BOOT

mkdir rootfs

cd BOOT

sudo rsync -avxHAX /media/ubuntu/BEAGLE_BONE/ .

cd ..

cd rootfs

sudo rsync -avxHAX /media/ubuntu/eMMC-Flasher/ .

 

 

パーティション分割&フォーマット&ファイルのコピー

 あらためて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

sudo rsync -avxHAX . /media/ubuntu/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

 

*1:起動時に、/etc/rcX.d/K01bootscript.sh→/opt/scripts/boot/am335x_evm.sh→/opt/scripts/tools/beaglebone-black-eMMC-flasher.shとして実行されるが、/boot/uboot/flash-eMMC.txtがある場合にのみeMMC更新を行う