是一个复杂的综合的裸机程序,支持各种。UBoot就是一个Bootloader,用于启动linux系统的程序,它是上电以后的第一个程序。
它最重要的就是初始化DDR,linux在DDR中运行的,由于Linux内存比较大,放到内部的ROM中是远远不够的。Linux镜像一开始存在EMMC,NAND FLASH , 等外置存储中。那么我们需要将linux镜像从外置存储拷贝到DDR中,就需要Uboot程序来做。主要为系统启动做准备。
1.https://ftp.denx.de/pub/u-boot/ 可得到,但是我们通常不使用这些Uboot,因为做芯片的厂商才了解自己的东西,工程师往往会在设计时考虑使用哪个版本的uboot。
2.SOC厂商官网获得,这个是厂商根据芯片定制版的uboot。
3.开发版厂商,会参考SOC厂商发布的uboot的进行对开发版产品的uboot进行修改。
开发版上电以后,就会加载uboot程序,它是上电后的第一个程序。然后打印出一些uboot信息,读取uimage /zImage , 读取设备树之后就开始启动内核了。
下载开发版厂提供的内核,以后编译uboot
交叉编译工具链,在uboot目录内可以检查到,即输入arm-n,按Tab键可补齐即可,如果不行,就将用户目录下的.bashrc文件拷贝过来,然后执行source .bashrc即可。
如果是新系统,就要安装这些依赖源。
sudo apt-get install lib32ncurses5 lib32tinfo5 libc6-i386
执行下列命令即可完成
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
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]信息来选择烧录到哪种方式。
其中烧录分为两个阶段,BootStrap ,Updater
将firmware文件夹下的uboot , kernel , dtb ,Initramfs加载 内存中。
将烧录的文件夹下的uboot , kernel , dtb ,rootfs写入到eMMC中。
将u-boot.imx文件替换到profile/linux/OS Firmware/firmware中去为u-boot-imx6ull14x14evk_emmc.imx
再将u-boot.imx替换到profile/linux/OS Firmware/firmware中。