問題があります。マイデバイス(Atmel SAMA5D27 Xplained新しいデバイスツリーを更新しようとすると、ボードは起動しません。
これが私がしたことです(詳細はこのメッセージの最後にあります)。
- ダウンロードしましたGithubのLinux4SAMソースツリー(linux4sam_5.3タグ)。このラベルは製品を受け取ったときに貼り付けられたラベルだったので使用しました。
- 私はSPI1デバイスを有効にするためにファイルを変更しました
arch/arm/boot/dts/at91-sama5d2_xplained.dts
(そしてSPI1ピンと衝突するので、SDMMC1デバイスを無効にします)。同じディレクトリにファイルを保存しat91-sama5d2_xplained_custom.dts
、それに応じてMakefileを変更しました。 - 次のコマンドを使用して、ソースツリーのルートでコンパイルしました。
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
新しい DTB が作成されました。 - 命令を使ってDTBファイルのサイズを確認してみると、
file
DTBが30796バイトであることがわかりました。 - 次のコマンドを使用して、DTBをデバイスにフラッシュしました。SAM-BAユーティリティ、成功しましたが、フラッシュメモリが30976バイトと報告されました。
- デバイスを再起動しましたが、U-boot環境でハングしました。これは DTB が変更されたために予想される現象です。
bootcmd
DTBの新しいサイズ(30796 = 0x784c)を反映するように更新しましたが、まだ起動しません。
更新された結果は次のとおりですprintenv
(saveを使用しましたsaveenv
)。
=> printenv
bootargs=console=ttyS0,115200 root=/dev/mmcblk0p1 rw rootfstype=ext4 rootwait
bootcmd=sf probe 0; sf read 0x21000000 0x70000 0x784c; sf read 0x22000000 0x7c000 0x3636a8; bootz 0x22000000 - 0x21000000
bootdelay=1
ethact=gmac0
ethaddr=fc:c2:3d:02:f4:e9
stderr=serial
stdin=serial
stdout=serial
Environment size: 309/8188 bytes
sf read
最初のコマンドでのみサイズを更新しましたbootcmd
。読み取りに使用され、sf read 0x21000000 0x70000 0x77c8
元のファイルから取得されたDTBサイズに対応しますat91-sama5d2_xplained.dts
。
私が得るエラーは次のとおりです。
SF: Detected AT25DF321 with page size 256 Bytes, erase size 4 KiB, total 4 MiB
device 0 offset 0x70000, size 0x784c
SF: 30796 bytes @ 0x70000 Read: OK
device 0 offset 0x7c000, size 0x3636a8
SF: 3552936 bytes @ 0x7c000 Read: OK
Kernel image @ 0x22000000 [ 0x000000 - 0x3636a8 ]
ERROR: Did not find a cmdline Flattened Device Tree
Could not find a valid device tree
もちろん、私の質問は:私が間違っているのですか?
私はいくつかの仮定と私が試したことがあります:
- サイズが間違っています。 0x7900
bootcmd
(SAM-BAが報告した30976バイトに相当)を試してみましたが、役に立ちませんでした。 - 間違ったアドレスでフラッシュしました。
0x21000000
アドレスが何であるかは完全にはわかりませんが、SAM-BAによって提供されたサンプルファイルから0x70000が正しいと推定されています。役に立たないに変更します。 SAM-BA書き込みコマンドを書き込み位置に変更すると、メモリの終わりを過ぎて書き込めないエラーが発生します。sf read
bootcmd
0x21000000
0x0
0x21070000
- 私のDTBが間違っています。 DTSファイルで特に奇妙なことをするわけではないようで、コンパイルになったので少なくとも読みやすい形式になっていると思います。
どんな助け/助言/指針/等。現在ブートされていないデバイスがあるので、本当に感謝しています...間違ったアドレスにフラッシュすると、私が知らないすべてのものが壊れるか心配になります。
詳細
DTSファイル:
/dts-v1/;
#include "at91-sama5d2_xplained_common.dtsi"
/ {
model = "Atmel SAMA5D2 Xplained";
compatible = "atmel,sama5d2-xplained", "atmel,sama5d2", "atmel,sama5";
ahb {
sdmmc1: sdio-host@b0000000 {
status = "disabled"; /* conflict with spi1 */
};
apb {
can0: can@f8054000 {
status = "okay";
};
can1: can@fc050000 {
status = "okay";
};
spi1: spi@fc000000 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_spi1_default>;
status = "okay";
};
pinctrl@fc038000 {
pinctrl_spi1_default: spi1_default {
pinmux = <PIN_PA22__SPI1_SPCK>,
<PIN_PA23__SPI1_MOSI>,
<PIN_PA24__SPI1_MISO>,
<PIN_PA25__SPI1_NPCS0>;
bias-disable;
};
};
};
};
};
DTB編集:
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
make[1]: 'include/generated/mach-types.h' is up to date.
CHK include/generated/bounds.h
CHK include/generated/asm-offsets.h
CALL scripts/checksyscalls.sh
DTC arch/arm/boot/dts/at91-sama5d2_xplained_custom.dtb
DTBファイルサイズの確認:
$ file arch/arm/boot/dts/at91-sama5d2_xplained_custom.dtb
arch/arm/boot/dts/at91-sama5d2_xplained_custom.dtb: Device Tree Blob version 17, size=30796, boot CPU=0, string block size=1692, DT structure block size=29048
SAM-BAフラッシュコマンド出力:
# sam-ba -p serial:ttyACM0:115200 -b sama5d2-xplained -a serialflash -c write:at91-sama5d2_xplained_custom.dtb:0x70000
Opening serial port 'ttyACM0'
Connection opened.
Detected memory size is 4194304 bytes.
Executing command 'write:at91-sama5d2_xplained_custom.dtb:0x70000'
Added 180 bytes of padding to align to page size
Wrote 30976 bytes at address 0x00070000 (100.00%)
Connection closed.
SAM-BA はメモリの終わりを超えて書き込みを試みます。
# sam-ba -p serial:ttyACM0:115200 -b sama5d2-xplained -a serialflash -c write:at91-sama5d2_xplained_custom.dtb:0x21070000
Opening serial port 'ttyACM0'
Connection opened.
Detected memory size is 4194304 bytes.
Executing command 'write:at91-sama5d2_xplained_custom.dtb:0x21070000'
Added 180 bytes of padding to align to page size
Error: Command 'write:at91-sama5d2_xplained_custom.dtb:0x21070000': Cannot write past end of memory, only -549912576 bytes remaining at offset 0x21070000 (requested 30976 bytes)
Connection closed.
答え1
ユーザーエラーです。
SAM-BAにも確認方法があることがわかりました。
# sam-ba -p serial:ttyACM0:115200 -b sama5d2-xplained -a serialflash -c verify:at91-sama5d2_xplained_custom.dtb:0x70000
Opening serial port 'ttyACM0'
Connection opened.
Detected memory size is 4194304 bytes.
Executing command 'verify:at91-sama5d2_xplained_custom.dtb:0x70000'
Added 180 bytes of padding to align to page size
Error: Command 'verify:at91-sama5d2_xplained_custom.dtb:0x70000': Failed verification. First error at file offset 0x00000000
Connection closed.
悪い。ステップ5には非常に重要なステップが欠けていることがわかりました。まず、書く前にフラッシュを消去する必要があります(私は知りませんでした。明らかにこれを処理するツールを使用していたようです)。
# sam-ba -p serial:ttyACM0:115200 -b sama5d2-xplained -a serialflash -c erase:0x70000:0x8000
Opening serial port 'ttyACM0'
Connection opened.
Detected memory size is 4194304 bytes.
Executing command 'erase:0x70000:0x8000'
Erased 32768 bytes at address 0x00070000 (100.00%)
Connection closed.
# sam-ba -p serial:ttyACM0:115200 -b sama5d2-xplained -a serialflash -c write:at91-sama5d2_xplained_custom.dtb:0x70000
Opening serial port 'ttyACM0'
Connection opened.
Detected memory size is 4194304 bytes.
Executing command 'write:at91-sama5d2_xplained_custom.dtb:0x70000'
Added 180 bytes of padding to align to page size
Wrote 30976 bytes at address 0x00070000 (100.00%)
Connection closed.
# sam-ba -p serial:ttyACM0:115200 -b sama5d2-xplained -a serialflash -c verify:at91-sama5d2_xplained_custom.dtb:0x70000
Opening serial port 'ttyACM0'
Connection opened.
Detected memory size is 4194304 bytes.
Executing command 'verify:at91-sama5d2_xplained_custom.dtb:0x70000'
Added 180 bytes of padding to align to page size
Verified 30976 bytes at address 0x00070000 (100.00%)
Connection closed.