Jetson TK1でu-bootを使用する
おはようございます、faithです。
今日はJetson TK1でu-bootを使用する方法についてご紹介します。
L4T R19.3からu-bootが公式でサポートされるようになったようです。
ドキュメント類を見ても、具体的なコマンドとか書いてないんですが(見落としてなければ)、 基本は、fastboot(nVidiaのプロプライエタリブートローダ)と同じです。
fastbootを使う場合との差分を中心に説明します。
今回は、SDにkernel, dtb, rootfsを置きます。 (eMMCにrootfsを置くことも可能なんでしょうが、 書き換え制限があるので、eMMCはなるべく書き換えたくないので。SDは壊れたら買い直せばいいし)
SDをパーティション切って、フォーマット
以下の2パーティション構成にします。
# | fs | 用途 |
---|---|---|
1 | vfat | kernel, dtbを置く |
2 | ext3 | rootfsを置く |
容量は任意です。 私の場合は、vfatに256MB、ext3に残りを割り当てています。
rootfsを作成し、ファイルをSDにコピー
作成方法については、QuickStartGuideを参照。
以降、~/Linux_for_Tegra/rootfsに作成したものとして説明します。
- vfatパーティションへのコピー
zImageとdtbをコピーします。
$ sudo mount /dev/sdX1 ~/mnt $ sudo cp ~/Linux_for_Tegra/kernel/zImage ~/mnt $ sudo cp ~//Linux_for_Tegra/kernel/dtb/tegra124-pm375.dtb ~/mnt/tegra124-jetson-tk1.dtb $ sudo umount ~/mnt
rootfsをコピーします。
$ sudo mount /dev/sdX2 ~/mnt $ sudo cp -a ~/Linux_for_Tegra/rootfs/* ~/mnt $ sudo umount ~/mnt
boot.scrをvfatパーティションに作成
vfatパーティションにboot.scrを置いておくと、 起動時に自動で読み込んで任意のコマンド列を実行させられます。
この仕組みを利用して、 自動的にzImage, dtbをロードし、カーネルをkickするようにします。
boot.txtを作成
以下の内容でtext fileを作成します。
load mmc 1:1 ${kernel_addr_r} zImage load mmc 1:1 ${fdt_addr_r} tegra124-jetson-tk1.dtb setenv bootargs console=ttyS0,115200n8 debug_uartport=lsport,3 console=tty1 rw rootwait root=/dev/mmcblk1p2 bootz ${kernel_addr_r} - ${fdt_addr_r}
root=/dev/mmcblk1p2の部分が、SDの2nd partitionにrootfsを置いている、 ということをカーネルに伝える記述になります。
ちなみに、この部分を/dev/sda1に書き換えると、 USBメモリの1stパーティションにrootfsを置くことも可能です。 (SATA HDDでも可な筈だけど、確認はしてません)
boot.scrを作成
mkimageコマンドを使って、boot.txtからboot.scrを作成します。
$ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "jetson-tk1" -d boot.txt boot.scr
出来上がった、boot.scrをvfatパーティションにコピーします。
boot.txtはコピーする必要ありません。 (私は面倒なので、SDカード上で作業しています)
u-bootの書き込み
ボードを起動し、Force recoveryボタンを押して、recovery modeに入ります。 (詳細は、QuickStartGuide参照)
その後、host pc上でflash.shを実行しますが、fastbootを書き込む場合とパラメータが異なります。
以下を実行します。
$ cd ~/Linux_for_Tegra $ sudo ./flash.sh -L ~/Linux_for_Tegra/bootloader/ardbeg/u-boot.bin jetson-tk1 mmcblk1p2
実行後、自動で再起動がかかり、u-bootからUbuntuが起動します。
SDカードを書き換えるだけで、 kernel, rootfsを自由に差し替えることができ、 eMMCを書き換える必要がなくなりました。