U-boot가 유효한 장치 트리를 찾을 수 없습니다

U-boot가 유효한 장치 트리를 찾을 수 없습니다

문제가 있습니다. 내 장치(Atmel SAMA5D27 Xplained새 장치 트리를 새로 고치려고 하면 보드가 부팅되지 않습니다.

이것이 제가 한 일입니다(자세한 내용은 이 메시지 끝에 있음).

  1. 다운로드했습니다Github의 Linux4SAM 소스 트리(linux4sam_5.3 태그). 이 라벨은 제품을 받았을 때 부착된 라벨이었기 때문에 사용했습니다.
  2. SPI1 장치를 활성화하기 위해 파일을 변경했습니다 arch/arm/boot/dts/at91-sama5d2_xplained.dts(그리고 SPI1 핀과 충돌하므로 SDMMC1 장치를 비활성화합니다). 동일한 디렉토리에 파일을 저장 at91-sama5d2_xplained_custom.dts하고 그에 따라 Makefile을 수정했습니다.
  3. 다음 명령을 사용하여 소스 트리의 루트에서 컴파일했습니다. $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs새 DTB가 생성되었습니다.
  4. 명령어를 이용하여 DTB 파일의 크기를 확인해보니 fileDTB가 30796바이트라는 것을 알게 되었습니다.
  5. 다음 명령을 사용하여 DTB를 장치에 플래시했습니다.SAM-BA 유틸리티, 성공했지만 플래시 메모리가 30976바이트라고 보고되었습니다.
  6. 장치를 재부팅했는데 U-boot 환경에서 멈췄습니다. 이는 DTB가 변경되었기 때문에 예상되는 현상입니다. bootcmdDTB의 새로운 크기(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

물론 내 질문은: 내가 뭘 잘못하고 있는 걸까?

나는 몇 가지 가정과 내가 시도한 것을 가지고 있습니다:

  1. 크기가 잘못되었습니다. 0x7900 bootcmd(SAM-BA에서 보고한 30976바이트에 해당)을 사용해 보았지만 도움이 되지 않았습니다.
  2. 잘못된 주소로 플래시했습니다. 0x21000000주소가 무엇인지 완전히 확신할 수 없지만 SAM-BA에서 제공한 샘플 파일에서 0x70000이 올바른 것으로 추론했습니다. 도움이 되지 않음으로 변경합니다. SAM-BA 쓰기 명령을 쓰기 위치로 변경하면 메모리 끝을 지나서 쓸 수 없는 오류가 발생합니다.sf readbootcmd0x210000000x00x21070000
  3. 내 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.

관련 정보