eMMC Boot、SD Boot、Serial Boot、USB Bootが存在する。
https://github.com/beagleboard/beaglebone-black/wiki/System-Reference-Manual#535_Boot_Modes
eMMC Boot デフォルトのブート。eMMCに書かれているOSをブートする
- SD Boot SDカードからのブート。加えてeMMCに書かれているOSの書き換えができる
- Serial Boot SerialからFWをダウンロードしてブートする
- USB Boot USBからブートする
beagleboard.org ではSeiral BootとUSB Bootは対応していない。
ブートの切り替え
bootボタンを押していなかったらeMMCで起動
bootボタンを押して起動すると、SD Boot -> Serial Boot -> USB Bootの順で起動を試みる
Resetボタンによるリセットの起動だとbootボタンの確認をしないため、Power off/Onの起動でブートを切り替える必要がある
Bootコンフィグレーション
評価ボードなどのブートの順番はROMブート -> SLP(Secondary program loader)ブート -> uBootの順となる。SLPがデバイスを初期化してU-bootに制御を渡す.
https://github.com/beagleboard/beaglebone-black/wiki/System-Reference-Manual#67_Boot_Configuration
ROMブートがbootボタンを読みとりどこからブートするかを決定する.そして,xloader(SLP)をSOC上のSRAMに展開して実行する.
https://www.slideshare.net/sysplay/beaglebone-black-booting-process-78730088
xloaderはペリフェラルとクロックの設定をしてUBootをボード上のSDRAMに展開して実行する
uBootはデバイスツリーを読み取りカーネルをSDRAMに展開してbootする.
ブート
ubootの構築
linaroを使用するBBBはAM3358(Cortex-A8 32bit)のためarm-eabiを使用する.
linaroのgccを使用する.
yay -S arm-none-eabi-gcc74-linaro
configs以下に対応しているボードのコンフィグレーションが記載されている.今回は~am335xevmdefconfig~を使用する.
CROSS_COMPILE=arm-none-eabi-
HOSTCC=gcc-7.4
export CROSS_COMPILE
make am335x_evm_defconfig
make
SDカードへの書き込み
primaryパーティションをブータブルで作成してFAT32にてフォーマットする.
u-bootでビルドした~MLO~と~u-boot.bin~を書き込む.先に~MLO~を書き込む必要がある.
UART
シリアルはUART0に115200 8N1で出力されるので3.3V Serial-USB端子をJ1端子に接続する.
microSDカードをBBBに挿入して,bootボタンを押しながら起動する.
Serialにu-bootのログが表示されるので~Hit any key to stop autoboot~が出力されたら何かのキーを押下してu-bootのshellに入る.
ネットワークブート
ホストPC側でdnsmasqなどでDHCPとtftpを立てる.
u-bootのシェルで~dhcp~コマンドを実行するとネットワークブートが始まる.デフォルトでは~zImage~を0x82000000にロードする.