gd_t与bd_t详解:Linux移植必备的U-Boot初始化数据结构

需积分: 12 2 下载量 112 浏览量 更新于2024-09-12 收藏 124KB PDF 举报
在Linux内核的U-Boot启动加载器中,gd_t和bd_t是两个至关重要的数据结构,它们在系统的初始化过程中扮演着核心角色。这两个数据结构分别存储了不同类型的初始化参数和硬件信息。 1. **gd_t(全局数据结构)**: - 定义于`./include/asm-arm/global_data.h`,gd_t是全局数据结构,用于存放一些关键的系统初始化参数。它通常被放置在引导阶段可用的早期内存区域,例如DPRAM在MPC8xx/MPC82xx处理器上,或者数据缓存的一部分。gd_t的主要成员包括: - bd_t指针:指向bd_t数据结构,这个结构包含了关于开发板的具体信息,如处理器类型、内存配置等,这是后续代码中引用的关键信息来源。 - flags:指示标志位,用来标记系统的特定状态,比如设备是否已经完成初始化。 - baudrate:串行通信速率,这对于调试和日志交互至关重要。 - have_console:一个标志位,表明serial_init函数是否已成功初始化了控制台,这对于初始化过程中的交互至关重要。 - reloc_off:重定位偏移量,用于内存映射或重定位代码段。 2. **bd_t(板级信息结构)**: - 该数据结构定义于`./include/asm-arm/u-boot.h`,主要用于存储关于特定开发板的信息,如处理器类型、内存大小、中断向量地址等硬件特性。bd_t结构在系统启动初期提供了一种标准化的方式来传递这些硬件配置,使得初始化代码可以依据这些信息执行针对性的操作。 为了确保gd_t的有效使用,开发者需要在头文件中声明全局数据指针,通常通过DECLARE_GLOBAL_DATA_PTR宏,将gd_t实例化到寄存器R8中,这样可以在初始化代码的早期访问到这些数据。同时,开发者需要注意配置CFG_GBL_DATA_SIZE以确保gd_t及其相关数据能够正确地在内存中分配,并且足够小以适应早期引导阶段的限制。 gd_t和bd_t是U-Boot系统中必不可少的组成部分,它们的存在简化了初始化流程,允许代码在系统启动早期就获取必要的硬件信息并进行必要的设置。熟练理解和使用这两个数据结构对于移植和优化Linux在嵌入式平台上的性能至关重要。