嵌入式编译U-Boot
窗外的残风已消散了许久,躺在床上的二狗子以为冬天还未离去,许久未望向窗外的他,撇着头,通过污渍斑驳的玻璃,无神的瞅了一眼,被纱窗分割成小孔的,那棵不知何时悄开的,不知具体名字的杏花。旁边的一个梧树强硬的拽着那树梢上仅剩的一片去年的枯叶。迷迷糊糊间他老人家又转过头去,恢复了望向窗外之前的动作。
二狗子他老人家最近又不务正业咯!突然瞎搞起了Linux编译。别问他老人家,为什么一大把年纪了还要瞎折腾?别问,别问,问就是,他老师让搞的呗。:sob:
其实也不全是,其实这狗子他主要是想帮女孩子。。。咳咳,别无它意。嗯~对就这样,他是为了学习,没错,这个理由很合理。:innocent:
对的没错 盆友 你又猜对了,以上全是胡扯,正篇开始。。。
U-Boot存在的意义
U-Boot简述:
既然是编译它(U-Boot)那么我们就得知道它是干什么得咯,我结合我查到得资料和个人得理解,做一简单解释以供大家参考。
U-Boot全称 Universal Boot Loader(通用引导加载程序),简单来说就负责开机后告诉计算机,该去哪里找系统并加载到内存中去让让其执行,以保证正常开机。这一点如果有,装过PC机的Windows系列系统的小伙伴,应该深有体会吧,装Windows系统最大病诟就是,因其安装方式不当造成的PC机开机因无法找到引导而无法正常读取系统开机。
其实对于开发板(嵌入式)来说,同样也是需要一个引导来辅助我们的开发板上上电开机后,能顺利的加载到我们随后移植的Linux系统。这一点很重要,如果没有引导,可能天天就得对着一块黑屏的板子唱征服咯。
- 关于U-Boot的其他更多了解,可以自己查询相关资料咯,这里我就不再赘述了,因为呀!我知道的也就这么多。:grinning:
编译U-Boot源码:
U-Boot源码:野火开发板官方 ebf_6ull_uboot
编译工具链:arm-linux-gcc version 4.4.3
Linux: Cetos 7
环境准备
资料下载
野火官方提供的U-Boot源码:【点这里U-Boot】
编译工具链:【点这里GCC】
Uboot源码:【点这里源码】
-
第一次使用Github的小伙伴可能对其界面有些许难懂,按照我图中的过程下载.zip格式的压缩包即可。
-
当然如果你会在Linux中利用git命令克隆远程仓库那会更方便一些。(这里我就不演示利用git直接克隆到本地Linux端这种方式了)
-
将本地文件上传到Linux端的一任意可辨识目录
-
解压Linux端的源码包
由于Cetos默认是没有解压 .zip格式的工具的这里需要我们自己按照一个输入(Cteos需要联网下载工具)
yum install unzip -
解压源码包
#创建一个目录方便辨识和管理 mkdir uboot #进入uboot目录 cd uboot #解压到uboot目录下 unzip ../ebf_6ull_uboot-master.zip
编译过程:
清除编译信息
make ARCH=arm clean
# ARCH 指定编译采用的为arm架构
# clean 清除
- 该命令是清除之前编译生成的一些中间文件,以免对后续的编译有影响
设置配置选项
选择一个与自己板子匹配的配置即可,这里是演示,就随便咯。
make ARCH=arm mx6ull_14x14_evk_defconfig
这个是生成配置文件,用于后期的指定编译
- 这里注意一下,编译都是在根目录下进行的
- 编译配置文件
make ARCH=arm mx6ull_14x14_evk_emmc_defconfig
- 开始编译U-Boot
make -j[x] ARCH=[x] CROSS_COMPILE=[x]
# -j4 这里指定的是编译时调用的线程数,与自己的计算机配置有关
# 例如 -j4 就是启动4线程同时编译
# 不指定默认是 1,这里大家如果会设置自己的虚拟机,可以自己指定
#ARCH 指定编译的架构
#CROSS_COMPILE 指定所以的编译器
#这里大家更具自己进行设置
输入 arm- 后连续两次Tab键 就会补全自己的编译器,指定前面相同部分,这样在编译过程中,就会自己调用所需要的编译器
- 确定无误后开始编译
make -j1 ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
- 这个过程更具自己的机器配置,其编译时间有所不同(一般1分钟左右即可编译完成)