uboot 的全称是 Universal Boot Loader,uboot 是一个遵循 GPL 协议的开源软件,uboot 是一个裸机代码,可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高级功能。uboot 官网为 http://www.denx.de/wiki/U-Boot/
例如,NXP 官方提供的2016.03版本的uboot, 下载地址为 :
http://git.freescale.com/git/cgit.cgi/imx/uboot-imx.git/tag/?h=imx_v2016.03_4.1.15_2.0.0_ga&id=rel_imx_4.1.15_2.1.0_ga
在正原电子的参考文档里面,把其开发板的uboot列为第三种,对于开发者来说,自己开发的硬件电路板的uboot,便对应于这第三种,即基于半导体厂商的开发板的代码移植的Uboot.
512MB(DDR3)+8GB(EMMC)核心板
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
这三条命令中 ARCH=arm 设置目标为 arm 架构,CROSS_COMPILE 指定所使用的交叉编
译器。第一条命令相当于“make distclean”,目的是清除工程.
第二条指令相当于“make mx6ull_14x14_ddr512_emmc_defconfig”,用于配置 uboot,配置文件为 mx6ull_14x14_ddr512_emmc_defconfig.
最后一条指令相当于 “make -j12”也就是使用 12 核来编译 uboot.
uboot的烧写有多种方式,在之前的笔记中也有描述。根据场景不同可以选用不同的方式
除了上面用到的烧写mmc的命令,uboot其他常用命令如下
例如,boot kernel
tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb
bootz 80800000 - 83000000
另外,启动相关的一个重要的环境变量bootcmd,例如上电后自动从emmc其中的设置为
fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb; bootz 80800000 - 83000000
通过设置环境变量命令设置,
setenv bootcmd 'fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-
emmc-7-1024x600-c.dtb; bootz 80800000 - 83000000'
savenev
boot
arch 文件夹存放着和架构有关的文件,比如 arm、avr32、m68k 等。 我们现在用的是 ARM 芯片,所以只需要关心 arm 文件夹即可。 打开 arm 文件夹里面内容如下:
fei@ubuntu:~/zhengyuandianzi/uboot/arch/arm$ ls
config.mk Kconfig.debug mach-highbank mach-rockchip mach-versatile
cpu lib mach-integrator mach-s5pc1xx mach-zynq
dts mach-at91 mach-keystone mach-socfpga Makefile
imx-common mach-bcm283x mach-kirkwood mach-stm32 thumb1
include mach-davinci mach-mvebu mach-tegra
Kconfig mach-exynos mach-orion5x mach-uniphier
mach 开头的文件夹是跟具体的设备有关的,比如“mach-exynos”就是跟三星的 exyons 系列 CPU 有关的文件。我们使用的是 I.MX6ULL,所以要关注“imx-common”这个文件夹。
“cpu”这个文件夹也是和 cpu 架构有关的,打开以后如下:
fei@ubuntu:~/zhengyuandianzi/uboot/arch/arm/cpu$ ls
arm11 arm720t arm946es armv8 pxa u-boot-spl.lds
arm1136 arm920t armv7 built-in.o sa1100
arm1176 arm926ejs armv7m Makefile u-boot.lds
可以看出有多种 ARM 架构相关的文件夹,I.MX6ULL 使用的 Cortex-A7 内核,
Cortex-A7 属于 armv7,所以我们要关心“armv7”这个文件夹。cpu 文件夹里面有个名为“uboot.lds”的链接脚本文件,这个就是 ARM 芯片所使用的 u-boot 链接脚本文件!armv7 这个文件夹里面的文件都是跟 ARMV7 架构有关的,是我们分析 uboot 启动源码的时候需要重点关注的。
这个就是 ARM 芯片所使用的 u-boot 链接脚本文件!armv7 这个文件夹里面的文件都是跟 ARMV7 架构有关的,是我们分析 uboot 启动源码的时候需要重点关注的。