Linux 内核在 stm32h743i 上崩溃
Linux kernel crashes on the stm32h743i
我是嵌入式 linux 的新手,我正在尝试在 stm32h7 上仅使用内部闪存和 ram 启动 linux。
闪存大小 = 2MByte
RAM 大小 = 1MByte
我已经下载了主线 linux 内核,我用 stm32_def config 配置了内核,然后对其进行了自定义,并从中删除了不必要的驱动程序。我将其配置为从闪存 (XIP) 启动。
我有一块定制板,它没有任何外部 ram 或闪存,但它类似于 stm32h743i_discovery 板。所以,我正在使用 stm32h743i_disco 设备树。
我的输出 xipImage 大小约为 1.4MByte,我为它编写了一个引导加载程序。
我像这样将二进制文件合并在一起:
加载程序偏移量:0x08000000
偏移量处的设备树 blob (dtb):0x08000F00
xipImage 偏移量:0x08008000
我的加载程序:
LDR R1, =0x0FFFFFFFF
LDR R2, =0x08000F00
LDR PC, =0x08008000
r1 是机器类型,当我有 dt 时,我应该将它设置为 0x0ffffffff。 r2 是 dtb 在内部闪存中的地址。然后我将程序计数器寄存器 (PC) 设置为 xipImage 起始地址。当我在调试器中观察它时,当 linux 想要开始引导时,片刻之后,PC(程序计数器)变为 0x0,并且 cpu 进入硬故障中断处理程序。
注意:我有一个 stlink v2 programmer/debugger。
这是我的cpu崩溃时的注册。
亲爱的@P__J__ 在第一条评论中提到,这是内存问题! 1MB 不够。而这 1MB 不是线性的。所以,我配置了外部8MB板载dram。
我是嵌入式 linux 的新手,我正在尝试在 stm32h7 上仅使用内部闪存和 ram 启动 linux。
闪存大小 = 2MByte
RAM 大小 = 1MByte
我已经下载了主线 linux 内核,我用 stm32_def config 配置了内核,然后对其进行了自定义,并从中删除了不必要的驱动程序。我将其配置为从闪存 (XIP) 启动。
我有一块定制板,它没有任何外部 ram 或闪存,但它类似于 stm32h743i_discovery 板。所以,我正在使用 stm32h743i_disco 设备树。
我的输出 xipImage 大小约为 1.4MByte,我为它编写了一个引导加载程序。
我像这样将二进制文件合并在一起:
加载程序偏移量:0x08000000
偏移量处的设备树 blob (dtb):0x08000F00
xipImage 偏移量:0x08008000
我的加载程序:
LDR R1, =0x0FFFFFFFF
LDR R2, =0x08000F00
LDR PC, =0x08008000
r1 是机器类型,当我有 dt 时,我应该将它设置为 0x0ffffffff。 r2 是 dtb 在内部闪存中的地址。然后我将程序计数器寄存器 (PC) 设置为 xipImage 起始地址。当我在调试器中观察它时,当 linux 想要开始引导时,片刻之后,PC(程序计数器)变为 0x0,并且 cpu 进入硬故障中断处理程序。
注意:我有一个 stlink v2 programmer/debugger。
这是我的cpu崩溃时的注册。
亲爱的@P__J__ 在第一条评论中提到,这是内存问题! 1MB 不够。而这 1MB 不是线性的。所以,我配置了外部8MB板载dram。