17.Uboot编译原理

一、什么是UBoot

​ 是一个复杂的综合的裸机程序,支持各种。UBoot就是一个Bootloader,用于启动linux系统的程序,它是上电以后的第一个程序。

​ 它最重要的就是初始化DDR,linux在DDR中运行的,由于Linux内存比较大,放到内部的ROM中是远远不够的。Linux镜像一开始存在EMMC,NAND FLASH , 等外置存储中。那么我们需要将linux镜像从外置存储拷贝到DDR中,就需要Uboot程序来做。主要为系统启动做准备。

Uboot获取

​ 1.https://ftp.denx.de/pub/u-boot/ 可得到,但是我们通常不使用这些Uboot,因为做芯片的厂商才了解自己的东西,工程师往往会在设计时考虑使用哪个版本的uboot。

​ 2.SOC厂商官网获得,这个是厂商根据芯片定制版的uboot。

​ 3.开发版厂商,会参考SOC厂商发布的uboot的进行对开发版产品的uboot进行修改。

Uboot启动内核的流程

​ 开发版上电以后,就会加载uboot程序,它是上电后的第一个程序。然后打印出一些uboot信息,读取uimage /zImage , 读取设备树之后就开始启动内核了。

二、编译Uboot

​ 下载开发版厂提供的内核,以后编译uboot

1.准备

​ 交叉编译工具链,在uboot目录内可以检查到,即输入arm-n,按Tab键可补齐即可,如果不行,就将用户目录下的.bashrc文件拷贝过来,然后执行source .bashrc即可。

​ 如果是新系统,就要安装这些依赖源。

sudo apt-get install lib32ncurses5 lib32tinfo5 libc6-i386

2.编译内核

​ 执行下列命令即可完成

zxc123@ubuntu:~/IMX6ULL/ebf_6ull_uboot$ export CROSS_COMPILE=arm-linux-gnueabihf-
zxc123@ubuntu:~/IMX6ULL/ebf_6ull_uboot$ export ARCH=arm
zxc123@ubuntu:~/IMX6ULL/ebf_6ull_uboot$ make ARCH=arm mx6ull_14x14_evk_defconfig
zxc123@ubuntu:~/IMX6ULL/ebf_6ull_uboot$ make -j12

​ 除了上面这种方法以外,也可以在uboot顶层makefile中设置ARCH,CROSS_COMPILE变量的信息。

​ 会生成u-boot.imx 文件,uboot编译,最后会通过mkimage软件添加头部信息,生成u-boot.imx。

  ./tools/mkimage -n board/freescale/mx6ullevk/imximage.cfg.cfgtmp -T imximage -e 0x87800000 -d u-boot.bin u-boot.imx 
Image Type:   Freescale IMX Boot Image
Image Ver:    2 (i.MX53/6/7 compatible)
Mode:         DCD
Data Size:    356352 Bytes = 348.00 kB = 0.34 MB
Load Address: 877ff420
Entry Point:  87800000

三、Mfgtools烧录

1.mfgtools目录分析

UICfg.ini:是用来配置多通道烧录,以此来量产,默认配置1即可,不用管。

cfg.ini:配置芯片类型与板子信息等内容。

​ [profiles]–说明使用Profiles目录下的哪一个目录的文件烧录

​ [platform]–说明开发版名称

​ [list]–在/profiles/Linux/OS Firmware/ucl2.xml中的配置信息,执行哪种类型的代码,如eMMC , Nand Flash ,SDCard。

​ [variable]–在/profiles/Linux/OS Firmware/ucl2.xml中的一些配置变量,使用%…%中间夹杂的变量替换。

ucl2.xml:文件内部使用标签中的信息会被软件解析。

内部还有标签是全局配置变量,标签是由cfg.ini中的[list]信息来选择烧录到哪种方式。

2.mfgtools烧录

​ 其中烧录分为两个阶段,BootStrap ,Updater

1.BootStrap:

​ 将firmware文件夹下的uboot , kernel , dtb ,Initramfs加载 内存中。

2.Updater:

​ 将烧录的文件夹下的uboot , kernel , dtb ,rootfs写入到eMMC中。

uboot替换

​ 将u-boot.imx文件替换到profile/linux/OS Firmware/firmware中去为u-boot-imx6ull14x14evk_emmc.imx

​ 再将u-boot.imx替换到profile/linux/OS Firmware/firmware中。

你可能感兴趣的:(IMX6ULL学习手册)