嵌入式学习之u-boot学习笔记(1)

2019-07-13 09:19发布

嵌入式学习之u-boot学习笔记(1)

    接触嵌入式Linux也有一些日子了,白手起家啥都不会。一头雾水,认识的很多朋友都建议 参加嵌入式培训班,但对我还真的不现实。原因有二:     一、我们这边学嵌入式的人比较少,小城市庙小了些。所以也没有任何培训班的消息     二、听网友们说报个嵌入式班至少得花掉几千大洋,有些上万。对我这样的穷学生还真    有些困难,投资也得看本钱的。     所以呢,没办法发扬艰苦奋斗的精神,努力自学了。几千大洋出不去,花多一点钱买个好的开发板还是行的。不过还好有视频,当人视频不能全部很细的讲解,只是很大概的的讲讲很多的东西还是得自己慢慢摸索了。     还好参加飞思卡尔大赛给自己单片机的底子加厚了些,刚开始学arm还是老套路,先裸机开始。看了好多天的英文文档总算有些眉目了,开始嵌入式软件的征途,这不一来就遇到拦路虎了:u-boot。好了,废话少说了,遇山推山,见虎打虎。       首先总得对u-boot有个总体感受,要知道他是什么。其实和别的介绍u-boot的文章一样,总得先知道u-boot是什么东西。u-boot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, u-boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。u-boot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。 说白了,u-boot就是一小段程序,一小段用来做准备工作的程序,他为下面的操作系统打扫好房子,布置好工作台好给操作系统工作。u-boot分两个阶段,第一个阶段是汇编代码,因为是对基础硬件的初始化所以用汇编会效率高些。这个阶段他完成下面几个任务:       1.设置CPU的模式为SVC模式       2.关闭看门狗       3.禁掉所有中断       4.设置CPU的频率       5.把自己拷贝到RAM       6.配置内存区控制寄存器       7.配置的栈空间       8.进入C代码部分     阶段二是C语言代码,今日main函数,然后进入主UBOOT命令行,进入命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。当用户输入启动linux的命令的时候,u-boot会将 kernel 映像(zImage)和从 nand flash 上读到 RAM 空间中,为内核设置启动参数,调用内核,从而启动linux。       好了,上面总体介绍了u-boot的作用,及其工作顺序。那么u-boot里面到底包含了那些东呢,毕竟要知其然还得知其所以然。这样我们先从宏观上有一个总体感受要全面了解就必须深入其骨髓由细胞到组织由组织到器官由器官到总体的分析。那么我们首先看下u-boot文件包含上面东西,不管是哪个版本的u-boot其文件组织都是很有序的,其实不管什么东西有序的有规律的才是真正宝贵的真正有用的,大家都知道熵指的是体系的混乱的程度,事物都是从有序变化到无序也就是熵越来越大,而人类利用的很多东西都是利用事物的有效状态,只是当我们利用完了之后事物就回归到无序了,很简单的道理,你屋子要仅仅有条你得花比较多的时间去打理但是你要想乱七八糟那很简单给你5分钟就能完成。其实混沌理论研究的也是偶然中的必然规律也就是有序的东西。没有有序就没有任何研究的必要。扯远了,我只是想说有序是很宝贵的资源是减少麻烦增加可维护性的有效手段。u-boot的文件组织很清楚明了一般有以下几个文件夹(还有一些相关文件)组成:       1.board 和一些已有开发板有关的文件. 每一个开发板都以一个子目录出现在当前目录中,比如说:SMDK2410,子目录中存放与开发板相关的配置文件.       2.cpu 与特定CPU架构相关目录,每一款uboot下支持的CPU在该目录下对应一个子目录,比如有子目录arm920t等。       3.drivers uboot支持的设备驱动程序都放在该目录,比如各种网卡、支持CFI的Flash、串口和USB等。       4.common 实现uboot命令行下支持的命令,每一条命令都对应一个文件。例如go命令对应就是cmd_boot.c       5.disk 对磁盘的支持       6.doc 文档目录。uboot有非常完善的文档,推荐大家参考阅读。       7.fs 支持的文件系统,uboot现在支持cramfs、fat、fdos、jffs2和registerfs。       8.include uboot使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。该目录下configs目录有与开发板相关的配置头文件,如smdk2410.h。该目录下的asm目录有与CPU体系结构相关的头文件,asm对应的是asmarm.       9.lib_xxx 与体系结构相关的库文件。如与ARM相关的库放在lib_arm中。       10.net 与网络协议栈相关的代码,BOOTP协议、TFTP协议、RARP协议和NFS文件系统的实现。       11.tools uboot的工具,如:mkimage, crc等等。                                                                                                                                     (注:上面的文字是我自己的笔记以供备忘,笔记的作用当然就是笔记的作用既然是笔记当然就不能把他当做教材,发到网上可以和大家交流一下,欢迎大家评论讨论!!!2010-08-11)