如何将基于Exynos4412的U-Boot引导程序移植成?
摘要:【Linux】基于Exynos4412的U-Boot引导程序移植 零、准备 首先我们得去下载好U-Boot的源码,因为用的芯片是2012年出的Exynos4412,因此我们选择这个时间节点附近的U-Boot版本。本文选择U-Boot的v20
【Linux】基于Exynos4412的U-Boot引导程序移植
零、准备
首先我们得去下载好U-Boot的源码,因为用的芯片是2012年出的Exynos4412,因此我们选择这个时间节点附近的U-Boot版本。本文选择U-Boot的v2013.01.01版本。
U-Boot官方网站:https://www.u-boot.org/
U-Boot下载页面:https://ftp.denx.de/pub/u-boot/
U-Boot-v2013.01.01版本下载页面:https://source.denx.de/u-boot/u-boot/-/tree/v2013.01.01
U-Boot-v2013.01.01版本下载链接:https://ftp.denx.de/pub/u-boot/u-boot-2013.01.01.tar.bz2
下载后得到如下文件:
另外我们需要一套ARM的交叉编译工具链,交叉编译工具本文不介绍。
壹、初次编译
1. 解压
使用如下命令解压:
yu@Yubuntu:~/ex4412/uboot$ tar -vxf u-boot-2013.01.01.tar.bz2
得到如下文件夹:
进入到u-boot-2013.01.01文件夹中去,准备移植工作。
2. 设置编译器
我们在编译U-Uoot源码之前需要指定我们使用的处理器架构和编译器,指定的方式有两种,一种是通过make命令参数临时指定,一种是修改Makefile文件永久指定,两种方式各有优缺点。
因为我们是针对于ARM处理器的移植,所以选择修改Makefile更方便些。
使用如下命令修改Makefile文件:
yu@Yubuntu:~/ex4412/uboot/u-boot-2013.01.01$ vi Makefile
将185行的变量CROSS_COMPILE直接指定为我们交叉编译工具的前缀arm-none-linux-gnueabi-,注意后面不要有空格。
修改好后保存退出。
3. 添加板子(Board)信息
每个人使用的开发板都有可能不同,U-Boot不可能支持所有的开发板,故有时候需要我们自己在U-Boot中添加对我们板子的支持。
U-Boot中支持了一部分板子,为了减少工作量提高效率,我们可以选择一款与我们板子相近的板子作为基础,我们可以在此基础之上进行针对我们板子的修改。
这边我选择的是Samsung公司的Origen。
3.1
使用如下命令把Origen的代码复制一份并且重命名:
yu@Yubuntu:~/ex4412/uboot/u-boot-2013.01.01$ cp -rf board/samsung/origen/ board/samsung/ex4412 # 复制源码
yu@Yubuntu:~/ex4412/uboot/u-boot-2013.01.01$ mv board/samsung/ex4412/origen.c board/samsung/ex4412/ex4412.c # 重命名
yu@Yubuntu:~/ex4412/uboot/u-boot-2013.01.01$
yu@Yubuntu:~/ex4412/uboot/u-boot-2013.01.01$ cp include/configs/origen.h include/configs/ex4412.h # 复制头文件
3.2
复制代码后,我们还需要对Makefile文件进行修改,让我们复制出来的代码能够正常编译。
使用如下命令修改Makefile文件:
yu@Yubuntu:~/ex4412/uboot/u-boot-2013.01.01$ vi board/samsung/ex4412/Makefile
把31行的COBJS += origen.o改为COBJS += ex4412.o后保存退出。
3.3
我们还需要让我们的代码能够被编译进U-Boot中,即添加U-Boot对我们板子的支持,类似于在U-Boot中注册我们的板子。
使用如下命令编辑U-Boot的配置文件:
yu@Yubuntu:~/ex4412/uboot/u-boot-2013.01.01$ vi boards.cfg
我们把我们参考的板子的配置信息复制一行,修改为我们的板子。修改完成后保存退出,这样我们就在U-Boot中注册了我们的板子了。
3.4
为了区别于其他板子的U-Boot程序,我们有时候需要在程序运行时输出一些提示信息,此类信息对程序运行影响不大,主要是供开发者调试,因此是可选的操作。
