前言

本人毕业后一直从事嵌入式的移植和开发工作,开始时对嵌入式系统一无所知,见到汇编命令就抱头鼠窜。直到现在,应该说对嵌入式系统的移植略有所得,一直以来,都有一种冲动把自己的学习体会告诉大家,节省大家的学习时间,避免大家学习过程走弯路。因此我把自己的心得体会记下来并花了一点时间进行整理,其中参考了其中不少网上的文章,再此一并感谢。 本来是想把自己开发的经验写成一本书供大家参考使用的,连书名也想好了(嵌入式Linux移植教程- 基于ARM和Powerpc的BSP包开发),并且还写了前言
和大纲。但是后来由于个人的原因,没有勇气和时间坚持写完,因此又成了本人的另一个"烂尾楼"工程。 因此,此处,想把其中已经完成的一部分公布出来,因此你可以看到其中很多的章节的字样,不想太花时间去更改了。希望对大家有所帮助,使自己半年多来的心血不至于白费。 你可以自由的把这些文章共享和转发,但若要在网上公布请注明出处。如果用于商业目的,或用于出版,请和我联系。

Uboot相关部分

Uboot源码分析

该部分首先对Uboot的源码的结构进行剖析, 根据Uboot的规则你可以清晰的了解那些是目标板相关的代码(/board目录),那些是CPU相关的代码, 头文件, 公共代码, 网络传输代码和相关工具(主要是mkimage)。因此,当我们拿到uboot源码时,我们才能有的放矢,而不会无从下手。

UBoot配置和编译

因为Uboot涉及160多种目标板和多种CPU,如何生成针对具体CPU的目标代码?配置就是实现这个目的,通过配置你可以指定具体的CPU和目标板,让编译程序在编译时能编译指定的文件。为了描述配置过程,这里我们取一个现存的目标板做分析,比如OMAP1610目标板。

UBoot启动过程分析

Uboot具有两种启动位置,既可以在Flash上启动也可以在内存中启动。但一般常见的冷启动位置是Uboot在Flash上启动,热启动可在内存中启动。Uboot的启动实际上是进行一些硬件的初始化,为加载内核做准备。 初始化完成后会进入main_loop()函数,比如在预留一定的延时后,将执行默认的启动命令序列(即"bootcmd"中的相关设置),等待用户的干预。

UBoot启动命令

Uboot运行稳定后,可以用它的内部命令来查看目标系统的信息,设置环境变量等。U-Boot在硬件初始化完成后将进入main_loop()函数,main_loop()函数将进入一个无限循环,当用户输入命令后,首先将调用run_command()函数进行处理。 在run_command()函数中,将调用find_cmd()函数把用户从终端输入的命令进行比较,当find_cmd()返回值不为0时证明系统支持用户输入的命令,在对命令进行检验后最后将调用命令处理函数。 此处列举了几乎所有的最重要的命令,包括信息查询命令,内存控制命令,Flash操作命令,运行控制命令,数据下载命令,环境变量设置命令等,并配以非常详细的示范,因此,通过本章的学习,你可以轻松玩转uboot命令。

内核相关笔记

本网页浏览次数: