UBoot第二阶段解析:初始化与传参机制
需积分: 0 199 浏览量
更新于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 上传
2023-11-30 上传
2023-05-01 上传
2023-06-09 上传
2023-04-24 上传
2023-06-06 上传
2023-10-13 上传
2023-05-26 上传
![](https://profile-avatar.csdnimg.cn/d381d6c4d1084f9f800118607fa2b54c_weixin_52372485.jpg!1)
DayBreak923
- 粉丝: 99
- 资源: 3
最新资源
- Hadoop生态系统与MapReduce详解
- MDS系列三相整流桥模块技术规格与特性
- MFC编程:指针与句柄获取全面解析
- LM06:多模4G高速数据模块,支持GSM至TD-LTE
- 使用Gradle与Nexus构建私有仓库
- JAVA编程规范指南:命名规则与文件样式
- EMC VNX5500 存储系统日常维护指南
- 大数据驱动的互联网用户体验深度管理策略
- 改进型Booth算法:32位浮点阵列乘法器的高速设计与算法比较
- H3CNE网络认证重点知识整理
- Linux环境下MongoDB的详细安装教程
- 压缩文法的等价变换与多余规则删除
- BRMS入门指南:JBOSS安装与基础操作详解
- Win7环境下Android开发环境配置全攻略
- SHT10 C语言程序与LCD1602显示实例及精度校准
- 反垃圾邮件技术:现状与前景