memory - u-boot 占用多少 DRAM?

标签 memory embedded-linux ram u-boot

我想在 u-boot 中执行一些操作(加载一个小固件)。
有谁知道u-boot在DRAM的开头和结尾占用了多少DRAM,
这样我就可以在 DRAM 未被 u-boot 占用的未占用区域加载我的固件?

最佳答案

U-Boot 是可配置的,因此答案取决于您的具体构建。 配置到 U-Boot 中的命令和功能将决定其实际大小。通常,U-Boot 被构建为驻留在主内存的上部/执行,而低内存的其余部分可用于任何用途。

在主板的配置文件中,CONFIG_SYS_TEXT_BASE 的定义设置 U-Boot 的起始地址。 (旧版本的 U-Boot 有不同的方法来指定此起始地址符号。)

检查生成的 System.map 文件(与 u-boot.bin 可执行文件位于同一目录中)以查找链接器分配给每个入口点的地址。

在你的开发板的配置文件中,还有类似的内容:

#define CONFIG_SYS_SDRAM_BASE       ATMEL_BASE_CS6
#define CONFIG_SYS_SDRAM_SIZE       0x08000000

定义主存的物理地址范围。

U-Boot 将在 SDRAM 或 BASE+SIZE 末尾启动其堆栈。 所以CONFIG_SYS_TEXT_BASE+(u-boot.bin的大小)和SDRAM末尾之间的区域是可用的堆栈区域。

U-Boot 还将使用 CONFIG_SYS_TEXT_BASE 下面的内存作为其 malloc() 池。该区域的大小由 CONFIG_SYS_MALLOC_LEN 定义。

所以CONFIG_SYS_SDRAM_BASE
之间的内存 CONFIG_SYS_TEXT_BASE-CONFIG_SYS_MALLOC_LEN 应该可用。

附录

上述注释适用于在主内存(即 DRAM)中加载和执行的 U-Boot。
有些系统在 ROM 或 NOR Flash 中执行 U-Boot,然后 U-Boot 会将自身重新定位到 RAM。一些(旧的?)文档是 here .

关于memory - u-boot 占用多少 DRAM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20208171/

相关文章:

c - 这是内存泄漏,因为内存是在堆栈上分配的吗?

linux - PhyCORE-AM335x-PD13.1.2 Linux 3.2 上的上次重启检测

c++ - qdbusxml2cpp 无法正常工作

c - 在运行时检测堆栈区域不与 RAM 区域重叠的方法

android - 膨胀 View 导致 RAM 使用增加 40mb

c++ - vector<unique_ptr<T>> 在 ubuntu 中占用的内存是 vector<T> 的三倍以上

java - 在 Java 中创建一个非常非常大的 map

c++ - 在程序本身捕获openCV程序的内存使用

c++ - 检测 USB 鼠标。嵌入式 Linux 上的 Qt

iOS ARC ram 只会长大