今回は sunxi-fel を使い usb ブートで起動する方法です。まず、最初に用意するものは、USB Type A オス Tyep A オスケーブルです。筆者はアマゾンで購入したのですが、参考までにリンクはこちらになります。次に fel モードでブートさせるためにイヤホンジャック奥のスイッチを押すための爪楊枝などの非導電性の棒を用意してください。あとは8GB以上のUSBメモリで物理的に必要なものは以上です。
続いて u-boot をコンパイルします。前回とほぼ同じなのですが、USBの差し替えができるようにusbをresetするまで10秒待つようにさせます。以下、おさらいの意味も兼ねて修正・再掲しました。
書き込みがすんだら、linux機に差し込んで パーティション1の extlinux/extlinux.confを以下のようにします。
今回は以上です。それでは。
続いて u-boot をコンパイルします。前回とほぼ同じなのですが、USBの差し替えができるようにusbをresetするまで10秒待つようにさせます。以下、おさらいの意味も兼ねて修正・再掲しました。
mkdir -P /usr/src/h728usb chown YourUserID /usr/src/h728 git clone https://github.com/jernejsk/arm-trusted-firmware -b a523 git clone https://github.com/u-boot/u-boot -b v2025.10 cd arm-trusted-firmware make PLAT=sun55i_a523 DEBUG=0 bl31 cp build/sun55i_a523/release/bl31.bin ../u-boot cd ../u-boot.c cat > wait-for-10seconds-befoer-starting-usb.patch <続いて USBメモリに Windows機でイメージを書き込みます。イメージファイルは 前回の u-boot-sunxi-with-spl.bin で起動させるためのイメージ(/usr/src/h728/radxa/tina.radxa/repo/out/a527_linux_diana.01_uart0.img)を使用してください。#include #include +#include #ifdef CONFIG_USB_STORAGE static int usb_stor_curr_dev = -1; /* current device */ @@ -610,6 +611,8 @@ if (strncmp(argv[1], "start", 5) == 0) { if (usb_started) return 0; /* Already started */ + printf("wait for 10 seconds before starting USB...\n"); + udelay(10000000); printf("starting USB...\n"); do_usb_start(); return 0; EOF patch -p1 < wait-for-10seconds-befoer-starting-usb.patch make CROSS_COMPILE=aarch64-linux-gnu- x96q_pro_plus_defconfig make CROSS_COMPILE=aarch64-linux-gnu- -j 40
書き込みがすんだら、linux機に差し込んで パーティション1の extlinux/extlinux.confを以下のようにします。
label linux kernel /extlinux/Image devicetree /extlinux/sunxi.dtb append earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=tty1 console=ttyAS0,115200 loglevel=8 root=/dev/sda4 rw rootwait initcall_blacklist=psci_checkerつついてパーティションの拡大を忘れずにおこなってください。さらに、sunxi-fel コマンドを使えるようにしておきます。
apt -y install sunxi-tool必要なものはこれで揃ったので、本機をfel モードで立ち上げるため、イヤホンジャック奥のスイッチを爪楊枝などで抑えながら電源コードを差し込みます。その後に Type A オス - Type A オスケーブルを USB 2.0 ポートのいずれかに差し込みます。本機がfelモードで立ち上がっていると以下のようになります。
$ sudo sunxi-fel version AWUSBFEX soc=00001890(A523) 00000001 ver=0001 44 08 scratchpad=00061500 00000000 00000000fel モードで立ち上がっているのを確認できたら、u-bootをfel経由で起動させ、以下のメッセージが完了したら(doneの表示がされたら)、felに使ったケーブルを本機から抜き、およそ10秒以内に先程作成したUSBメモリを差し込んでください。(もしくは2つあるポートのうち空いているポートにUSBハブにマウス・キーボード・USBメモリを接続してからfelブートさせてもOKです。)すると、u-bootがUSBをスキャンし、見つかったUSBドライブから起動します。
$ cd /usr/src/h728/u-boot $ sudo sunxi-fel -v -p uboot u-boot-sunxi-with-spl.bin found DT name in SPL header: allwinner/sun55i-h728-x96qpro+ Stack pointers: sp_irq=0x00045400, sp=0x00060300 MMU is not enabled by BROM => Executing the SPL... done. loading image "ARM Trusted Firmware" (45169 bytes) to 0x54000 loading image "U-Boot" (697232 bytes) to 0x4a000000 loading DTB "allwinner/sun55i-h728-x96qpro+" (24264 bytes) Starting U-Boot (0x00054000).-b Store entry point 0x00054000 to RVBAR 0x08000040, and request warm reset with RMR mode 3... done起動後およそ30秒から50秒程で画面が表示されればOKです。具体的にfelからusbブートする記事はあまり見かけないので挙げてみました。なお参考ですが今回使用しているイメージはカーネルの更新にdebianパッケージがあるわけではなく、また、initrdを使用していませんので、カーネルの更新( build.sh menuconfig でコンフィグ変更/ build.sh kernel でビルド)はカーネルとモジュールの入れ替えで対応できないわけではありません。(正直にいって面倒ですが)
今回は以上です。それでは。
コメント
コメントを投稿