BeagleBone BlackでFalconモードを有効にするのに問題があります。動作しているU-Boot(v2019.04)とLinux(Debian 11.5、カーネルv5.15.65-bone-rt-r30)がありますが、これまでFalconモードを正常に有効にできませんでした。いくつかのエラーが発生しました。 1つ目は、環境を保護しようとする時です。
=> saveenv
Saving Environment to EXT4...
** Unable to use mmc 0:1 for saveenv **
Failed (1)
2番目はSPLをエクスポートしようとしているときです。 uImage ヘッダーを正しく読み込みます。
=> spl export fdt ${loadaddr} - ${fdtaddr}
## Booting kernel from Legacy Image at 82000000 ...
Image Name: Linux kernel
Created: 2022-10-26 17:38:41 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 9880064 Bytes = 9.4 MiB
Load Address: 80008000
Entry Point: 80008000
ただし、チェックサムエラーが発生し、プロセスを完了できません。
Verifying Checksum ... Bad Data CRC
ERROR: can't get kernel image!
XIP Invalid Image ... OK
data abort
以下は、完全なU-Bootコンソールログです。
CPU : AM335X-GP rev 2.1
I2C: ready
DRAM: 512 MiB
No match for driver 'omap_hsmmc'
No match for driver 'omap_hsmmc'
Some drivers were not found
Reset Source: Global external warm reset has occurred.
Reset Source: Global warm SW reset has occurred.
Reset Source: Power-on reset has occurred.
RTC 32KCLK Source: External.
MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
Loading Environment from EXT4...
** Unable to use mmc 0:1 for loading the env **
Board: BeagleBone Black
<ethaddr> not set. Validating first E-fuse MAC
BeagleBone Black:
Model: BeagleBone Black Industrial:
BeagleBone Cape EEPROM: no EEPROM at address: 0x54
BeagleBone Cape EEPROM: no EEPROM at address: 0x55
BeagleBone Cape EEPROM: no EEPROM at address: 0x56
BeagleBone Cape EEPROM: no EEPROM at address: 0x57
Net: eth0: MII MODE
cpsw, usb_ether
Press SPACE to abort autoboot in 2 seconds
=>
=> setenv args_mmc 'setenv bootargs console=${console} ${optargs} root=/dev/mmcblk0p1 ro rootfstype=${mmcrootfstype}'
=> setenv loadfdt 'mmc read ${fdtaddr} 80 180'
=> setenv loadimage 'mmc read ${loadaddr} 900 2000'
=> setenv bootcmd 'run args_mmc; run loadfdt; run loadimage; bootm ${loadaddr} - ${fdtaddr}'
=> saveenv
Saving Environment to EXT4...
** Unable to use mmc 0:1 for saveenv **
Failed (1)
=> run args_mmc
=> run loadimage
MMC read: dev # 0, block # 2304, count 8192 ... 8192 blocks read: OK
=> run loadfdt
MMC read: dev # 0, block # 128, count 384 ... 384 blocks read: OK
=> spl export fdt ${loadaddr} - ${fdtaddr}
## Booting kernel from Legacy Image at 82000000 ...
Image Name: Linux kernel
Created: 2022-10-26 17:38:41 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 9880064 Bytes = 9.4 MiB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... Bad Data CRC
ERROR: can't get kernel image!
XIP Invalid Image ... OK
data abort
pc : [<9ff91558>] lr : [<9ff6d2fd>]
reloc pc : [<80838558>] lr : [<808142fd>]
sp : 9df38b88 ip : 00000000 fp : 00000006
r10: 00000003 r9 : 9df38eb8 r8 : 9df38c6c
r7 : 00000000 r6 : 9ffc0238 r5 : 00000000 r4 : 00000000
r3 : 00000020 r2 : 00000000 r1 : 00000000 r0 : 00000000
Flags: Nzcv IRQs off FIQs on Mode SVC_32
Code: f7fe2000 2800fc91 e7f4d0ed 9ff9f6a8 (4a106803)
Resetting CPU ...
resetting ...
チュートリアルに従っています。https://embetrix.com/2017/05/07/fast-boot-linux-with-u-boot-falcon-mode/(Ubuntuサーバーですべてをコンパイルし、DebianのBeagleBone BlackでSDカードに直接書き込んだことを除いて、Yoctoの5つの「部分」コマンドを含む部分をスキップしました。問題ありません。)可能です。チュートリアルや私の環境のどこかにバグがあるということです。カーネルの読み込みにタイムアウトの問題があるか、デバイスツリーファイルが正しくない可能性があります。私は動作しているzImageからuImageを生成しましたが、uImageヘッダーが正しく読み取られているので、問題が何であるかわかりません。どんな助けでも大変感謝します。
編集:以下の提案に従って、EXT4ファイルシステムを使用しなくなるように設定を変更しました。今私の環境変数が保存されました。本当に良いです!残念ながら、カーネルチェックサムの問題がまだ存在します。現在のU-Bootログは次のとおりです。
U-Boot SPL 2022.04 (Nov 03 2022 - 11:40:28 -0400)
Trying to boot from MMC2
U-Boot 2022.04 (Nov 03 2022 - 11:40:28 -0400)
CPU : AM335X-GP rev 2.1
Model: TI AM335x BeagleBone Black
DRAM: 512 MiB
Reset Source: Power-on reset has occurred.
RTC 32KCLK Source: External.
Core: 150 devices, 14 uclasses, devicetree: separate
WDT: Started wdt@44e35000 with servicing (60s timeout)
MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
Loading Environment from MMC... *** Warning - bad CRC, using default environment
Board: BeagleBone Black
<ethaddr> not set. Validating first E-fuse MAC
BeagleBone Black:
Model: BeagleBone Black Industrial:
BeagleBone Cape EEPROM: no EEPROM at address: 0x54
BeagleBone Cape EEPROM: no EEPROM at address: 0x55
BeagleBone Cape EEPROM: no EEPROM at address: 0x56
BeagleBone Cape EEPROM: no EEPROM at address: 0x57
Net: Could not get PHY for ethernet@4a100000: addr 0
eth2: ethernet@4a100000, eth3: usb_ether
Press SPACE to abort autoboot in 0 seconds
=> setenv args_mmc 'setenv bootargs console=${console} ${optargs} root=/dev/mmcblk0p1 ro rootfstype=${mmcrootfstype}'
=> setenv loadfdt 'mmc read ${fdtaddr} 80 180'
=> setenv loadimage 'mmc read ${loadaddr} 900 2000'
=> setenv bootcmd 'run args_mmc; run loadfdt; run loadimage; bootm ${loadaddr} - ${fdtaddr}'
=> saveenv
Saving Environment to MMC... Writing to redundant MMC(0)... OK
=> run args_mmc
=> run loadimage
MMC read: dev # 0, block # 2304, count 8192 ... 8192 blocks read: OK
=> run loadfdt
MMC read: dev # 0, block # 128, count 384 ... 384 blocks read: OK
=> spl export fdt ${loadaddr} - ${fdtaddr}
## Booting kernel from Legacy Image at 82000000 ...
Image Name: Linux kernel
Created: 2022-10-26 17:38:41 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 9880064 Bytes = 9.4 MiB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... Bad Data CRC
ERROR: can't get kernel image!
XIP Invalid Image
data abort
pc : [<9ffa9fe8>] lr : [<9ff6bfa9>]
reloc pc : [<80843fe8>] lr : [<80805fa9>]
sp : 9df30e08 ip : 00000000 fp : 00000020
r10: 00000003 r9 : 9df45eb0 r8 : 9df30f04
r7 : 00000000 r6 : 9ffe3b1c r5 : 00000000 r4 : 00000000
r3 : edfe0dd0 r2 : 00000003 r1 : 00000000 r0 : 00000000
Flags: nzCv IRQs off FIQs on Mode SVC_32 (T)
Code: bfef 0000 b510 4b24 (6801) 4602
Resetting CPU ...
resetting ...
答え1
- SDカードのブロックサイズはいくらですか? 512バイトは確かに小さすぎます。 1kByteでもロードされた8192ブロックは、9.4MiBカーネルイメージに収まるほど大きくないため、部分的にロードされたイメージには誤ったCRCがあります。たとえば、ブロックサイズが512バイトの場合は約
setenv loadimage 'mmc read ${loadaddr} 900 4C00'
。 root=/dev/mmcblk0p1
この問題を解決すると、ファイルシステムのないパーティションをルートファイルシステムとして使用するコマンドラインで、次の問題が発生します。
ext4がチュートリアルに適している場合は、ext4を使用する方が良いかもしれません。生のパーティションを使用する方が高速ですが、追加のトラップがたくさんあります。
答え2
このU-Bootコマンドに4.19MBを読み取るエラーがあることがわかりました。
setenv loadimage 'mmc read ${loadaddr} 900 2000'
私の画像は9.65 MBなので(チュートリアルで使用されている画像よりはるかに大きいです)、次のようにする必要があります。
setenv loadimage 'mmc read ${loadaddr} 900 8000'
16.8MBでカーネルのための十分なスペースです。これでファルコンモードが有効になりました。ご協力ありがとうございます!