Embedded

錯誤:圖像不是 fdt - 必須重置板才能恢復

  • November 5, 2019

我正在嘗試啟動飛思卡爾 1040RDB 並且遇到了一些困難。我正在使用來自飛思卡爾的預建構 SDK,它有一個 linux VB 映像,其中安裝了 yocto 以及預安裝的所有 yocto 層和配置。我已經能夠成功執行bitbake,現在正在嘗試在目標上部署圖像。當然,飛思卡爾的文件完全沒用。因此,通過反複試驗,我發現了我認為的核心映像、根文件系統和 FDT。我正在使用 TFTP 將它們載入到目標上,然後嘗試從記憶體啟動。下面是目標串列終端的擷取。錯誤在最後一行。在這一點上,我想知道是否有問題.dtb文件,或者我需要做一些準備。我已經對 .dtb 文件進行了十六進制轉儲,並將其與目標快閃記憶體中預安裝的設備樹進行了比較,並認為它們是相似類型的數據。

這個錯誤是什麼意思,我能做些什麼來解決它?

=> tftp 0x01000000 uImage
Using FM1@DTSEC4 device
TFTP from server 192.168.2.236; our IP address is 192.168.2.18
Filename 'uImage'.
Load address: 0x1000000
Loading: #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        ######################
        1.3 MiB/s
done
Bytes transferred = 5103714 (4de062 hex)
=> tftp 0x02000000 rootfs.gz.u-boot
Using FM1@DTSEC4 device
TFTP from server 192.168.2.236; our IP address is 192.168.2.18
Filename 'rootfs.gz.u-boot'.
Load address: 0x2000000
Loading: #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        #################################################################
        ##############################################################
        1.4 MiB/s
done
Bytes transferred = 3310270 (3282be hex)
=> tftp 0x00c00000 uImage.dtb      
Using FM1@DTSEC4 device
TFTP from server 192.168.2.236; our IP address is 192.168.2.18
Filename 'uImage.dtb'.
Load address: 0xc00000
Loading: #######
        994.1 KiB/s
done
Bytes transferred = 35655 (8b47 hex)
=> bootm 0x01000000 0x02000000 0x00c00000
WARNING: adjusting available memory to 30000000
## Booting kernel from Legacy Image at 01000000 ...
  Image Name:   Linux-3.12.19-rt30-QorIQ-SDK-V1.
  Image Type:   PowerPC Linux Kernel Image (gzip compressed)
  Data Size:    5103650 Bytes = 4.9 MiB
  Load Address: 00000000
  Entry Point:  00000000
  Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 02000000 ...
  Image Name:   fsl-image-minimal-t1040rdb-64b-2
  Image Type:   PowerPC Linux RAMDisk Image (gzip compressed)
  Data Size:    3310206 Bytes = 3.2 MiB
  Load Address: 00000000
  Entry Point:  00000000
  Verifying Checksum ... OK
## Flattened Device Tree blob at 00c00000
  Booting using the fdt blob at 0xc00000
  Uncompressing Kernel Image ... OK
  Loading Ramdisk to 2fcd7000, end 2ffff27e ... OK
ERROR: image is not a fdt - must RESET the board to recover.

這似乎是核心映像開始解壓縮時 fdt 損壞的記憶體(通常是由於覆蓋)。嘗試將 fdt 載入到更高的地址,例如 0xe00000。

我通過將圖像載入到更高的地址解決了這個問題。當我收到我正在做的錯誤時

fatload mmc 0 0x2000000 image.ub
bootm 0x2000000

我通過這樣做來修復它

fatload mmc 0 0x40000000 image.ub
bootm 0x40000000

由於它image.ub的大小129476304 > 0x2000000,如果它解壓縮到地址 0,它可能會在解壓縮時覆蓋某些內容。

引用自:https://unix.stackexchange.com/questions/177094