
UBoot第二阶段解析:初始化与传参机制
下载需积分: 0 | 6KB |
更新于2024-08-05
| 89 浏览量 | 举报
收藏
"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内核的启动打下基础。这一阶段的工作对于整个系统的稳定运行至关重要。
相关推荐





















DayBreak923
- 粉丝: 116
最新资源
- 易语言实现微信图片数据解密方法详解
- 基于网络摄像头手势控制的交互地图应用
- 深度学习模型在ArcGIS中的应用及Python栅格函数教程
- 易语言实现取网卡信息的方法详解
- PHP5容器部署示例:Nginx集成与Octohost使用
- Java基础笔试题:简易Battlesnake AI的实现与部署
- Java运行时代理:实时获取与更新依赖项解决方案
- 通信工程领域的Bingo项目解析与实践
- 实现Manduca sexta生物嗅觉模型的Matlab代码分析
- 使用Docker实现Web应用热部署的实践指南
- 70-90年代摇滚精选:终极播放列表贡献指南
- Android实现Steam遥控器远程控制的简单应用
- 易语言教程:如何激活前一个程序窗口
- WebRTC 实现的 p2peers 网络聊天:音频视频功能
- 基于Django的校园评分门户系统开发
- CWRU Delta Chi章节采用So Simple主题Jekyll博客
- 开源MD5解密插件完整版:易语言开发与网络应用
- Angular.js集成ARK API的SDK工具包
- Kafka 0.8.3客户端测试与apachestorm验证
- 易语言实现防脱壳技术模块源码分析
- Matlab与R实现二分随机块模型的指南
- 2015年SpaceApps挑战赛:为青少年打造互动移动体验
- 构建银行间区块链转账解决方案的研讨会
- 特威蒂鸟计划:C++语言实现的图片上传系统