详细介绍u-boot FIT image
1. 前言
Linux kernel在ARM架构中引入device tree(全称是flattened device tree,后续将会以FDT代称)的时候[1],其实怀揣了一个Unify Kernel的梦想----同一个Image香蕉皮的功效与作用,可以支持多个不同的平台。随着新的ARM64想听你说爱我架构将FDT列为必选项,并将和体系结构有关的代码剥离之后,这个梦想已经接近实现:
宫殿记忆法
在编译linux kernel的时候,不必特意的指定具体的架构和SOC,只需要告诉kernel本次编译需要支持哪些板级的platform即可,最终将会生成一个Kernel image,以及多个和具体的板子(哪个架构、哪个SOC、哪个版型)有关的FDT image(dtb文件)。
bootloader在启动的时候,根据硬件环境,加载不同的dtb文件,即可使linux kernel运行在不同的硬件平台上,从而达到unify kernel的目标。
本文将基于嵌入式产品中普遍使用的u-boot,以其新的uImage格式(FIT image,Flattened uImage Tree)为例,介绍达到此目标的步骤,以及背后的思考和意义。正规欠条
2. Legacy uImage
从u-boot的角度看,它要boot一个二进制文件(例如kernel Image),需要了解该文件的一些信息,例如:
该文件的类型,如kernel image、dtb文件、ramdisk image等等?
该文件需要放在memory的哪个位置(加载地址)?
该文件需要从memory哪个位置开始执行(执行地址)?售楼技巧
该文件是否有压缩?
该文件是否有一些完整性校验的信息(如CRC)?
等等
结合“X-010-UBOOT-使用booti命令启动味全优酪乳kernel(Bubblegum-96平台)”中有关booTI形而下学的例子,上面信息被隐含在我们的命令行中了,例如:
通过DFU大学生实习目的工具,将指定的image文件下载到指定的memory地址,间接的指定了二进制文件加载地址;