Linux 内核在 stm32h743i 上崩溃

Posted

技术标签:

【中文标题】Linux 内核在 stm32h743i 上崩溃【英文标题】:Linux kernel crashes on the stm32h743i 【发布时间】:2020-11-15 16:11:36 【问题描述】:

我是嵌入式 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 程序员/调试器。

这是我崩溃时的 cpu 寄存器。

【问题讨论】:

它没有足够的资源运行 Linux。 Stm3@h7 disco 有 8MB RAM & qspi flash @P__J__ 你的意思是内存问题?我知道这不是闪存问题,因为我的内核映像是 1.4MB,但我的内部闪存是 2MB。所以这不是闪存问题。我需要多少内存才能以最少的配置运行 linux? 1MBytes 够吗? 1MB 是不够的,。这 1MB 不是线性的。我在 sTM32 uC 上运行 linux 进行测试。但我总是有 8MB 外部 RAM @P__J__ 你是用 xip(就地执行)内核做的吗?因为 xip 消耗更少的内存 @Citrullin 为什么 linux 不在这里?如果是 RAM 问题,我可以将外部 RAM 连接到我的电路板。我想使用 linux 库。听说linux非常适合嵌入式系统。不是吗? 【参考方案1】:

正如亲爱的@P__J__ 在第一条评论中提到的,这是一个 RAM 问题! 1MB 还不够。而这 1MB 不是线性的。所以,我配置了外部 8MB 板载 DRAM。

【讨论】:

我在 7 月 26 日写了什么? @P__J__ 是的,你是对的。将其作为您自己的答案提交,我将删除我的答案并接受您的答案

以上是关于Linux 内核在 stm32h743i 上崩溃的主要内容,如果未能解决你的问题,请参考以下文章

RT-Thread STM32H743 NUCLEO 以太网

基于STM32H743芯片和SOEM的EtherCAT主站源码

stm32h743adc如何请求dma

基于STM32H743设计UI界面心得(还没写完)

STM32H743ZI Nucleo 似乎无法通过 FDCAN 2 传输?

STM32H7 SPI通信:FIFO管理问题