U-Boot初识

本文详细介绍了X210开发板上U-Boot的配置、编译过程,强调了从官方源码获取、在Linux环境下操作的重要性,并分析了uboot源码目录结构,探讨了SourceInsight在代码分析中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

X210官方uboot配置编译实战

X210官方uboot配置编译实践
(1)源头的源代码是uboot官网下载的。这个下载的源代码可能没有你当前使用的开发板的移植,甚至找不到当前开发板使用的Soc对应的移植版本
(2)Soc厂商在退出一款Soc之后,厂商的工程师回去uboot官网下载一个uboot,根据自己的Soc芯片厂商出的开发板就叫S5PV210芯片厂商出的开发板就叫SMDKV210,所以三星的工程师移植的uboot是根据他们自己的SMDKV210开发板移植的。
(3)具体的开发板供应商(譬如X210的生产商深圳九鼎科技)首先购买三星SMDKV210开发板,然后进行剪裁(把一些无用的接口功能剪裁去,配置降低,某些配置会被替换)
总结:uboot可以有3中获取途径:uboot官方,Soc官方,具体开发板的官方
在linux源生目录下配置编译
(1)X210移植过得uboot在开发板得到BSP中
(2)BSP就是board support package(板级支持包,一般由开发板供应商提供),里面的内容就是这个开发板的所有相关的源代码,文档,教程
(3)将整个BSP打包文件弄到linux的源生目录下去解压分析,不要再windows的共享文件夹中解压打开。(除非你的代码只在windows下去分析而不去编译,如果你想编译工程就一定不要再windows共享文件夹下,会出错)两个原因:一个是关于符号链接的事情,一个是文件的大小写的问题,windows和linux中有着细微的差距。
(4)tar -jxvf filename 解压文件
配置
(1)uboot和linux kernel等复杂项目,都不能直接编译,都要先配置才能编译
(2)uboot也要先配置,配置的方法是:首先cd进入uboot源码的根目录,然后在根目录下执行:make x210_sd_config。执行配置命令后,如果出现:Configuring for x210_sd board…说明配置完成,如果不是说明配置错误
编译得到uboot.bin
(1)编译之前一定要检查arm-linux-gcc交叉编译是否正确。
第一步:检查当前编译环境中有没有安装合适的arm-linux-gcc。我们装的是arm-2009q3,因为这个是三星官方,九鼎开发uboot使用的。
第二步:检查当前目录下(uboot根目录)的Makefile中编译器的设置是否正确。在工程的总Makefile中会设置交叉编译工具链的路径和名字,必须确保这个路径和名字和我们装的一致,否则编译会出错。
(2)确保了上面两点:即可进行编译。直接make,或者多线程编译(make -j4(后面的4是指的电脑的线程数))

uboot源码目录分析

九鼎官方和三星官方的对比(uboot)
(1)九鼎在以三星的uboot为原材料进行移植时,把三星版本的uboot中很多不比要的文件夹,文件给删除掉了。这个删除把很多完全用不到的文件清除出去,减少了整体的文件数量,便于工作。
各文件介绍
(1)。gitignore。git工具的文件,git是一个版本管理工具(类似的还有个svn),这个文件和git有关,和uboot本身无关的,无须管
(2)arm_config.mk。后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。
(3)三个Changelog文件修改记录文件,该文件记录了这个uboot项目的版本变迁以及每个版本修改的记录。正式的项目都有记录。
(4)config.mk和arm_config.mk差不多性质
(5)COPYING。版权声明,uboot本身是CPL许可证的。
(6)CREDITS。鸣谢,记录对uboot有贡献的人。
(7)imag_split。一个脚本,是用来分割uboot,bin到BL1的,暂时用不到,先不管
(8)MAINTAINERS,维护者
(9)MAKEALL一个脚本,帮助编译uboot的。
(10)Makefile。很重要,是uboot源代码的主Makefile,将来整个uboot被编译时就是用这个Makefile
管理编译的。
(11)mk。快速编译脚本,其实就是先清理然后再编译
(12)mkconfig。这个很重要,是uboot配置阶段的主要配置脚本。uboot的可移植性很大程度就是靠这个配置脚本在维护
(13)mkmovi。一个和iNand/SD卡启动有关
(14)RENDME。这个是一个简单的使用说明书
(15)rules.mk。这个文件是我们uboot的Makefile使用的规则,本身非常重要,但是不分析
总结:上面的文件主要最重要的Makefile和mkconfig,一个是配置,一个是使用
uboot文件夹分析
(1)api。硬件无关的功能函数的API。uboot移植时基本不用管,这些函数是uboot本身使用的。
(2)api_examples。API相关的测试事例代码
(3)board。board是板的意思,板就是开发板。board文件夹下每一个文件都代表一个开发板,这个文件夹下面放的文件就是用来描述这个开发板的信息的,board目录下有多少个文件夹,就表示当前uboot被移植到多少个开发板了(当前的uboot支持多少个开发板)
问题:board下有这么多文件夹,如何确定?(想想当初的配置)
开发板越来越多,board目录下文件夹越来越多不方便管控。于是乎uboot就新增了一种机制,可以在board目录下不直接放开发版目录,而是在board下放厂家目录(wendor目录,以具体芯片厂商名字命名),然后将这个IC厂商的所有芯片开发板都丢到wendor目录下面。多了这层目录会影响配置阶段,在uboot的配置阶段要注意配置时的路径深度和实际存放要对应,不然配置编译时找不到文件编译就会失败。注意一个细节就是历史原因造成的兼容性麻烦。最开始时board目录下就是开发板的名字,后来才改成厂商的名字。但是因为要向前兼容,同一厂商原来还是外面的开发板并没有挪移到厂商目录下。这样就造成了后来的人不知道原委很奇怪

注意:uboot的配置阶段(其实就是在根目录下面的mkconfig脚本和Makefile中配置有关的部分)主要解决的问题就是在可移植性领域能够帮助我们确定具体的文件夹的路径,然后编译时可以找到应该找到的文件,才能编译成功。因此board目录下的不同会造成配置时的不同。如果移植时没有注意就会导致失败。
(4)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中移植过来
(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命令都是在这里实现的。想要学习网络编程方面的可以查看里面的相关代码,里面都是linux的阉割版本。
(16)onenand开头的。是onenand相关的代码,是三星加的,标准uboot中应该是没有的
(17)post。自行查找
(18)sd_fusing。这里面是实现了uboot烧录uboot镜像到SD卡的代码。
(19)tools。工具相关的
总结:文件夹中比较重要的:board,common,cpu,drivers,include,lib_arm,lib_generic,sd_fusing

SourceInsight的基本使用

为什么要使用SourceInsight
(1)对于一个真正的一个项目,往往有几百个甚至上万个C文件,h文件,代码量非常大,代码之间关联非常复杂,就带来一个问题,代码的分析,阅读很难。所以出来了SourceInsight
建立工程及添加文件
(1)要使用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后缀的文件
(5)解决了4中的问题然后再次添加文件。菜单栏 Project->Add and Remove Project File 再次浏览到uboot-九鼎目录下,再次add tree,发现添加了额外的19个文件
解析工程文件
(1)SI工作原理就是预先把所有源代码中的所有符号全部解析存储到数据库中,然后等我们进行符号查找的时候,SI不是查找文件,而是查找数据库帮我们索引符号,因此SI查找速度很快
(2)因此我们使用SI查阅源码前应该预先进行源码解析。在菜单看Project->Syneronise Files,选中上面两个,然后确定
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值