我们都知道s3c2440是一个soc,内含cpu和各种控制器、片内的RAM,他的CPU是arm920t。
我们先来分析一下uboot原码的各个目录
1.uboot目录分析
board:board里存放的是支持各个开发板的文件,包括链接脚本
common: common目录中存放的是uboot的各种命令
cpu:cpu目录存放的是uboot支持的各种cpu,其中包括各种cpu的启动文件
disk:存放分区的相关文件
doc:存放各种文档
drivers:存放各种驱动文件,用户可以裁剪一些不相关的驱动,只需要保留启动内核的功能、uart、等基础功能就可以了
dtt:数字温度测量器或者传感器的驱动
examples:一些独立运行的应用程序的例子
fs:支持文件系统的文件,u-boot现在支持cramfs、fat、fdos、jffs2、yaffs和registerfs
include:头文件,还有对各种硬件平台支持的会变文件,系统的配置文件和对文件系统支持的文件。
net:与网络有关的代码,BOOTP协议、TFTP协议RARP协议和NFS文件系统的实现。lib_ppc:存放对PowerPC体系结构通用的文件,主要用于实现PowerPC平台通用的函数,与PowerPC体系结构相关的代码,对于arm平台来说此目录无需理会。
lib_i386:存放对X86体系结构通用的文件,主要用于实现X86平台通用的函数,与PowerPc体系结构相关的代码,对于arm平台来说此目录无需理会。
lib_arm:存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数,与ARM体系结构相关的代码。
lib_generic:通用的多功能函数实现,包括一些字符串处理、crc校验等功能。post:上电自检。
rtc: 实时时钟驱动。
tools:创建S-Record格式文件和U-BOOT images的工具
2.uboot的两个阶段
第一阶段:硬件的初始化,主要代码是汇编
(1)设置cpu为管理模式
(2)关闭看门狗
(3)设置中断向量表
(4)设置cpu的时钟
(5)设置栈
(6)把代码从flash拷贝到SDRAM实现重定位
(7)清除bss段
第二阶段:第二阶段最重要的工作就是启动内核,把内核读取到SDRAM中,这部分代码都是.c文件
(1)检测系统内存映射
(2)将内核从Flash读取到RAM中
(3)为内核设置启动参数
(4)调用内核