Uboot移植具体步骤(本例子为Samsung origen板)
第一步:准备源码
网上下载现成的uboot开源代码:https://ftp.denx.de/pub/u-boot/
在该网站中选择与板子兼容的uboot源文件(公司中一般咨询硬件工程师)
在Linux系统下解压
tar xf 压缩包名
第二步:修改源码
1.抄板:将和你板子兼容的文件复制一份文件
cd u-boot-2013.01/board/samsung/
cp origen fs4412 -r
2.直接执行make fs4412
,如下错误:
说明在make的时候不认识fs4412这个文件夹,需要自行添加。执行以下命令:
grep origen . -r
显示如下结果图:
通过该命令即可找到配置文件夹为/boards.cfg,然后进入该文件
vim boards.cfg
在该文件夹中添加如下句段:
fs4412 arm armv7 fs4412 samsung exynos
3.准备就绪后执行make fs4412
,出现以下错误:
为找到fs4412.h文件,原因在于我们复制了origen文件夹,但是在整个项目中有origen.h文件而却没有fs4412.h的头文件,所以我们需要将头文件也复制一份:
find -name origen.h
该命令可以找到文件的路径为./include/configs/origen.h
cp /include/configs/origen.h /include/configs/fs4412.h
再执行make fs4412,此时应该就可以编译成功生成二进制文件uboot.bin
4.此时生成的二进制文件并不能完全运行,原因在于本次的例子板子为Samsung的芯片,要想我们烧写的uboot程序被芯片识别则需要三星的签名和加工编译的源码才能实现,该加工留着下一步说明,现在我们就算编译加工成功了任然无法正常运行该uboot。
此时我们应该学会进行板子调试:调试的方法即检查uboot文件是否被执行,我们需要找到文件的起始文件,那么如何查看起始文件呢?
4.1 uboot.lds为连接文件即文件执行的首选文件可以在该文件中看到
vim uboot.lds
可以看到目标起始文件为arch/arm/cpu/armv8/start.o
进入该文件夹cd arch/arm/cpu/armv8/
找到文件的开始b reset
在reset函数中加入一段代码,作用在于证明uboot被执行(该代码可以是亮灯)
然后调试uboot源文件哪里需要修改删除或者添加代码即可
5.就算uboot启动了我们还需要打开网卡驱动已经其他的一些常用的系统命令的编辑。
从下载下来的文件中有一个common的文件夹,该文件夹中存放着一些系统文件,这些文件有些在配置里面被编译,有些没被编译,被编译出来的会生成一个.o文件,我们才看这个目录下的文件的时候发现网络cmd_net.c并没有被编译生成.o文件,所以默认的网络并不能启动,我们要做的就是修改配置将文件进行编译即可。
方法:
5.1进入驱动的文件目录:cd drivers
5.2查找网卡的名字find -name *9000*
(网卡的名字在芯片设计图中可以得知,或者直接询问)
获得以下的文件,进入文件cd /net
在net目录下我们编译的时候会有一个MakeFile文件来统一执行编译命令,所以我们可以通过查看该文件确认文件怎么执行
找到文件中存在一个宏定义CONFIG_DRIVER_DM9000
我们搜索到这个宏定义并没有定义出来,所以在默认编译的时候MakeFile文件不会将该模块编译出来,导致无法启动网卡。
5.3 我们需要在fs4412.h的头文件中全局搜索CONFIG_DRIVER_DM9000将该宏定义未定义改为#define
以上做完之后编译无法通过因为文件中的网卡管脚在你自己开发板的具体实现还未完成,需要自己编写一部分网卡管脚代码才能编译通过。(难点:具体怎么添加和添加什么代码需要结合自己的板子来开发)
6.以上步骤完成uboot移植基本完成。
追加知识点:
如果需要人为的为系统增加命令那么需要在common文件夹下新建一个自己的命令.c文件文件书写格式可以参考该文件夹下的任何一个.c文件,最后如果想要该文件被编译,必须在该路径下的MakeFile中定义
COBJS-y += 文件名.o该语句中的文件名表示你创建的.c文件,-y表示必须被编译
总结:
1.选中和自己板子适配的uboot启动文件,拷贝一个完全一样的文件夹
2.观察主MakeFile下的文件编译方法,调整并编译拷贝的文件夹,可以编译通过生成一个二进制xx.bin文件。
3.如果编译然后烧写到SD卡中该文件可以直接启动则为最理想的状态,如果不能启动,需要我们对uboot的启动进行修改,直到成功启动,看见uboot操作界面。(这一步参考上面的第四点)
4.看见操作界面后某些功能无法启用,比如网络等,则需要我们根据自己手上的板子来针对性的编写程序,以完成一个完整的uboot移植。(这一步为该步骤中的重难点)
第三步:编译并加工源码(这一步的具体内容仅适应Samsung的origen)
编译: root@ubuntu:~/u-boot-2013.01# make fs4412 加工:
1.将工具文件夹拷到u-boot-2013.01目录
root@ubuntu:~/u-boot-2013.01#
cp /mnt/hgfs/E/class/201201/code/day3/tool_bin/ . -r
2. 进入工具文件夹执行mk_uboot.sh
root@ubuntu:~/u-boot-2013.01#cd tool_bin
root@ubuntu:~/u-boot-2013.01/tool_bin#./mk_uboot.sh
//放开注释cp
…/u-boot.bin .
第四步:烧写测试
将生成好的img镜像文件通过SD卡烧写工具烧写进去即可。