Yoctoプロジェクトが提供するツール群を使うと比較的簡単にブートローダーやカーネル、rootfsをビルドすることが出来ます。しかし、当然ですが作り出したイメージは基板に焼き込まなければなりません。これはYoctoプロジェクトの守備範囲ではなく、各基板の制作者あるいはチップベンダーの守備範囲となります。
以下ではSAMA5D3 Xplained(以下SAX。流石に面倒)に書き込む手順を説明します。
リカバリ手順
なにはともあれ、失敗したときに元に戻るための手順を書いておきます。実際には元に戻すのではなく、ネットで提供されているイメージを書き込んで動作可能状態にする方法です。
まず最初にホスト側の整備です。以下のコマンドをコピーして、shellに貼り付けて実行してください。
sudo gpasswd -a `whoami` dialout
“はBashの記法で、くるまれた部分のコマンドを実行して、標準出力で置き換えます。ようするに、whoamiコマンドの実行結果がここに来ます。わかりにくいならば、自分のアカウント名を指定してください。
sudo gpasswd –a account_name dialout
これによってビルド用のLinuxアカウントがdialoutグループに追加され、USBモデム接続されたSAXの制御を可能にします。rootで実行してもいいですが、この方法は後々躓くので最初からグループを変更したほうが合理的です。
設定したら一度ログアウトして再度ログインします。
次にFlashライターをダウンロードします。AtmelはAT91マイコン用にFlashライターとしてSAM-BAというプログラムを提供しています。ダウンロードはリンク先から可能です。面倒ですが登録が必要です。bitbakeを使えばビルド出来るようなのですが、リカバリ用としてはダウンロードした方がいいでしょう。
展開したら展開位置への実行パスを貼ってください。私は~/yoctoの下にそのまま展開したので以下のコマンドを実行しました。
export set PATH=$PATH:/home/`whoami`/yocto/sam-ba_cdc_linux/
最後にデモ用の実行イメージをダウンロードします。ダウンロードはLinux & Open Source related information for AT91 Smart ARM Microcontrollersから行いました。このページの、linux4sam-poky-sama5d3_xplained-4.7.zipをダウンロードしました。新しいものがあるのなら、そちらでもいいでしょう。
zipを展開したら展開先のディレクトリにシェルで移動してください。これでソフトウェアのほうはFlashへの準備完了です。
書き込み前にボードの準備も行います。まず、ボードをガジェットUSBポートを通してPCに接続します。これは普段端末を使うときと同じです。電源が入りますので、JP-6(下の図の赤丸)のジャンパーを抜いてください。
ここでリセットボタンを押すと、ボードがNAND Flashではなく、SoC内部のブートROMから起動してFlashライターと通信可能になります。特にタイミングは無いのですが、一呼吸置いてからJP-6にジャンパーをさしてください。これでSAXは書き込み準備完了となりました。
用意が出来たら以下のコマンドをシェルから実行します。
./demo_linux_nandflash.sh
正しく設定していれば、ブートローダー、u-Boot、u-Boot環境変数、デバイスツリー、カーネル、rootfsが書き込まれます。書き込みが終わったらリセットボタンを押してください。Linuxが起動し、LEDが点滅を始めます。
bitbakeで作ったプログラムを書き込む
リカバリ手順を把握したら、自分でビルドしたプログラムを焼きましょう。
ビルド結果は poky/build-atmel/tmp/deploy/image/sama5d3-xplained/ にあると仮定します。また、ターゲットはcore-base-minimalであると仮定します。
最初に重要な事を書いておきます。検索していると出てくるAtmelの公式トレーニング資料を読むと、いかにもSAXのFlash焼きをSAM-BAのGUI画面から出来そうに思えますが、それは幻想です。忘れてください。
GUI画面からFlashを焼くのは二つの意味でハードルが高いです。
- 離散的なアドレスにブートローダー、u-boot、u-boot環境変数、カーネル、DTB、rootfsを手作業で正確に焼き込まなければならない。
- bitbakeはu-boot環境変数を作ってくれないので、自分で作る必要がある。
以下に作業手順を書きます。なお、bitbake atmel-demo-image は完了しているものとします。
まずpoky/meta-atmel/scriptsにある、以下の二つのスクリプトをpoky/build-atmel/tmp/deploy/image/sama5d3-xplained/にコピーします。
- flasher.sh
- nandflash.tcl
この二つがFlashライターです。あとは、リカバリ手順で説明したとおり、
- SAM-BAが置いてあるディレクトリを実行パスに追加する
- JP-6からジャンパを抜いてSAXをUSBケーブルでPCに接続する
- JP-6にジャンパを挿す
と進みます。最後に以下のコマンドを実行すると書き込みが始まります。
./flashser.sh atmel-demo-image /dev/ttyACM0 sama5d3_xplained
正しく終了すると、リセット後にLEDが点滅を始めます。
追記
コア・イメージをcore-image-minimal からatmel-demo-imageに変更しました。
また、シェルスクリプトにあったバグの修正方法を削除しました。当該バグはmeta-atmelのmasterブランチに存在していますが、fidoブランチには存在していないからです。Yoctoによるビルドもfidoベースに書き直しています。
bitbakeを使ってsam-baを作りたいときには、 bitbake sam-ba-native を実行してください。