u-boot第一阶段分析(一)

Start.S的引入


注:本次分析的u-boot是九鼎官方的u-boot代码
下载地址:链接:http://pan.baidu.com/s/1gfpDZqj 密码:7cqe

一 从uboot中找到整个项目的入口
1.从u-boot.lds中找到程序的入口
整个程序的入口取决于链接脚本u-boot.lds中ENTRY声明的地方,为ENTRY(_start)。
所以_start 符号所在的文件就是整个程序的起始文件, _start所在处的代码就是整个程序的起始代码。

2.用Source Insight工具进行查找
(1)当前状况:我们知道在uboot中的1000多个文件中有一个符号叫_start,但是我们不知道这个符号在哪个文件中。这种情况下要查找一个符号在所有项目中文件中的引用,要使用SourceInsight的搜索功能。
(2)查找方法:
选择工具栏中的R选项,如图所示:
这里写图片描述

然后点击进入,输入_start,并选择整个项目查找,便可以找到。

3.start.S中的头文件

#include <config.h>
#include <version.h>
#if defined(CONFIG_ENABLE_MMU)
#include <asm/proc/domain.h>
#endif
#include <regs.h>

#ifndef CONFIG_ENABLE_MMU
#ifndef CFG_PHY_UBOOT_BASE
#define CFG_PHY_UBOOT_BASE	CFG_UBOOT_BASE
#endif
#endif

(1)#include <config.h>
这个文件不是源码中本身存在的文件,而是在mkconfig脚本中配置生成的,内容是#include <configs/x210_sd.h>
(2)#inlcude <version.h>
从include文件夹中找到这个头文件,打开后显示:

#ifndef	__VERSION_H__
#define	__VERSION_H__

#ifndef DO_DEPS_ONLY
#include "version_autogenerated.h"
#endif

#endif	/* __VERSION_H__ */

这里的#include "version_autogenerated.h"是编译过程中生成的,里面的内容只有一行: #define U_BOOT_VERSION "U-Boot 1.3.4"
这个是uboot的版本号,在uboot启动时,我们看到的版本号信息就是从这来的。
(3)#include <asm/proc/domain.h>
asm目录不是uboot中的原生目录,uboot中本来是没有这个目录的。asm目录是配置时创建的一个符号链接,实际指向的是就是asm-arm,实际文件是:
include/asm-arm/proc-armv/domain.h
这样做的原因:
之所以start.S不直接包含asm-arm/proc-armv/domain.h,而要用asm/proc/domain.h主要是为了可移植性。因为如果直接包含,则start.S文件和CPU架构(和硬件)有关了,可移植性就差了。譬如我要把uboot移植到mips架构下,则start.S源代码中所有的头文件包含全部要修改。我们用了符号链接之后,则start.S中源代码不用改,只需要在具体的硬件移植时配置不同,创建的符号链接指向的不同,则可以具有可移植性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值