You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

i.MX6UL平台fitImage含zImage可启动,替换为Image后启动失败求助

i.MX6UL使用内含未压缩Image的fitImage启动失败问题

正常启动情况

在i.MX6UL开发板上,内含zImage的fitImage可正常启动,启动日志如下:

U-Boot 2022.10+yocto (Apr 20 2023 - 21:44:39 +0000)

CPU:   Freescale i.MX6UL rev1.2 528 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 43C
Reset cause: WDOG
Board: unknown (version=0x0)
DRAM:  512 MiB
Core:  37 devices, 18 uclasses, devicetree: separate
WDT:   Started watchdog with servicing (128s timeout)
NAND:  512 MiB
MMC:   FSL_SDHC: 0
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
SEC0:  RNG instantiated
Unsupported board variant!
Net:   eth0: ethernet@2188000
Normal Boot
Hit any key to stop autoboot:  0
Booting fitImage from mmc0 ...
switch to partitions #0, OK
mmc0 is current device
4846904 bytes read in 214 ms (21.6 MiB/s)
## Loading kernel from FIT Image at 82000000 ...
No configuration specified, trying default...
Found default configuration: 'conf-map55-com.dtb'
   Using 'conf-map55-com.dtb' configuration
   Verifying Hash Integrity ... OK
   Trying 'kernel-1' kernel subimage
     Description:  Linux kernel
     Type:         Kernel Image
     Compression:  uncompressed
     Data Start:   0x8200011c
     Data Size:    4809104 Bytes = 4.6 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x83000000
     Entry Point:  0x83000000
     Hash node:    'hash-1'
     Hash algo:    sha256
     Hash value:   3edf87645b091fcb00d877f9ea851b2e8893aad196fc39a4588728ac6cf93d4d
     Hash len:     32
   Verifying Hash Integrity ... sha256CACHE: Misaligned operation at range [8200011c, 824962dc]
+ OK
   kernel data at 0x8200011c, len = 0x00496190 (4809104)
*  ramdisk: using config 'conf-map55-com.dtb' from image at 0x82000000
*  ramdisk: no 'ramdisk' in config
*  fdt: using config 'conf-map55-com.dtb' from image at 0x82000000
## Checking for 'FDT'/'FDT Image' at 82000000
## Loading fdt from FIT Image at 82000000 ...
   Using 'conf-map55-com.dtb' configuration
   Verifying Hash Integrity ... OK
   Trying 'fdt-map55-com.dtb' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x824963b8
     Data Size:    35867 Bytes = 35 KiB
     Architecture: ARM
Can't get 'load' property from FIT 0x82000000, node: offset 4809524, name fdt-map55-com.dtb (FDT_ERR_NOTFOUND)
     Hash node:    'hash-1'
     Hash algo:    sha256
     Hash value:   74d2031e5bdb030bcc137dfb013b01acb253dcc14e0153ab63d5e65e41a0caab
     Hash len:     32
   Verifying Hash Integrity ... sha256CACHE: Misaligned operation at range [824963b8, 8249eff8]
+ OK
Can't get 'load' property from FIT 0x82000000, node: offset 4809524, name fdt-map55-com.dtb (FDT_ERR_NOTFOUND)
fit_uname=fdt-map55-com.dtb, fit_uname_config=conf-map55-com.dtb
   Booting using the fdt blob at 0x824963b8
   of_flat_tree at 0x824963b8 size 0x00008c1b
   Loading Kernel Image
   @ comp: 0, load: 0x83000000, start: 0x8200011c, type: 2
   @ load_buf: 0x83000000, image_buf: 0x8200011c, image_len: 4809104, unc_len: 33554432, load_end: 9df546ac
   @ load: 0x83000000, load_end: 0x9df546ac, image_len: 4809104
   kernel loaded at 0x83000000, end = 0x83496190
using: FDT
   Using Device Tree in place at 824963b8, end 824a1fd2
## Transferring control to Linux (at address 83000000)...

Starting kernel ...

## Last log before kernel_entry(machid=0x0,r2=0x824963b8)
Uncompressing Linux... done, booting the kernel.
[    0.000000] Booting Linux on physical CPU 0x0

问题现象

使用同一构建生成的未压缩Image替换zImage制作fitImage后,启动卡在移交控制权给Linux之后,无内核启动输出,日志如下:

U-Boot 2022.10+yocto (Apr 20 2023 - 21:44:39 +0000)

CPU:   Freescale i.MX6UL rev1.2 528 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 43C
Reset cause: WDOG
Board: unknown (version=0x0)
DRAM:  512 MiB
Core:  37 devices, 18 uclasses, devicetree: separate
WDT:   Started watchdog with servicing (128s timeout)
NAND:  512 MiB
MMC:   FSL_SDHC: 0
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
SEC0:  RNG instantiated
Unsupported board variant!
Net:   eth0: ethernet@2188000
Normal Boot
Hit any key to stop autoboot:  0
Booting fitImage from mmc0 ...
switch to partitions #0, OK
mmc0 is current device
13356892 bytes read in 585 ms (21.8 MiB/s)
## Loading kernel from FIT Image at 82000000 ...
No configuration specified, trying default...
Found default configuration: 'conf-map55-com.dtb'
   Using 'conf-map55-com.dtb' configuration
   Verifying Hash Integrity ... OK
   Trying 'kernel-1' kernel subimage
     Description:  Linux kernel
     Type:         Kernel Image
     Compression:  uncompressed
     Data Start:   0x8200011c
     Data Size:    13319092 Bytes = 12.7 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x83000000
     Entry Point:  0x83000000
     Hash node:    'hash-1'
     Hash algo:    sha256
     Hash value:   f4250bf9ec13b505ab828da74fdb33ea67138de09dc861dd186ea4e9d29e4b80
     Hash len:     32
   Verifying Hash Integrity ... sha256CACHE: Misaligned operation at range [8200011c, 82cb3cdc]
+ OK
   kernel data at 0x8200011c, len = 0x00cb3bb4 (13319092)
*  ramdisk: using config 'conf-map55-com.dtb' from image at 0x82000000
*  ramdisk: no 'ramdisk' in config
*  fdt: using config 'conf-map55-com.dtb' from image at 0x82000000
## Checking for 'FDT'/'FDT Image' at 82000000
## Loading fdt from FIT Image at 82000000 ...
   Using 'conf-map55-com.dtb' configuration
   Verifying Hash Integrity ... OK
   Trying 'fdt-map55-com.dtb' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x82cb3ddc
     Data Size:    35867 Bytes = 35 KiB
     Architecture: ARM
Can't get 'load' property from FIT 0x82000000, node: offset 13319512, name fdt-map55-com.dtb (FDT_ERR_NOTFOUND)
     Hash node:    'hash-1'
     Hash algo:    sha256
     Hash value:   74d2031e5bdb030bcc137dfb013b01acb253dcc14e0153ab63d5e65e41a0caab
     Hash len:     32
   Verifying Hash Integrity ... sha256CACHE: Misaligned operation at range [82cb3ddc, 82cbca1c]
+ OK
Can't get 'load' property from FIT 0x82000000, node: offset 13319512, name fdt-map55-com.dtb (FDT_ERR_NOTFOUND)
fit_uname=fdt-map55-com.dtb, fit_uname_config=conf-map55-com.dtb
   Booting using the fdt blob at 0x82cb3ddc
   of_flat_tree at 0x82cb3ddc size 0x00008c1b
   Loading Kernel Image
   @ comp: 0, load: 0x83000000, start: 0x8200011c, type: 2
   @ load_buf: 0x83000000, image_buf: 0x8200011c, image_len: 13319092, unc_len: 33554432, load_end: 9df546ac
   @ load: 0x83000000, load_end: 0x9df546ac, image_len: 13319092
   kernel loaded at 0x83000000, end = 0x83cb3bb4
using: FDT
   Using Device Tree in place at 82cb3ddc, end 82cbf9f6
## Transferring control to Linux (at address 83000000)...

Starting kernel ...

## Last log before kernel_entry(machid=0x0,r2=0x82cb3ddc)

已尝试操作

  • 修改U-Boot的CONFIG_SYS_BOOTM_LEN参数从默认0x1000000(16MB)改为0x2000000(32MB),问题未解决。

解决思路与线索

  • 内核入口与加载地址验证:确认未压缩Image的实际入口地址是否匹配U-Boot传递的0x83000000。zImage的入口是压缩引导程序,未压缩Image的入口是内核起始地址,需确保编译时内核的入口配置正确,且fitImage中entry属性与内核实际入口一致。可尝试将加载地址改为i.MX6UL常用的未压缩内核地址0x80800000,同步修改fitImage的load和entry属性。
  • 内存冲突排查:检查未压缩内核加载后的内存范围(0x83000000到0x83cb3bb4)是否与设备树、U-Boot或其他内存区域冲突。可调整内核加载地址,或通过U-Boot的bdinfo命令查看内存布局,确认可用内存区域。
  • fitImage配置校验:制作fitImage时,确保内核子节点的compression字段明确为uncompressed,type为Kernel Image;同时为设备树子节点添加load属性,避免加载时的警告(虽然zImage启动时也有该警告,但排除潜在影响)。
  • 内核编译参数检查:确认未压缩Image的编译配置中未开启仅针对zImage的选项,比如CONFIG_ZBOOT_ROM;检查内核是否编译为适合i.MX6UL的ARMv7架构,且启动相关配置(如CONFIG_ARM_APPENDED_DTB等)正确。
  • 直接启动验证:跳过fitImage,直接用U-Boot的bootm命令启动未压缩Image,确认内核本身是否能正常启动,排除fitImage打包过程的问题。
  • U-Boot调试增强:在U-Boot中启用更多调试日志,或使用bootm命令手动指定内核、设备树地址,观察内核启动早期是否有错误输出;也可通过JTAG调试内核入口后的执行流程。

内容的提问来源于stack exchange,提问作者BenKwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:21:59