在一些 uboot 文件中,我看到了这个声明:
DECLARE_GLOBAL_DATA_PTR
就在包含的下方....有人知道这是什么/为什么这样做吗?
谢谢,vj
在一些 uboot 文件中,我看到了这个声明:
DECLARE_GLOBAL_DATA_PTR
就在包含的下方....有人知道这是什么/为什么这样做吗?
谢谢,vj
这是一个宏声明,将保留资源(例如,CPU 寄存器)以指向 struct global_data。对于 ARM,宏定义在 arch/arm/include/asm/global_data.h 中,并保留 CPU 寄存器 r8。
请参阅自述文件l。4602+ 描述了早期引导中的资源限制。全局数据指针可以轻松访问在此引导阶段最有用的数据元素。
全球意味着该数据普遍可用。C 源文件在任何编译代码之前使用此声明,以告诉编译器不要将该寄存器(例如 ARM CPU r8)用于其他任何内容。
在引导结束时,例如在 common/main.c main_loop() 中,我看到 DECLARE_GLOBAL_DATA_PTR 仅在少数特定配置中使用。因此,也许由控制台命令驱动的其他代码(例如)不需要保留该资源。在 C 源文件中,看起来 25% 使用它,75% 不使用它。
~/u-boot-2012.10$ find . -name "*.c" | wc -l
2824
~/u-boot-2012.10$ find . -name "*.c" | xargs grep DECLARE_GLOBAL_DATA_PTR | wc -l
745