TQ2440 学习笔记—— 31、移植U-Boot【U-Boot 的启动过程第二阶段源码分析】

本文详细解析了U-Boot在S3C2440上的第二阶段启动过程,包括硬件初始化、系统时钟设置、串口初始化、内存映射检测以及命令格式和内核启动参数的设置。主要关注于board_init和serial_init函数的实现,以及如何向内核传递参数。
摘要由CSDN通过智能技术生成

(韦东山——嵌入式Linux 应用开发完全手册)

二、U-Boot第二阶段代码分析

U-Boot 第二阶段流程图

移植U-Boot 的主要工作在于对硬件的初始化、驱动,所以下面的重点放在硬件的操作上。

(1)初始化本阶段要使用到的硬件设备

最主要的是设置系统时钟、初始化串口,只要这两个设置好了就可以从串口看到打印信息。

board_init 函数设置MPLL、改变系统时钟,它是开发板相关的函数,在board/EmbedSky/EmbedSky.c 中实现。

board_init 函数还保存了机器类型ID,这将在调用内核时传给内核代码如下:


串口的初始化函数主要是 serial_init,它设置 UART 控制器,是CPU 相关的函数,在cpu\arm920t\s3c24x0\serial.c 中实现。


(2)检测系统内存映射

对于特定的开发板,其内存的分布是明确的,所以可以直接设置。board/EmbedSky/EmbedSky.c 中的dram_init 函数指定了本开发板的内存起始地址为0x30000000,大小为4000000(在对应的头文件中可找到)。代码如下:


这些设置的参数,将在后面向内核传递参数时用到。


(3)U-Boot 命令的格式

U-Boot 中的每个命令都通过U_BOOT_CMD 宏来定义,格式如下:


U_BOOT_CMD 在 include/command.h 中定义,如下图:


Struct_Section 也是 在 include/command.h 中定义,如下图:



(4)为内核设置启动参数

U-Boot 也是通过标记列表向内核传递参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值