物置整理でBeagle Bone Green(BBG)を蔵出ししました。発表から7年の「古酒」ですが、好きなワンボードコンピュータです(処理は遅いけどRaspberry Pi3よりも好きでした)。
以下、2024年時点でのまぎれの少ない設定情報をメモっておこうとと思います。
基本方針
・x-windowやHDMI/Monitor は使わずLAN内の常時稼働のサーバホストとして利用します。
・eMMCブートはパスしminiSD cardからのブートとします。外部ストレージやrootfsはSDcardブートが確認されてから、次の段階で設定します。
・標準USBポートはあまり電流を流せないので外部からの供給を第一に考えます。BBGはBBBのようにAC端子がついていないので、結構肝となります。
OSのeMMCインストール
手元のBBGのeMMCに入っているDebianは旧いので最新のイメージを入れます。今回使ったminiSDカードは32GBですが4GBで十分です。
手順
・beagleboard.orgから最新のdebian download。xを使わないのでAM335x 11.7 2023-09-02 4GB eMMC IoT Flasherとしました。
・miniSD書き込みはddでもいいのですが balenaEtcher がおすすめです。処理も早いです。
・miniSDを挿入しS2ボタン(p8拡張ソケットの45・46番近傍にあるタクトSW)を押しながら、USBケーブルで通電します。D2からD4までのLED(Etherコネクタ近傍)が全部光ったらSWを離します。これでminiSDからブートします。
・ログインはUSB経由、ethernet経由の2方法でできます。
・USB経由:
/dev以下のUSBデバイスを指定してターミナルログインします。該当デバイス名はls /dev/cu.*とすれば、それらしい(?)ものが見つかるはずです。WINDOWSの場合もこの機会にWSL2下でUSB I/O設定をして/devでのアクセスに慣れることをおすすめします。
※MacのiTerm2でのjerm起動ログイン例
jerm /dev/cu.usbmodem1234BBBK56785
***略***
Debian GNU/Linux 11 BeagleBone ttyGS0
BeagleBoard.org Debian Bullseye IoT Image 2023-09-02
Support: https://bbb.io/debian
default username:password is [debian:temppwd]
BeagleBone login:
・ether,TCP/IP経由でLANのDHCP割り当てが機能しているなら、割り当てIPあてに ssh debian@IPアドレスで接続できます。
・ログイン後、sudo などで /boot/uEnv.txtの次の部分のコメントを外します。
#cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh
・次回miniSDブートするとminiSDからeMMCにイメージが書き込まれます。一旦OSを終わらせUSB電源オフー>上と同様にS2を押しながら再通電します。
・miniSDブートするとD2からD4のLEDが点滅しはじめ、D2からD4が全部消えると書き込み終了です。
・再度電源オフー>再通電するとeMCCから新debianが起動するのでログインしてください。
なおこの動作手順については、seeed社の日本法人の中の人が記事を書いていますので、参考にしてください。
eMMCブート環境下でminiSD自動ブートの設定をする
ログイン後、やることは2つあります。
・その1:miniSDカード側の/boot/uEnv.txtの先ほどコメントを外した
cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh
にコメントを付けて元に戻します。
これを忘れるとminiSDブート時に常にeMMCへの書き込みが行われるので注意です。と太文字で書いているのは私自身忘れていて嵌まったからです。
デバイスはマウントされていませんので、mount コマンドでmountして編集します(su あるいはsudoでの作業)。
mkdir /tmp/sd
mount /dev/mmcblk1p1 /tmp/sd <ーー環境によってデバイス名が違うことがあります。
cd /tmp/sd/boot
vim uEnv.txt で編集・保存
上の作業が面倒ならdebianイメージを書き込んだminiSDを2枚つくっておいてuEnv.txtを編集していない方を使うのもいいと思います。
・その2:S2ボタンを押さず電源を入れるだけでminiSDブートする設定を行います。
起動中のeMMCのuEnv.txtを書き換えます。
cd /boot
sudo vi uEnv.txt(場合によってはchmod 666してから)
以下次の部分のコメントを外して保存
#disable_uboot_overlay_emmc=1
OSを終わらせ電源オフー>電源再投入します。
miniSDカードブートによる起動・ログイン
miniSDからのブートが成功しているかどうかログイン後dfコマンドなどでたしかめてください。
/dev/mmcblk0p1 30695088 2458640 26937760 9% *32GBのSDからの起動確認
以上で基本設定は終わりました。あとはapt update;apt upgrade でカーネルや各種ファイルを最新のものにアップデートします。
debian@BeagleBone:~$ uname -a
Linux BeagleBone 5.10.168-ti-r76 #1bullseye SMP PREEMPT Fri Jan 19 22:21:25 UTC 2024 armv7l GNU/Linux
debian@BeagleBone:~$ cat /etc/debian_version
11.9
USB端子を使わない電源の確保
BBGの電源はUSB端子のみです。ACアダプタ端子のあるBBBとは違います。USBのみだと不足ですので外部から5Vを入力出来るようにします。BBGの回路図はここにあります。 今時のワンボードでしたらUSB PD対応のものになっていると思われるのでUSBで十分かもしれませんが、この子はレガシーに近いボードですので工夫が必要となります。
BBGにはTIのPMIC TPS65217 が搭載されていて、USB、ACアダプタ、バッテリーからの供給を想定した3つの電源端子をもっています。拡張コネクタP9側5・6番がACアダプタ入力(回路図呼称:VDD_5V)にあたります。最大3Aまでの出力に対応していますがUSBポートの電流制限があるので不要なトラブルを避けるためにACアダプタからの電源供給用端子をつけます。
結線のさいお隣の7・8番端子と間違えない様にしましょう。同端子はTPS65217の電源出力端子と繋がっています。回路図呼称はSYS_5Vで、TPS65217のSYS呼称の同じ番号の7,8番に繋がっています。つまりはcapeなどで付加デバイスにBBGから電源を供給することを想定しています。ただcapeへの電源供給をSYS_5Vで行うには上述の様に不安なので、同端子はなるべく使わない様にしたいと思っています。
なお、以前githubで作成されていたseeed社のWIKIの説明は違っているので注意が必要です。
BBG can be powered only by micro USB connector as there is no 5V DC Jack socket in BBG. Hence, VDD_5V which is powered by DC Jack socket in BBB is not available in BBG. SYS_5V is available. There is provision in BBG to short VDD_5V and SYS_5V by using a 0 Ohm resistor. Refer schematic for the same.
この説明だと外部電源が欲しい場合は、外部からの電源入力端子(VDD_5V)とTSP65217の出力(SYS_5V)をショートしろと言うニュアンスです(をいをい)。回路図では、SYS_5Vではなく、USBからの電源入力とVDD_5Vを0オーム(R168表記)でショートすることが可能、というにすぎません。DNP( Do Not Populate)となっているのでボードにはその抵抗は装着されていません。
というわけで外部からの5Vは、単純にP9の5と6ピン=VDD_5V拡張ピンに繋ぎます。
あまり電流が流れるのもあれ(?)なので1.1A定格のポリスイッチを間に挟めました(約2A程度でとりあえずダウンするように)。
外部ストレージをrootfsにする(参考)
rootfsを外部ストレージでまかなうのはどうすればいいか。実運用上はここまでやる必要は感じてませんが、一応試してみました。
手元に240GBのSSDがありましたのでUSBポートに繋いで設定しました。
2個のACアダプタを準備します。
一つはBBGへのP9の1・2ピン(GND),5・6ピン(VDD_5V)用。
今ひとつはBBGのUSB端子に接続するセルフパワー式のUSBハブ用です。
そのままLANで常時稼働出来るように、あらかじめダイソーの樹脂ラックをつかった2段重ねの置き場所作りをしました。手抜きですがコネクタの接触が緩んだり外れないようにケーブルを取り回すことには気を配っているつもりです。
動作に異常がないのを確認したら次の手順でSSD側にrootfsを設定します(su あるいはsudoでの作業)。
・SSDデバイスを確認します。ここでは/dev/sda1とします。
・fsck /dev/sda1
・dコマンドで全パーティション削除
・nコマンドでprimay パーティション作成(83 Linux選択)
・ddでminiSDのrootfsをSDDに書き込む dd if=/dev/mmcblk0p1 of=/dev/sda1 bs=32M conv=noerror,sync
・終わったらmkdir /tmp/test;mount /dev/sda1 /tmp/test して、/tmp/testがうまくrootfsの構成になっているかどうかをチェック。
・一旦umount /tmp/testして、e2fsck -f /dev/sda1 でファイルチェックしてから resize2fs /dev/sda1でパーティション全領域利用可能とする。あとは再度/tmp/testにsda1をマウントして利用領域が目途通りになっているかどうかをdfコマンドなどでチェック。
次にminiSD内のブート時のrootfsデバイスを変更します。
・cd /boot
・cp uEnv.txt uEnv.txt.orig;vim uEnv.txt でuEnv.txt編集。
###Master Enable
enable_uboot_overlays=1
となっていることを確認したうえで、
訂正前:
cmdline=coherent_pool=1M net.ifnames=0 lpj=1990656 rng_core.default_quality=100 quiet
に次のワードを加える。
root=/dev/sda1 ro
訂正後:
cmdline=coherent_pool=1M net.ifnames=0 lpj=1990656 rng_core.default_quality=100 quiet root=/dev/sda1 ro
最後にSSD側のfstabのマウント指定を書き換えます。
cd /tmp/test/etc
cp fstab fstab.org;vim fstab
#/dev/mmcblk0p1 / ext4 noatime,errors=remount-ro 0 1
/dev/sda1 / ext4 noatime,errors=remount-ro 0 1
haltして、電源を全部切って、電源の再投入します。ログインして次の様に/dev/sda1がルートとしてマウントされていればOK
df -h
udev 218520 0 218520 0% /dev
tmpfs 49508 1384 48124 3% /run
/dev/sda1 230773756 2774832 218365020 2% / <−−ここ
tmpfs 247532 0 247532 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 49504 0 49504 0% /run/user/1001
念のためブート時のcmdlineでuEnv.txtのcmdlineがoverlayされているかどうかを確認。
cat /proc/cmdline
console=ttyS0,115200n8 bone_capemgr.uboot_capemgr_enabled=1 root=/dev/mmcblk0p1 ro rootfstype=ext4 rootwait coherent_pool=1M net.ifnames=0 lpj=1990656 rng_core.default_quality=100 quiet root=/dev/sda1 ro
なお初期設定のroot=/dev/mmcblk0p1記述自体を無くすにはカーネル設定を追いかけなければいけなさそうなので、わたしはできません(キッパリ)。
実運用ではminiSDカードをrootfsにして、SSDを/home用にしてシンボリックリンクをはると思います。
補足:SeeedGroveコネクタのシリアル利用設定
BBGはBBBからHDMI端子を取っ払うという英断!をしました。そのかわりにシリアル端子とI2C端子を3.3V電源供給込みでつけています。オイラ働くぞ的なシンプルさが素敵です。Seeed社の製品なのでSeeed Groveがコネクタです。
コネクタをつかってシリアル通信をする場合は、/bootのuEnv.txtにデバイスツリー・オーバーレイの行を加えます。
uboot_overlay_addr0=/lib/firmware/BB-UART2-00A0.dtbo
rebootするとコネクタ接続の/dev/ttyS2と通信可能となります。例えばminicom –baudrate 9600 –device /dev/ttyS2 というふうな具合です。簡便にはcat /dev/ttyS2で通信を見られるはずです。
「Beagle Bone Green 基本設定覚書 2024version」への1件のフィードバック