uboot编译

一、uboot简介

uboot是一个逻辑程序,最主要的目的是启动内核。

Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段bootloader程序。这段bootloader程序会先初始化DDR等外设 ,然后将Linux内核从flash(NAND,NOR FLASH,SD,MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。

当然了,bootloader 的实际工作要复杂的多,但是它最主要的工作就是启动 Linux 内核,bootloader 和 Linux 内核的关系就跟 PC 上的 BIOS 和 Windows 的关系一样,bootloader 就相当于 BIOS。所以我们要先搞定bootloader,很庆幸,有很多现成的 bootloader 软件可以使用,比如 U-Boot、vivi、RedBoot 等等,其中以 U-Boot 使用最为广泛,为了方便书写,本文会将 U-Boot 写为 uboot。

uboot支持多种操作系统和架构的芯片。
uboot最主要就是DDR的初始化,因为系统是运行在DDR上的。一般Linux镜像(zImage)+设备树(.dtb)是存放在SD卡、EMMC、NAND、SPI FLASH等外置存储里面的,这就涉及到了将Linux镜像从flash中拷贝到DDR指定地址再去启动,所以这里也会涉及到FLASH驱动程序。

二、uboot源码

我们可以在 uboot 官网下载 uboot 源码
在这里插入图片描述
图 30.1.3 中就是 uboot 原汁原味的源码文件,是最初始得源码(一般是给soc厂商使用)(不全面)。
soc厂商对其修改得到适用于自己的uboot。
开发板厂商使用soc厂商的源码又经过修改,得到适用于自己开发板得uboot。
在这里插入图片描述

三、编译正点原子修改的uboot(在编译前要先安装好交叉编译工具链)

解压后得到:
在这里插入图片描述
一般在编译前先清理一下工程 :make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
在这里插入图片描述
这里的 make 命令带有三个参数,第一个是 ARCH ,也就是指定架构 ,这里肯定是 arm ;第二个参数 CROSS_COMPILE 用于指定编译器 ,只需要指明编译器前缀就行了,比如 arm-linuxgnueabihf-gcc 编译器的前缀就是**“arm-linux-gnueabihf-”** ;最后一个参数 distclean 就是清除工程

mx6ull_14x14_ddr512_emmc_defconfig : 是一个配置文件,由恩智浦官方提供(在路径uboot/configs),或经过其它开发商修改的。

配置 uboot: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- (加空格)mx6ull_14x14_ddr512_emmc_defconfig,会生成一个.config文件
在这里插入图片描述
在这里插入图片描述
同样有三个参数,不同的是,最后一个参数是 mx6ull_alientek_emmc_defconfig。前面说了 uboot 是 bootloader 的一种,可以用来引导 Linux,但是 uboot 除了引导 Linux 以外还可以引导其它的系统,而且 uboot 还支持其它的架构和外设,比如 USB、网络、SD 卡等。这些都是可以配置的,需要什么功能就使能什么功能。所以在编译uboot 之前,一定要根据自己的需求配置 uboot。
mx6ull_alientek_emmc_defconfig 就是正点原子针对 I.MX6U-ALPHA 的 EMMC 核心板编写的配置文件。

编译uboot: make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12

编译 uboot,通过第 3 行配置好 uboot 以后就可以直接“make”编译 uboot 了。
其中 V=1 用于设置编译过程的信息输出 级别;-j 用于设置主机使用多少线程编译uboot ,最好设置成我们虚拟机所设置的核心数,如果在 VMware 里面给虚拟就分配了 4 个核,那么使用-j4 是最合适的,这样 4 个核都会一起编译。
在这里插入图片描述
编译完成后会产生.bin文件,在编译中会添加I.MX6ULL的头部信息产生.imx文件。

之后用OTG烧写系统,在第一行就可以发现uboot编译的时间,在倒数3秒前按下任一键可进入uboot命令行。
在这里插入图片描述
为了方便编译也可以配置Makefile的ARCH和CROSS_COMPILE变量的值,这样编译的时候就比较方便。也可以使用shell脚本。
在这里插入图片描述

shell脚本

 #!/bin/bash			
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean														//清理工程
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig			//根据配置文件制作.config文件
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12														//编译

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值