美文网首页uboot
uboot完全详细讲解(一)

uboot完全详细讲解(一)

作者: 我就是一个垃圾 | 来源:发表于2019-01-21 09:07 被阅读106次

一、uboot由来

uboot是一个德国人发起的开源项目,为什么要有uboot就不用多说了,用于启动过程。

①pc机的启动过程(BIOS)

②嵌入式设备的启动过程

这两个其实是相似的

uboot的核心部分几乎没怎么变化,越新的版本支持的开发板越多而已,对于一个老版本的芯片来说,新旧版本的uboot并没有差异。

uboot就是universal bootloader(通用的启动代码),通用的意思就是在各种地方都可以用。所以说uboot具有可移植性。

uboot具有可移植性并不是说uboot在哪个开发板都可以随便用,而是说uboot具有在源代码级别的移植能力,可以针对多个开发板进行移植,移植后就可以在这个开发板上使用了。

uboot的官方网站:http://www.denx.de/wiki/U-Boot/SourceCode

二、uboot的版本号

早期是这样的  uboot1.4.3

后来也就是直到现在是这样的uboot-2018.11

三、uboot的命令

可以用help命令查看所有的命令

①print(printenv)  打印所有的环境变量

②set(setenv)      设置环境变量

③save  保存环境变量

④ping

⑤tftp

⑥命令族:movi 

⑦命令中的特殊符号:例如单引号(‘’)参数中有(;)分好表示这是一个整体

⑧bootargs  bootcmd

四、开发板,Linux Windows互ping

一句话总结:用同一个网卡

Windows与开发板ping应该需要禁用掉Windows的有线网卡

五、uboot的体验(我用的九鼎的s5pv210)

配置

(1)uboot和linux kernel等复杂项目,都不能直接编译,都要先配置才能编译。

(2)uboot也要先配置,配置方法是:首先cd进入uboot源码的根目录,然后在根目录下执行:make x210_sd_config(就看Makefile中的那个命令来确定)。执行配置命令后,如果出现:Configuring for x210_sd board...

说明配置好了,如果不是这个是别的说明配置出错了。

编译得到uboot.bin

(1)编译之前一定要注意检查arm-linux-gcc对不对,检查份2步:

第一步:检查当前编译环境中有没有安装合适的arm-linux-gcc。我们装的是arm-2009q3,因为这个是三星官方、九鼎官方开发uboot时使用的。

第二步:检查当前目录下(uboot根目录)的Makefile中编译器的设置是否正确。在工程的总Makefile中会设置交叉编译工具链的路径和名字,必须确保这个

路径和名字和我们自己装的一致,否则编译会出错。

(2)确保了以上2点,即可进行编译。编译很简单,直接make即可。或者可以make -j4 (多线程编译,主机如果是多核心电脑,可以尝试多线程编译,会快一些)

六、uboot中各个文件夹的介绍

(1).gitignore。git工具的文件,git是一个版本管理工具(类似的还有个svn),这个文件和git有关,和uboot本身无关的,不用去管。

(2)arm_config.mk。后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。

(3)三个Changelog文件,修改记录文件,该文件记录了这个uboot项目的版本变迁以及每个版本较上个版本修改的记录。正式的项目都有这些记录的。可以直接忽略,主要是给维护uboot的人用的。

(4)config.mk。和arm_config.mk差不多性质。

(5)COPYING。版权声明,uboot本身是GPL许可证的。

(6)CREDITS。鸣谢,里面记录了对uboot有贡献的人,感谢目录。

(7)image_split。一个脚本,看说明是用来分割uboot.bin到BL1的,暂时用不到,先不管。

(8)MAINTAINERS。维护者,就是当前在参与维护uboot源码的社区工作者。

(9)MAKEALL。一个脚本,应该是帮助编译uboot的。

(10)Makefile。这个很重要,是uboot源代码的主Makefile,将来整个uboot被编译时就是用这个Makefile管理编译的,所以我们在下个课程中研究uboot配置编译过程时就要分析这个Makefile。

(11)mk。快速编译的脚本,其实就是先清理然后配置然后编译而已。

(12)mkconfig。这个很重要,是uboot配置阶段的主要配置脚本。uboot的可移植性很大程度就是靠这个配置脚本在维护的。我们在下个课程中研究uboot配置编译过程时就要分析这个配置脚本。

(13)mkmovi。暂时不去管他,一个脚本,和iNand/SD卡启动有关

(14)README。所有的软件都有README,一般拿到一个东西要先读README,这个东西其实就是个简单的使用说明书。

(15)rules.mk。这个文件是我们uboot的Makefile使用的规则,本身非常重要,但是我们不去分析他,不去看他。

(1)api. 硬件无关的功能函数的API。uboot移植时基本不用管,这些函数是uboot本身使用的。

(2)api_examples. API相关的测试事例代码。

(3)board。board是板的意思,板就是开发板。board文件夹下每一个文件都代表一个开发板,这个文件夹下面放的文件就是用来描述这一个开发板的信息的。board目录下有多少个文件夹,就表示当前这个uboot已经被移植到多少个开发板上了(当前的uboot支持多少个开发板)。

(4)common。common是普遍的普通的,这个文件夹下放的是一些与具体硬件无关的普遍适用的一些代码。譬如控制台实现、crc校验的。但是更多的主要是两类:

一类是cmd开头的,是用来实现uboot的命令系统的;另一类是env开头的,是用来实现环境变量的。

(5)cpu。这个目录是SoC相关的,里面存放的代码都是SoC相关初始化和控制代码(譬如CPU的、中断的、串口等SoC内部外设的,包括起始代码start.S也在这里)。里面很多子文件夹,每一个子文件夹就是一个SoC系列。

注意:这个问价是严格和硬件相关的,因此移植时也是要注意的。但是因为这个文件夹内都是SoC有关的,我们自己的开发板和三星的开发板虽然板子设计不同但是SoC都是同一个,因此实际移植时这个目录几乎不用动。

(6)disk。磁盘有关的,没研究过,没用过。

(7)doc。文档目录,里面存放了很多uboot相关文档,这些文档可以帮助我们理解uboot代码。但是因为是纯英文的,而且很杂乱,所以几乎没用。

(8)drivers。顾名思义,驱动。这里面放的就是从linux源代码中扣出来的原封不动的linux设备驱动,主要是开发板上必须用到的一些驱动,如网卡驱动、

Inand/SD卡、NandFlash等的驱动。要知道:uboot中的驱动其实就是linux中的驱动,uboot在一定程度上移植了linux的驱动给自己用。但是linux是操作系统

而uboot只是个裸机程序,因此这种移植会有不同,让我说:uboot中的驱动其实是linux中的驱动的一部分。

(9)examples。示例代码,没用过。

(10)fs。filesystem,文件系统。这个也是从linux源代码中移植过来的,用来管理Flash等资源。

(11)include。头文件目录。uboot和linux kernel在管理头文件时都采用了同一个思路,就是把所有的头文件全部集中存放在include目录下,而不是头文件跟着自己对应的c文件。所以在uboot中头文件包含时路径结构要在这里去找。

(12)lib_开头的一坨。(典型的lib_arm和lib_generic)架构相关的库文件。譬如lib_arm里面就是arm架构使用的一些库文件。lib_generic里是所有架构通用的库文件。这类文件夹中的内容移植时基本不用管。

(13)libfdt。设备树有关的。linux内核在3.4左右的版本的时候更改了启动传参的机制,改用设备树来进行启动传参,进行硬件信息的描述了。

(14)nand_spl。nand相关的,不讲。

(15)net。网络相关的代码,譬如uboot中的tftp nfs ping命令 都是在这里实现的。

(16)onenand开头的,是onenand相关的代码,是三星加的,标准uboot中应该是没有的。

(17)post。没关注过,不知道干嘛的。

(18)sd_fusing。这里面代码实现了烧录uboot镜像到SD卡的代码。后面要仔细研究的。

(19)tools。里面是一些工具类的代码。譬如mkimage。

七、sourceinsight使用

要使用SI看代码,首先要创建一个工程。菜单栏:Project->new project。在弹出的对话框中上面输入工程名字(自己起名字,随便写,但是一般要和工程相对应免得时间长了忘记了),下面输入工程文件存放的位置。

(2)工程项目文件和工程中管理的源代码文件目录可以不同,但是我一般习惯放在一起。放在:C:\winshare\s5pv210\uboot\uboot-jiuding\SI_Proj

点确定,进入new project setting,直接点ok进入下一步。

(3)到了向项目中添加文件的步骤。

在左侧选择uboot-jiuding这个目录,然后点右侧边栏的add tree即可添加,发现添加了1054个文件进去。

(4)本来应该已经结束了,但是有遗留问题。因为SI软件有个特点,它只能发现自己识别了的文件类型,对于它未识别的文件类型它就看不到。譬如start.S文件就未包含在内,因为SI默认不认识.S后缀的文件。

解决方案:第一种是自己配置;第二种是加载我提供的AstonSICFG。

(5)解决了4中的问题然后再次添加文件。菜单栏 Project->Add and Remove Project Files  再次浏览到uboot-jiuding目录下,再次add tree,发现添加了额外的19个文件。

2.3.6.3、解析工程文件

(1)SI工作原理就是预先把所有源代码中的所有符号全部解析存储到数据库中,然后等我们进行符号查找时,SI不是查文件而是查数据库帮我们索引符号,因此SI查找速度非常快。

(2)因此我们使用SI查阅源码前应该预先进行源码解析。在菜单栏Project->Syneronize Files,选中上面2个,然后确定。

相关文章

网友评论

    本文标题:uboot完全详细讲解(一)

    本文链接:https://www.haomeiwen.com/subject/mvyqjqtx.html