我花了几天时间尝试理解,但我卡住了。在我的STM32F429I-DISC1板上输入“bootm 8100000”后,我只得到一个“Starting kernel…”的消息。
在将uboot从2011年更新到2016年之前,它是“Starting Kernel…”+ UNHANDED EXCEPTION HARDFAULT,但现在我只有“Starting Kernel…”的消息。
MCU是stm32F429,2MB Flash + ext. 8MB RAM。
Flash起始地址为0x08000000(uboot地址),我将内核放在第二个flash bank的起始位置0x08100000。
外部8MB RAM的起始地址为0xD0000000。 u-boot-2016.11似乎在该板上运行得很好,BDI给出:
使用'robutest'/'emcraft'内核/配置文件,我得到了相同的日志,除非入口点似乎更正确,因为它是08100001。
在robutest/emcraft内核上,我尝试激活板子的LCD屏幕,但没有任何反应。
在所有测试中,我都激活了内核配置中的"early printk"和"DEBUG_LL_xxx"选项。
这是我的.config文件链接:http://pastebin.com/gBNYx3Gs 附注:我尝试使用uCLinux emcraft/robutest来找出问题所在,但我的主要目标是运行Linux 4.9。
感谢您的阅读!
编辑:我尝试以“旧方式”传递dtb,但结果相同。
在将uboot从2011年更新到2016年之前,它是“Starting Kernel…”+ UNHANDED EXCEPTION HARDFAULT,但现在我只有“Starting Kernel…”的消息。
MCU是stm32F429,2MB Flash + ext. 8MB RAM。
Flash起始地址为0x08000000(uboot地址),我将内核放在第二个flash bank的起始位置0x08100000。
外部8MB RAM的起始地址为0xD0000000。 u-boot-2016.11似乎在该板上运行得很好,BDI给出:
U-Boot > bdi
arch_number = 0x00000000
boot_params = 0xD0000100
DRAM bank = 0x00000000
-> start = 0xD0000000
-> size = 0x00800000
current eth = unknown
ip_addr = <NULL>
baudrate = 115200 bps
relocaddr = 0xD07D6000
reloc off = 0xC87D6000
irq_sp = 0xD05D3EE0
sp start = 0xD05D3ED0
Early malloc usage: e0 / 400
这是我构建内核的方式:
make CROSS_COMPILE=arm-none-eabi- ARCH=arm uImage LOADADDR=08100000 -B
以下是bootm命令的完整输出:
U-Boot > bootm 8100000
## Booting kernel from Legacy Image at 08100000 ...
Image Name: Linux-4.9.0
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 839872 Bytes = 820.2 KiB
Load Address: 08100000
Entry Point: 08100000
Verifying Checksum ... OK
Loading Kernel Image ... OK
Starting kernel ...
使用'robutest'/'emcraft'内核/配置文件,我得到了相同的日志,除非入口点似乎更正确,因为它是08100001。
在robutest/emcraft内核上,我尝试激活板子的LCD屏幕,但没有任何反应。
在所有测试中,我都激活了内核配置中的"early printk"和"DEBUG_LL_xxx"选项。
这是我的.config文件链接:http://pastebin.com/gBNYx3Gs 附注:我尝试使用uCLinux emcraft/robutest来找出问题所在,但我的主要目标是运行Linux 4.9。
感谢您的阅读!
编辑:我尝试以“旧方式”传递dtb,但结果相同。
U-Boot > bootm 08100000 - 08040000
## Booting kernel from Legacy Image at 08100000 ...
Image Name: Linux-4.9.0
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 805744 Bytes = 786.9 KiB
Load Address: 08100000
Entry Point: 08100000
Verifying Checksum ... OK
## Flattened Device Tree blob at 08040000
Booting using the fdt blob at 0x8040000
Loading Kernel Image ... OK
Loading Device Tree to d05ce000, end d05d2a9f ... OK
Starting kernel ...
我很绝望,欢迎任何想法 :'(
编辑2:我试图使用u-boot解压内核,但结果一样:
U-Boot > bootm 8100000 - 8040000
## Booting kernel from Legacy Image at 08100000 ...
Image Name: uImage
Image Type: ARM Linux Kernel Image (gzip compressed)
Data Size: 940696 Bytes = 918.6 KiB
Load Address: d0008000
Entry Point: d0008001
Verifying Checksum ... OK
## Flattened Device Tree blob at 08040000
Booting using the fdt blob at 0x8040000
Uncompressing Kernel Image ... OK
Loading Device Tree to d05ce000, end d05d2a9f ... OK
Starting kernel ...
编辑3:我在dtb中检查了内存/USART1地址,一切正常。为什么我没有内核的消息?
编辑4:使用uxipImage:
U-Boot > bootm 08060000 - 08040000
## Booting kernel from Legacy Image at 08060000 ...
Image Name: uxipImage
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1497396 Bytes = 1.4 MiB
Load Address: 08060000
Entry Point: 08060041
Verifying Checksum ... OK
## Flattened Device Tree blob at 08040000
Booting using the fdt blob at 0x8040000
Loading Kernel Image ... OK
Loading Device Tree to d05ce000, end d05d2a9f ... OK
Starting kernel ...
我尝试了不同的入口点,08060000、08060040和08060041。