UBoot第二阶段解析:初始化与传参机制
需积分: 0 24 浏览量
更新于2024-08-05
收藏 6KB TXT 举报
"uboot第二阶段涉及的关键点包括全局数据结构gd_t的定义、DM9000网卡的预初始化、启动参数的传递、环境变量的初始化与重定位以及串口初始化。"
在UBoot的第二阶段,系统进一步进行硬件初始化和设置,以便为Linux内核的启动做好准备。以下是对各个知识点的详细解释:
1. **gd_t宏定义**:
DECLARE_GLOBAL_DATA_PTR 宏定义了一个全局数据指针gd_t,它是一个volatile类型的指针,存储在寄存器r8中。gd_t结构体包含了关于系统状态和配置的重要信息,如内存配置、设备状态等,是UBoot与硬件交互的核心数据结构。
2. **DM9000网卡预初始化**:
DM9000_pre_init 是针对DM9000网络控制器的初始化函数,它主要负责配置GPIO和端口设置,这些工作是硬件相关的,确保网卡能正确地与外部总线通信。网卡的驱动通常被假设为正确无误,因此在移植时不需要改动,重点在于这个基本的初始化过程。
3. **启动参数的传递**:
gd->bd->bi_boot_params 指向UBoot传递给Linux内核的启动参数的内存地址。UBoot将 bootargs 字符串准备好并存放在特定地址(bi_boot_params),然后通过寄存器r0、r1、r2传递给内核,其中一个寄存器包含bi_boot_params值。内核启动后,通过读取寄存器找到这些参数在内存的位置。
4. **环境变量初始化与重定位**:
env_init 函数是环境变量的初步初始化,检查是否存在可用的环境变量。然而,在env_relocate函数被start_armboot调用之前,环境变量仍存储在SD卡上,不可直接使用。重定位后,环境变量被复制到DDR内存中,此时才能从DDR中访问和修改环境变量。
5. **串口初始化**:
serial_init 函数负责初始化串口通信。虽然在start.S中通过lowlevel_init.S已经进行了初步的串口设置,但这里的serial_init可能是为了进行更高级别的配置或适应特定平台的需求。UBoot中有多个serial_init实现,具体使用哪个取决于CPU或平台类型。在这个例子中,使用的是uboot/cpu/s5pc11x/serial.c中的实现。
以上五个方面构成了UBoot第二阶段的主要任务,它们确保硬件的正确配置,启动参数的有效传递,并为Linux内核的启动打下基础。这一阶段的工作对于整个系统的稳定运行至关重要。
2011-09-05 上传
2016-06-24 上传
2022-09-22 上传
2015-12-15 上传
2014-11-30 上传
2014-06-28 上传
2021-11-09 上传
261 浏览量
2019-10-31 上传
DayBreak923
- 粉丝: 99
- 资源: 3
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍