faith's blog

気まぐれ日記

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に作成したものとして説明します。

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を書き換える必要がなくなりました。