工具/软件:Linux
U-Boot 版本: U-Boot 2013.07
我们有基于 Beaglbone Black 的定制板。
我们拥有256MB DDR 和4GB eMMC、
我们将添加具有512MB DDR 和8GB eMMC 的新电路板。
我们计划在 EEPROM 中放置板版本、并读取相同的内容以确定从哪个板 SPL 引导(例如256MB 或512MB DDR)、并根据板版本初始化 DDR
现在、我在(特定于工程) board.c 和的 s_init()函数中添加了代码
添加几个 printf 后,我发现 spi.c 中的函数 spi_do_alloc_slave (U-Boosource/drivers/spi/)在处挂起
ptr = malloc (size)
我从板配置中看到了这一点
/* 1MB 到 SDRAM 中、以允许 SPL 在 SDRAM 开头的 BSS *在将该地址预留给 u-boot.img 的 *标头之前为64字节。 即0x800FFFC0-0x80100000不应用于 任何*其他需求。 */ #define CONFIG_SYS_TEXT_BASE0x80800000 #define CONFIG_SYS_SPL_MALLOC_START0x80a08000 #define CONFIG_SYS_SPL_MALLOC_SIZE0x100000
因此、如果认为 malloc start 是 DDR 中的、而 DDR 未被初始化、则会使 malloc 函数挂起。
然后、我更改了代码、如下所示、
#include #include #include 静态结构 SPI_SLAVE GLOBAL_PTR_EEPROM; void * SPI_DO _alloc_SLAVE (int offset、int size、unsigned int bus、 unsigned int cs) { struct SPI_Slave *从属设备; void * ptr; ptr =&global_ptr_eeprom; 。 剪切 .}
这似乎起作用了
当我看到 u-boot-spl.map 文件时、我看到指针位于 DDR 段中。
.bss.global_ptR_EEPROM 0x0000000080a004b4 0xc drivers/spi/libspi.o 0x0000000080a004c0 。 =对齐(0x4) 0x0000000080a004c0 __bss_end =。 将.text 段的地址设置为0x402f0400
现在它似乎可以工作,但 我不明白怎么做!!
因为现在还有一个变量位于 DDR 中,在 DDR 初始化之前它 是如何工作的?
我在这里错过了什么吗?
有什么建议?
此致、
Ankur