前几天看了ucos的源码,后面开始学习uboot的源码
网上看到一些uboot的文章,当然都是牛人写出来的,不过基本版本有点老,我这越是初学者,越想学习新版本的代码
我下载的是u-boot-2014.10.tar.bz2,下载地址为http://ftp.denx.de/pub/u-boot/
解压缩,这个压缩包大小为不到10M,解压缩后有55.6M,这么多代码,看完是要死人的
进入后看到一些文件和文件夹,第一个文件夹api,根据README来看,这是一个独立于机器和架构的外部应用程序接口,不过uboot只是一个bootloader,估计也没啥外部应用程序,所以这个目录应该可以删除
第二个文件夹arch,这个就是不同的cpu架构,我的开发板是在尚观时候拿的s3c6410,当然是arm了,所以这层目录删除除Kconfig文件和arm目录外的其他所有文件夹
每次删文件夹都有一种很爽的感觉,就好像老师说这些题不用做了一样爽,这一下就删除了9M多的文件
剩下arm文件夹和Kconfig文件,进入arm文件夹,先进入第一个文件夹cpu,看到各种arm的型号,我的是s3c6410,文档上说了,是ARM1176JZF--S,所以删除除arm1176外的所有文件夹,又删除了2M多
下面开始分析源码,先找到分析的起点才能找到头绪,先看u-boot.lds,这是一个链接文件,链接文件我也不是很熟,边看边学,先看第一个关键点
ENTRY(_start)
这里就告诉我们,入口是_start,也就相当于应用程序的main,我看之前的文章里说这个_start都是在start.S文件中的, 可惜arch\arm\cpu\arm1176\start.S文件中没有_start,经过搜索知道,_start在arch\arm\lib\vectors.S文件中定义,刚开头也是定义一些异常的处理,