組込みLinux Beaglebone Black でやってみる その1 microSDで起動

まずはブートmicroSDを作ってLinuxを立ち上げてみる。以下、Beaglebone Black Rev.CをBBBとしています。

注文 Rev. C

Rev. Aなどはブート切替ボタンもないのでSD起動できません。 ここの内容はRev.Cのみ対応です。

RSコンポーネントが安くて、在庫数も1万個以上で、4営業日となっていたので、10月20日注文。 当日に注文情報がメールされてきたので、以下情報を保存。 トラブル時に必要です。 私はRSコンポーネントにユーザーしなかったので下の情報は特に必要です。 RSの画面には未表示でしたがSeeed製でした。

  • RSお客様番号
  • お問い合わせ番号
  • ご注文番号

10月25日 8時時点RSのWebでは未出荷->しかし実はシステムトラブルで、既に佐川急便のセンターに届いていました。 25日の昼前に届きました。 DigiKeyや秋月電子でもいいのかなと思います。

その他必要なもの

  1. Windows PCかLinux PCかMac。私の場合は組込Linux用に用意したuBuntuなので、以下もuBuntu。 Windows PCの場合、仮想化してuBuntuを入れて置かないとビルドができない。 WSLではビルドができない。
  2. USBキーボード(BBBの初期Debianは英語なので、私はEnglishタイプを使っています)  (Raspberry Pi4B用に買ったのを使っています。)
  3. Mini-B USB – USB TYPE Aケーブルは付属しています(BBBとPC:電源供給、通信)
  4. microHDMI – HDMIケーブル  (Raspberry Pi4B用に買ったのを使っています。)
  5. microSDHCカード(BBBはSDXCは対応していません)
  6. USB-TTL UARTコンバータと接続ケーブル (私は、DSD TECH SH-U09C5 を買いました)
  7. 電源5V、2A、5.5mm/2.1mm、極性は外がGND、内がVCC。 私はiPad用の電源に、USB-電源プラグケーブルを買いました。 USBでの電源供給は0.5Aまで。 BBBにいろいろ接続して電源供給が足りなくなると、USBでは動作しなくなります。

初めてBBB起動して確認

買ったBBBが正常に動作するか確認です。 以下の様に接続。 私の場合はuBuntuのPCですが、BBBの確認だけならWindowsでもできるはずです。 BBBは出荷時にボード上のeMMCにブートやDebianが格納されているので、まずそれが正常に起動するかどうかを確認します。

  • 電源を投入すると、ディスプレイにlogin usernameとpasswordを聞かれるので、私の場合は『root』『root』と入れました。
  • するとDebianにログインできました。 BBBのeMMCにDebianがちゃんと入っている事とBBBが動作する事が確認できました。
  • また、uBuntu PCのファイルエクスプローラでみるとBeagleboneがディスクとして認識されていて、ディレクトリやファイルを見る事が出来ます。
  • これで受取ったBBBが正常に動作していそうな事が分かりました。(全てを見たわけでないのでまだ完全とは言えないと思いますが。)
  • ホストPC(uBuntu)のファイルを見ると、Beagleboneがディスクの一つとして認識されています。
  • START.htmlを開けると、BBBのドキュメントが出てきます。
  • BBBのEthernetは接続されていませんが、USB経由でBBBのWebserverはアクセスでき、ホストPCのブラウザから192.168.7.2をURLとして入力すると、Cloud9の画面が開きます。 そして『Ctrl~E』を押して少し待つと、オンライン統合開発環境のCloud9が開きます。(*Cloud9はawsに買収されたので、新規登録はaws上でしか出来ません)

sampleプログラムなど入っているので、実際実行したり、参考にしたりできます。

初期 Debian Linux log-in username, password

私のBeaglebone Black Rev CはDebian Busterが入っていました。

  • username 『root』
  • password 『root』でした。 下のリンクにはno passwordとなっていましたが…
  • https://www.beagleboard.org/projects/yocto-on-beaglebone-black
  • その他色んな意見もあります。『temppwd』『admin』『password』など。もし『root』、『root』でログイン出来なかった時は、上記の組み合わせを試してみるといいかもしれません。

BBBのeMMCに入っているDebianが立ち上がり、BBBが正常ということが分ったので、次はmicroSDから異なるLinuxで立ち上げてみます。 

ちょっと困った(おまけ)

RPi4Bと違いBBBにはType Aのポートが1個しかないので、安くて小さいUSBハブを買いました。 しかし、microHDMIとType A USBの距離が近くて使えませんでした。 でもこのUSBハブはuBUntuにした古いPCにはUSBポートが2個しかないので重宝しています。(ケガの功名? あくまで前向き? 負け惜しみ?)このハブにこれから出てくるminicom用のUSB-UARTコンバータとBBBへの電源供給用USBを挿しています。

しかしBBBのチェック用としてBBBに接続したモニタには文字(CLI)コンソールしか表示されないので、キーボードだけでOKでした。なのでUSBは1個で事足りました。

BBB電源シャットダウン方法

今後microSDカードでブートする事が数多くあり、電源入り切を頻繁にするので、S3ボタンでの電源ON・OFF方法を説明します。

  • RJ45コネクタのすぐ横のS3(POWER)ボタンを5~6秒ほど長押しで電源OFFできます。
  • 電源ON時は、S3をカチッとさわれば起動します。
  • 勿論、コンソール上でsudo shutdown -h nowでも電源を落とせます。その後、S3で起動できます。
  • USBケーブル、電源プラグを抜いてOFFしたりでも出来ますが、動作の退避が出来ていない場合、microSDのファイル等壊してしまう可能性もあります。 パソコンの強制電源OFFと同じですね。

minicom準備 UART接続

minicomターミナルソフトでブートのメッセージをモニターします。 うまく起動しなかった時のエラーメッセージなどデバッグにはかかせません。 UART経由でのminicomを設定します。 BBBのUARTとuBuntu PCのUSBを接続する為、USB-UARTコンバータが必要です。

私はUSB-TTL UARTコンバータはこれを買いました。 将来のFPGA評価用に1.8Vや2.5Vがあるのは良いと思います。 またPIC等の5V時も役に立つかも。

DSD TECH SH-U09C5 USB to TTL UARTコンバーター FTDIチップサポート付き 5V 3.3V 2.5V 1.8V TTLサポート

6芯のケーブルが付属していました。 一方はフラットコネクタ形状で、BBBに取り付けやすそう。 もう一方はバラ線の挿入端子が付いているので、このコンバータのピンに挿していきます。

配線

(注意)上記のUSB-TTL UARTコンバータに付属のケーブルでの色で示しているので、別のケーブルの場合は、色を置き替えてください。 また同じコンバータを購入されてもケーブルやピン配が同じ都は限らないので、確認してください。接続するのは、3.3Vモードで3線だけです。

  • GND ⇔ GND
  • RXD ⇐ TXD
  • TXD ⇒ RXD

配線はBeaglebone Blackの電源のOFFを確認して実施しなければなりません。

minicom

UART経由での通信をモニターするためのuBuntu用のターミナルです。 Teratermの・ようなもの。 以下でインストール。

$ sudo apt install minicom

installしたら、USB-UARTコンバータをUSBハブに差し込んで、BBBの電源を入れて、dmesgを実行する。 BBBは組み込まれているDebianがゆっくり立ち上がっていると思います。

$ dmesg
$ dmesg | grep tty      //表示が多くて見つけにくい時はこれを使う

usb 2-1.5 ハブの2がUARTになっていてttyUSB0に装着されていると表示されています。 便利ですね。 自動検出ですね。 minicomにこのttyUSB0を使います。

  • usb 2-1.2: Product: USB KEYBOARD
  • usb 2-1.5: Product: USB2.0 HUB
  • usb 2-1.5.1: Product: USB Optical Mouse
  • usb 2-1.5.2: Product: FT232R USB UART
    • usb 2-1.5.2: FTDI USB Serial Device converter now attached to ttyUSB0(私の古いPC)
    • usb 1-13.2: FTDI USB Serial Device converter now attached to ttyUSB0(私の新しいPC)
  • usb 2-1.5.4: Product: BeagleBoneBlack

minicom設定

  • *minicomはuBuntuにインストールしたので、プロンプトがbeagleboneの時はminicon not foundになる。 私は最初minicomインストールしたのにnot foundになるので何でだろうと思っていましたが、よく考えるとminicomでBBBにログインしたプロンプトで操作してたからでした。 uBuntu LinuxでBeaglebone LinuxのBash Shellを操作していると間違えますね。
  • -sオプションで、minicomに入ってすぐ設定画面が出てくる。(minicom内ではCtrl+A〜Oでも設定できる)
$ sudo minicom -s
  • 設定画面に入るので、
  • 『A』を押して、私の場合はUSB-TTL UARコンバータがattachされた『ttyUSB0』とし『ENTER』
  • 上記の配線でもFlow Control用のCTS, RTSは配線していないので、『F』『G』を押して両方『No』にして『ENTER』で戻る。

メニューに戻ったら、『Save setup as dfl』を選択して『ENTER』。これで次回minicom起動時にこの設定が使われる。

『Configuration saved』と表示されたら『Exit』を選択すると、minicomに入る。

そこで『ENTER』を押すと、login usernameとpasswordを聞いてくる。私の場合は、『root』『root』でした。 下の図では、最初のpasswordに何も入れずに『ENTER』を押したらincorrectでした。 これでUART経由でログインしてBBBのBash shellが動いています。

ip a とすると、usb0とusb1にそれぞれ192.168.7.2 と192.168.6.2 のIPアドレスが表示されます。 BBBのUSBでのIPアドレスですね。 これでminicomの準備完了です。 では次にmicroSDから異なるLinuxでブートしてみます。

minicom tips

  • minicom Crtl+Aでメニューが表示。
  • minicom 終了は Ctrl+A ~ X ~ Yes
  • minicom 設定  Ctrl+A〜O
  • serial portの設定後、次回からの立ち上げは『$ sudo minocom』だけでOK。
  • $ sudo minicom --color=on  で起動すると色付きになる。 vi編集でも便利。 デフォルトはoff。 .bashrcのPS1部分を以下の様に編集して、プロンプトも色付きにする。  ~$ source ./.bashrc で有効化。
export PS1=' \[\e[32m\]\h\[\e[0m\]: \[\e[34m\] \w\[\e[0m\] \$ '

ブートシーケンス(簡略版)

microSDでの立ち上げの参考として簡単なブートシーケンス書いておきます。 その2で更に詳しく説明します。

  1. 電源投入
  2. RBL(ROM Boot Loader)が実行されます。 RBLがMLOをMPU内部RAMにコピーして実行します。 RBLにはSoCのBOOT_PINのパターンでブートするデバイスが決まっています。(SoCのマニュアルに記載)
  3. MLOがU-BOOTをDDRにコピーして実行します。
  4. U-BOOTがDDR上で実行されます。
  5. U-BOOTがLinux KernelとでバスツリーをDDRにコピーして実行し、Kernelに実行権を渡す。
  6. Kernelがルートファイルシステムを起動してLinux Distributionが立ち上がります。

microSDカード パーティション作成

BBBはeMMCからブートするのですが、microSDカードでブートするため、microSDにブート用パーティションと、ルートファイルシステム用パーティションを作ります。 BBBはSDHCの32GBまでしか対応していないので、32GBを超える64GBや128GBでは動作しません。

SD形状のアダプタを使いmicroSDカードをuBuntu PCに挿入して、Terminalで『dmesg』するとmmcblk1と出てきました。 uBuntu PCでは/dev/mmcblk1がSDカードデバイスです。 因みに、BBBの回路はmmc0がmicroSDソケットに接続されているので、/dev/mmcbkl0がBBBでのmicroSDカードとなります。

GPartedインストール

*mkfsコマンドでもできるようですが、この方が簡単でした。

SDカードパーティション作成用にuBuntu SoftwareからGpartedを検索してインストール。 インストールするにはuBuntuのログインパスワードが必要です。

パーティション作成

  • uBuntu Desktop画面左下のアプリケーションを開き、Gpartedを起動。
  • (重要)起動したら、まずSDカードが選ばれているか容量やデバイス名を必ず確認する。 間違えると、PCの中身をすべて消してします。
  • /media/ichiri/58… 上で右クリックし、ポップアップメニューから『アンマウント』を選択。 このmicroSDカードはFAT32なので全てWindows用になっています。 これではLinuxをブートできないし、Linuxのルートファイルシステムも動作しませんね。
  • アンマウントが終わったら、再度 /media/ichiri/58…上で右クリックし、『削除』を選択。
  • 『削除』したら『未割り当て』となるので『未割り当て』上で右クリックして『新規』を選択。
  • 『新規パーティションの作成』画面が開くので
  • 新しいサイズを約『1000MiB』
  • ファイルシステムを『fat16』
  • ラベルは何でもいいのですがわかりやすいように『BOOT』として『追加』。 このシリーズ中は全てこの/BOOT/で呼んで行きます。
  • 新規パーティション#1が fat6、1.00GiBで作成されました。
  • 下に操作保留履歴が表示されます。 これが表示されている間は本当には実行されていないので、もし表示されていたら、右クリックして『実行』を押すと、処理が完了して表示が消えます。
  • 未割り当て上で右クリックして『新規』を選択
  • 前方の空き領域は『0』として残りの領域を全て『ext3』ファイルシステムとする。
  • ラベルはわかりやすい名前にする。ここでは『ROOTFS』としました。

  • 保留中の操作を『実行』して、0件となったら、
  • /dev/mmcblk1p1 fat16上で右クリックして『フラグの編集』を選択
  • 『boot』にチェックを入れて『閉じる』

フラグに『boot』と表示されるのを確認したら、Gpartedを閉じる

Filesエクスプローラで見ると、先程作った『BOOT』と『BOOTFS』パーティションが左のメニューに現れています。

必要ファイルの取り込み

MLO(Memory Loader) 2ndブートローダ

  • MLOはU-BOOTの一部を取り出している。 U-BOOTは大きいので、U-BOOT本体を呼び出す前処理用。 MLOとSPLはブートするメディアによって使い分けます。 SDだけのブートの場合はMLO。 SD〜UARTでのブートの時はSPLを使う。
  • MLO=SPL+Image Header)
  • Image Headerには以下の2つだけ入っている
    • load_address(u-boot.imgをロードするDDRの先頭アドレス)
    • size (u-boot.imgのサイズ)

デモのため、以下のリンクに入る

GitHub - niekiran/EmbeddedLinuxBBB
Contribute to niekiran/EmbeddedLinuxBBB development by creating an account on GitHub.

上記のリンクで、『pre-built-images』を選択。『Angstrom_Demo』、『MLO-beaglebone-2013.04』を選択して『Donwload』でダウンロードして私の場合は以下のようになるように変更。~/BBB_Workspace/EmbeddedLinuxBBB

~/BBB_Workspaceの下にダウンロードしたメインディレクトリEmbeddedLinuxBBB以下全て入ました。

MLOを/BOOT/へコピー

  • microSDカードの『BOOT』パーティションに先程ダウンロードしたMLOファイルをコピーしなければならないのですが、GUIでのコピー、貼り付けはユーザー権限しかないので『BOOT』に貼り付けれません。
  • そこでコマンドラインからMLOファイルがあるディレクトリに移動して、microSDの/BOOT/にコピーします。
  • MLOのあるディレクトリは、私の場合は、~/BBB_Workspace/EmbeddedLinuxBBB/pre-built-images/SD-bootです。
  • microSDカードの/BOOT/は、私の場合、/media/ichiri/BOOT/になっています。
  • コピーして貼り付けるファイル名は『MLO』だけです。 ROM内の1st ブートローダ RBLが認識できるファイル名は拡張子なしの『MLO』です。
  • microSDとホストPCのホームディレクトリでは権限が異なるので、ファイルエクスプローラではコピー出来なかったので、コマンドプロンプトでコピーした。
$ cd ~/BBB_Workspace/EmbeddedLinuxBBB/pre-built-images/SD-boot
$ cp MLO* /media/ichiri/BOOT/MLO
  • microSDカードの『/BOOT/』の中に『MLO』が作成できました。
  • この状態でmicroSDカードを取り出す前に、microSDカードをアンマウントする。(BOOTの右の上矢印をクリックする。 或いは、右クリックし『eject』。)
  • BBBの電源をOFFにする。BBBの『POWER (S3)』ボタンを長押ししてPower Downモードに入る。 電源LEDがOFFになる。
  • microSDカードを挿入する。
  • UART-USBケーブルで接続してminicomの準備をする(これはこのページの上の方を参照ください。)
  • BBBの S2(BOOT SEL)ボタンを押したままの状態で、S3(POWER)を押して離す。 これでBBBのMPUはeMMCでなくmicroSDカードからの起動します。
  • するとminicomの上部にU-BOOT SPLと表示されるがMLOはU-BOOTで作った一部を切り出して、若干の情報(サイズなど)追加しているのでSPLと表示される。 MLOやSPLはどのメディアからブートするかによって使い分けます。 (両方いれていてもOK)
  • 最後に#ERROR#と出ているがu-boot.imgをまだ入れていないので『error reading image u-boot.img』と表示される。 しかし、これはこの状態でMLOは正常に読みされ動作している事がわかります。 また、MLOは次にu-boot.imgを探しているのが分かります。
  • この様に、minicomでエラーを確認することが出来、エラーが出た時は内容を確認してデバッグしていきます。
  • 次のU-BOOTイメージファイルは、上記エラーで表示されたように、小文字のu-boot.imgでなければ認識されません。

U-BOOT image (u-boot.img)

  • 次に、u-boot.imgを入れます。
  • u-boot.imgが各種U-BOOTのコマンドに対応しているバイナリファイル(実行形式)。 Linuxが立ち上がる前に、Ethernet(tftp)やUART転送のXmodemなどはU-BOOTがサポートしている。 その為。Linuxブート用に必要なファイルをLinuxが立ち上がる前に、tftpやXmodemなどで取得出来る。 U-BOOTはいろいろな形でLinuxを立ち上げる為の機能が搭載されている。
  • 再度micorSDカードをuBuntu PCに挿して、ダウンロードしてU-BOOTイメージファイルをmicroSDカードのBOOTパーティションにコピーする。
  • u-boot.imgもMLOと同じディレクトリにある。(今後、U-BOOTもビルドした時に、独自のu-boot.img、MLO、SPLが生成される。)
  • ファイル名は『u-boot.img』でないと認識されない。
$ cd ~/BBB_Workspace/EmbeddedLinuxBBB/pre-built-images/SD-boot
$ cp u-boot* /media/ichiri/BOOT/u-boot.img

U-BOOTイメージができました。

  • この状態で先ほどと同じ順番でBBBをmicroSDから起動すると、
  • 今度はreading u-boot.imgと表示されFile not found /boot/uImage でとまります。 これはLinux Kernelイメージ(uImage)がない為です。 これでMLO、u-boot.imgが正常動作して、次のKernelを取り込もうとしているのが分かります。 

Linux image (Linux kernel image:uImage)

  • U-BOOTを使って立ち上げるので、zImageでなくuImageがLinux Kernelのファイル名になります。
  • MLO、u-boot.img同様に、既にビルドされたuImageをmicroSDの/BOOT/にコピーする。
  • ファイル名は『uImage』でなければならない。『I』だけ大文字。
$ cd ~/BBB_Workspace/EmbeddedLinuxBBB/pre-built-images/SD-boot
$ cp uImage /media/ichiri/BOOT/

Device Tree

  • Device Treeには各種デバイスの情報(メーカ名、品番、アドレス、接続方式その他)が含まれています。
  • .dtbは、Device Tree Blobの略で、バイナリ化されたデバイスツリーで、Flattened Device Tree(FDT)とも呼ばれます。 バイナリ化される前のソースファイルの拡張子は、親ファイルが.dts。 インクルードされる子や孫ファイルが.dtsiとなっています。
  • am335x-boneblack.dtbは、BBBの回路情報が入ったDevice Tree Blobファイルです。(今後、.dtbを単にデバイスツリーと呼びます)
  • .dtbはKernelをビルドすると生成されます。 今回は既に生成されたものを使います。
  • Device TreeもmicroSDの/BOOT/に入れます。
  • MLO、u-boot.img、uImageと一緒に、~/BBB_Workspace/EmbeddedLinuxBBB/pre-built-images/SD-boot に入っています。
  • Linux Kernel Image(uImage)は、このDevice Treeを見て各種ドライバを設定するので、この.dtbもmicroSDの/BOOT/に入れておきます。
$ cd ~/BBB_Workspace/EmbeddedLinuxBBB/pre-built-images/SD-boot$
$ cp am335x-boneblack.dtb /media/ichiri/BOOT/

uEnv.txt

  • U-BOOTの環境設定ファイル。(*注意:今回はU-BOOT-2017で実行しているので、uEnv.txtは使えます。 しかしU-BOOT-2021以降はboot.scrを使わなければなりません。)
  • 今回用のuEnv.txtは既にダウンロードしているので、
  • 以下の用にしてSDカードの/BOOT/にコピー。
$ cd ~/BBB_Workspace/EmbeddedLinuxBBB/pre-built-images/Angstrom_Demo
$ cp uEnv.txt /media/ichiri/BOOT/

uEnv.txtの中身は、こんな感じ。 UARTの設定、IPの設定はなど。

console=ttyO0,115200n8
ipaddr=192.168.27.2
serverip=192.168.27.1
loadaddr=0x82000000
fdtaddr=0x88000000
loadfromsd=load mmc 0:1 ${loadaddr} /boot/uImage;load mmc 0:1 ${fdtaddr} /boot/am335x-boneblack.dtb
linuxbootargs=setenv bootargs 'console=${console} root=/dev/mmcblk0p2 rw' 
uenvcmd=setenv autoload no; run loadfromsd; run linuxbootargs; bootm ${loadaddr} - ${fdtaddr}

ROOT FILE SYSTEM

  • Linux Kernelだけでは、Bash Shellやls、cd、cpなどのコマンド群がない為、Linux Distributionとして動作しません。 このROOT FILE SYSTEMにそれらの機能が搭載されています。
  • 下記のリンクから『Angstrom-systemd-image-eglibc-ipk-v2012.12-beagleboard.rootfs.tar.xz』をダウンロード。
EmbeddedLinuxBBB/pre-built-images/Angstrom_Demo at master · niekiran/EmbeddedLinuxBBB
Contribute to niekiran/EmbeddedLinuxBBB development by creating an account on GitHub.

Downloadしたら、~/BBB_Workspace/Downloads/に移動しました。 移動後、右クリックで解凍(Extract here)する。

解凍したディレクトリ(~/BBB_Workspace/Downloads/Angstrom-systemd-image-eglibc-ipk-v2012.12-beagleboard.rootfs)の中を見ると以下のようにファイルシステムが入っている。

/ROOTFS/にコピー

  • コマンドプロンプトから~/BBB_Workspace/Downloads/Angstrom-systemd-image-eglibc-ipk-v2012.12-beagleboard.rootfsに移動して、これらのディレクトリごとファイルを全てSDカードの/ROOTFS/パーティションにコピーする。
  • /ROOTFS/パーティションは、私の場合、/media/ichiri/ROOTFS/に自動的にマウントされていました。
  • マウントされていない場合は、sudo mount /dev/mmcblk1p2 /media/ichiri/ROOTFS/ などで予めマウントする必要があります。
$ cd ~/BBB_Workspace/Downloads/Angstrom-systemd-image-eglibc-ipk-v2012.12-beagleboard.rootfs
$ sudo cp -r * /media/ichiri/ROOTFS/

microSDへの書き込みが速くないのと、5000ファイル、50MB弱なので若干時間がかかります。

microSDで起動

SDカードをuBuntuPC からアンマウント

  • コマンドプロンプトからumountする場合は、/BOOT/も/ROOTFS/も両方umountする。
  • ファイルエクスプローラーからは、/BOOT/の横の上矢印をクリックするか、/BOOT/上で右クリックして『eject』を選ぶと、/BOOT/も/ROOFS/もunmoutされた。
$ umount /media/ichiri/BOOT
$ umount /media/ichiri/ROOTFS
$ sudo minicom  //この後sudoパスワード入力
//minicomが立ち上がったら、BBBのログイン『root』『root』 *私の場合です。
# shutdown -h now

電源ケーブルを抜いてSDカードをBBBに挿入。

電源投入

  • S2ボタン(BOOT SEL)を押しながら電源投入。 
  • S2ボタンを押しながら電源ケーブルを差し込むのが難しい場合は、一旦起動完了させて、minicom画面にloginのメッセージがでたら、S3(POWER)を長押しして電源を切り、S2(BOOT_SEL)を押しながら、S3(POWER)を押して再起動。
  • 下のように出てきたらAngstrom で立ち上がりました。

BBBのブートシーケンス

microSD(MMC0)から起動。

BBBのRevCの回路図から(DNI:Do not insert)読み取ると、SYSBOOT[15:0]=0100_0000_0011_1100でSYSBOOT[4:0]=11100 S2(BOOT_SEL)はSYSBOOT2に接続されていて、S2が押されるとSYSBOOT2=0となるので、SYSBOOT[4:0]=11000となる。 これらのBOOT SequenceはTIのAM335x Technical reference manualのSYSBOOT Configuration Pinsから以下のようになる。 BBBではSoCのMMC1端子にはeMMCが接続されていて、SoCのMMC0端子にはmicroSDが接続されている。 なので、S2が押されていない時は、最初にeMMCから起動を試みる。 S2が押されている時は、SPI0から起動を試みるが、SPI0にはEEPROMなど接続されていない為、次のMMC0のmicroSDからのブートとなるのですね。

S2(BOOT_SEL)押さずに電源投入した時

MMC1(eMMC)からMLOを探しに行く。 BBB購入時にはeMMCにMLOがあるので、eMMCのuEnv.txtを読み込み、eMMCのに入っているLinuxが立ち上がる。

S2が押されない時

S2(BOOT_SEL)を押しながら電源投入した時

まずSPI0に接続されたEEPROMないのMLOを探しに行く。 しかしBBBはSPI0には何も接続されていないので、MMC0(microSD)にMLOを探しに行く。

S2が押された時

その他

BBBのデバイス名

  • mmcblk1 — eMMC
  • mmcblk0 — microSD、mmcblk1p1はmicroSDのパーティション1。つまり/BOOT/。
  • ttyO0 — UART

SDパーティションに入るファイル

/BOOT/ 約1GB、fatファイルシステム、bootフラグ

  • MLO
  • u-boot.img
  • uEnv.txt

以下の2つは、RAM(DDR)に入れるので、tftp転送からで直接DDRに入れる場合は、/BOOT/に入れておかなくても良い。 microSDやeMMC単体での起動の場合は、/BOOT/に入れておく。

  • uImage
  • .dtb

/ROOTFS/ 残りGB、ext3ファイルシステム

  • Distributionで必要なファイルシステムの全てのディレクトリとファイル。

BBBバージョン

root@beaglebone:~# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

JTAG

BBBでは、JTAGを使用できますが、ピンが実装されていないので別途実装する必要があります。

シャットダウン

BBBの電源を落とす前に強制シャットダウンする方法

# shutdown -hp now    //即時シャットダウン。 -hは、シャットダウン後システム停止。 -p電源を切る。
# reboot -F          //強制リブート fsckを行う。 -fだとfsckしない。
//root ユーザーでなければ
$ sudo shutdown -hp now
$ sudo reboot -F

参考

AM335x Technical Reference Manual

5118ページもある。SYSBOOT Configuration Pins SYSBOOTピンによるブートシーケンスの順番が書かれている。

https://www.ti.com/lit/ug/spruh73q/spruh73q.pdf

コメント