1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ラズパイのyoctoイメージをUSBメモリから起動する(制限あり)

Last updated at Posted at 2023-05-05

ほとんどのケースでSD(microSD)カードにOSとfile systemをインストールしてラズパイを立ち上げると思いますが、USBメモリからも同じように起動させることができたのでそのメモになります。

microSDカードも安く小さくて便利ですが、USBメモリも安くまた耐久・速度性の観点からもメリットあると思ってUSBメモリから起動する方法を調べました。

なのですが、Raspberry Pi OSによる起動方法が書かれたサイトや記事はたくさんある一方で、yoctoで作成したイメージを起動させる方法が見当たりませんでした。
そのあたりの詳細はページの後半で。

やりたいこと

  • Yoctoで作成したAGLのビルド済みイメージをUSBから起動させたい
  • AGLイメージは AGLのDLサイトから取得
    (agl-demo-platform-crosssdk-raspberrypi4-64-20230406130135.rootfs.wic.xz)

やったこと

  • /boot/cmdline.txtを編集してroot=/dev/sda2へ変更
  • usbからImageを読めるようにboot.scrを再作成して、/bootへコピー

この2つで対応できました。前者はすぐ見つかったのですが2つ目に苦戦。。。

制限事項

  • パーティションが作られたmicroSDカードを挿入している必要があります。(/dev/mmcblk0p1を探しに行く)

cmdline.txtを編集

作成したイメージをUSBメモリに書き込むとbootパーティションにcmdline.txtというのがあります。
デフォルトで「root=/dev/mmcblk0p2」となっているところを「root=/dev/sda2」に変更します。

- dwc_otg.lpm_enable=0 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait
+ dwc_otg.lpm_enable=0 console=serial0,115200 root=/dev/sda2 rootfstype=ext4 rootwait

boot.scrを再作成

raspberrypiではu-bootの処理をスクリプト化した「boot.scr」を実行するように作られていました。
デフォルトではmmcからImageファイルを読む作りになっているのでusbからloadできるように変更します。

ただし、boot.scrファイルはテキストファイルではないため直接編集することができないため、作り直しが必要です。

1. 元ファイルを取得
wget https://git.yoctoproject.org/meta-raspberrypi/plain/recipes-bsp/rpi-u-boot-scr/files/boot.cmd.in
2. boot.cmdを編集
cp boot.cmd.in boot.cmd
vi boot.cmd
fdt addr ${fdt_addr} && fdt get value bootargs /chosen bootargs
-fatload mmc 0:1 ${kernel_addr_r} @@KERNEL_IMAGETYPE@@
-if test ! -e mmc 0:1 uboot.env; then saveenv; fi;
-@@KERNEL_BOOTCMD@@ ${kernel_addr_r} - ${fdt_addr}
+fatload usb 0:1 ${kernel_addr_r} Image
+if test ! -e usb 0:1 uboot.env; then saveenv; fi;
+booti ${kernel_addr_r} - ${fdt_addr}
3. mkimageを使ってboot.scrへ変換
mkimage -A arm64 -T script -C none -n "Boot script" -d "boot.cmd" boot.scr

mkimage コマンドはsudo apt install u-boot-toolsでインストールしてください(ubuntuの場合)

USBメモリへコピー

作成したcmdline.txt, boot.scrをUSBメモリのBOOTパーティションへコピーしてファイルを上書きします。

起動

では、さっそくUSBメモリをラズパイ4のUSBコネクタに接続して起動します。
ただなぜかmicroSDカードを挿さないとと起動しない(/dev/mmcblk0p1が見つからずにtimeout)問題に遭遇したため、microSDカードも挿した状態で起動してください。

詳細

to be continue...

やり残し

  • cmdline.txt, boot.scrで対応させること。
    => こちらは RFC(Request for Comment)としてPR投稿しました。
    https://github.com/agherzan/meta-raspberrypi/pull/1175
  • SDカード挿入の原因調査。raspberry piの標準環境でも起きるのか調査必要です。

履歴

日付 コメント
0.1 2023/5/5 初版として
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?