前面或多或少的写过一点关于Uboot的东西,当然内容基本上都是学习笔记,学习前辈们的博客和书籍,但是整的很乱,不成体系。或者内容都是很简要的,总感觉仿佛对UBoot知道了点什么,但是又什么都不知道。不爽。
于是这里找到了一本书,好好整一下这个UBoot。
这次对于UBoot的学习就开始慢下脚步,好好找找问题所在。不要着急,一点点学。
这个系列的内容来自老师的《深入理解BootLoader》
U-Boot的全称为Universal Boot Loader,是遵循GPL条款的开放源码项目,从FADSROM、8xxROM、PPCBOOT逐步发展演化而来,其源码目录、编译形式与Linux内核很相似。
事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,从U-Boot源码的注释中能体会到这一点。(暂时还无体会,两个都不熟,哈哈哈)
但是U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持OpenBSD、NetBSD、FreeBSD、4.4BSD、Linux、SVR4、Esix、Solaris、Irix、SCO、Dell、NCR、VxWorks、LynxOS、pSOS、QNX、RTEMS、ARTOS等操作系统。这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。
就目前来看,U-Boot对PowerPC系列处理器的支持最为丰富,对Linux的支持最完善。其他系列的处理器和操作系统基本是在2002年11月PPCBOOT改名为U-Boot后逐步扩充的。从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人——德国DE **NX软件工程中心Wolfgang Denk(以下简称W.D)**精湛的专业水平和坚持不懈的努力。当前,U-Boot项目正在他的领军之下,众多有志于开放源码BootLoader移植工作的嵌入式开发人员正如火如荼地开展着各个不同系列嵌入式处理器的移植工作,以支持更多的嵌入式操作系统的装载与引导。(直接就是一个瑞斯拜)
除了U-Boot,还有些比较流行的BootLoader,比如LILO、GRUB、Blob、vivi等。
这么多为什么选择了U-Boot的理由:
U-Boot的目录大致分为三类。
因为U-Boot是一个完整成熟的嵌入式BootLoader框架,我们更多的是进行配置和移植工作,所以主要来分析一下第一类目录。
该目录有很多子目录,都是按照体系结构进行划分的,比如arm、avr32、m68k、mips、openrisc、powerpc、x86这些常见的体系架构。
因为本书以ARM体系为基础,所以我们分析arm目录下的结构,对于arm目录,我们主要分析cpu目录和lib目录。
cpu目录根据arm的版本号进行划分,如arm11、arm720t、armv7等。例如在armv7版本的目录下,又有一些通用的代码和与处理器相关的代码,其中与处理器相关的代码会放在对应的子目录下面。
lib目录则放置arm体系结构下通用的汇编代码和C代码,比如处理协处理器的cache-cp15.c,处理中断的interrupts.c,处理重定位的relocate.S等。
里面放置各种目标板的相关代码。比如sunxi目录下有板级dram的初始化代码等。
里面放置了公用的头文件,其中configs子目录下放置有与目标板相关的头文件。比如sun7i.h和sunxi-common.h,里面包含着许多与板级配置相关的宏定义。
因为在所有的开源代码中,一般都会有一个examples目录,其下放置一些简单的实例,相当于一个入门向导,帮助我们更好地理解这个开源项目。学习软件开发的时候,我们经常用hello world作为示例,U-Boot也写了一个hello world作为示例,该示例相当于一个独立的程序,是由BootLoader引导执行的。有兴趣的读者可以试着运行一下这个hello world,读者也可以在网上阅读一下黄敬群的《深入浅出Hello World》,相信你对hello world会有不一样的理解,对BootLoader、计算机系统也会有更深入的理解。(这本书记本本上了)
下一章看看UBoot的配置编译