嵌入式编译U-Boot

139 阅读4分钟

嵌入式编译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端这种方式了)

image-20220319022631906

  • 将本地文件上传到Linux端的一任意可辨识目录

    image-20220319023246484

  • 解压Linux端的源码包

    由于Cetos默认是没有解压 .zip格式的工具的这里需要我们自己按照一个输入(Cteos需要联网下载工具

    yum install unzip
    

    image-20220319023608497

  • 解压源码包

    #创建一个目录方便辨识和管理
    mkdir uboot
    #进入uboot目录
    cd uboot
    #解压到uboot目录下
    unzip ../ebf_6ull_uboot-master.zip 
    

    image-20220319024101763

    image-20220319024151814

编译过程:

清除编译信息

make ARCH=arm clean

# ARCH 指定编译采用的为arm架构
# clean 清除
  • 该命令是清除之前编译生成的一些中间文件,以免对后续的编译有影响

设置配置选项

选择一个与自己板子匹配的配置即可,这里是演示,就随便咯。

make ARCH=arm mx6ull_14x14_evk_defconfig

这个是生成配置文件,用于后期的指定编译

  • 这里注意一下,编译都是在根目录下进行的

image-20220319025010440

  • 编译配置文件
make ARCH=arm mx6ull_14x14_evk_emmc_defconfig

image-20220319030151361

  • 开始编译U-Boot
make -j[x] ARCH=[x] CROSS_COMPILE=[x]

# -j4 这里指定的是编译时调用的线程数,与自己的计算机配置有关
# 例如 -j4 就是启动4线程同时编译 
# 不指定默认是 1,这里大家如果会设置自己的虚拟机,可以自己指定

#ARCH 指定编译的架构
#CROSS_COMPILE 指定所以的编译器
#这里大家更具自己进行设置 

输入 arm- 后连续两次Tab键 就会补全自己的编译器,指定前面相同部分,这样在编译过程中,就会自己调用所需要的编译器

image-20220319031054929

  • 确定无误后开始编译
make -j1 ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

image-20220319031418051

  • 这个过程更具自己的机器配置,其编译时间有所不同(一般1分钟左右即可编译完成)

image-20220319031621549

image-20220319031831290

此时,恭喜你咯,linux嵌入编译你已成功入坑!