挂载SD image文件
用过Microchip MPU产品做Linux相关应用开发的工程师都知道,在使用buildroot生成组后的烧录镜像时,会在output/images目录下自动生成一个sdcard.img文件。那我们如何检测打包到该镜像中的文件,比如查看设备树的内容。
- 首先挂载SD卡烧录镜像文件:
例如使用buildroot自动生成的烧录镜像文件是sdcard.img
sudo kpartx -av sdcard.img
可以看到挂载sdcard.img文件后,发现镜像文件被分为2个分区
- 手动挂载boot代码存储分区:
Microchip MPU的SD卡或者eMMC烧录镜像文件,会被分为2个分区。第一个分区是被格式化为FAT格式且大小为64MB的boot分区,用来存储boot.bin、itb文件、u-boot.bin和uboot.env文件。
Microchip MPU在启动的时候,内部ROM Code首先会挂载第一个boot分区,然后尝试从boot分区寻找boot.bin文件并加载到MPU内部SRAM进行运行。
mkdir tmp
sudo mount /dev/mapper/loop11p1 tmp/
提取itb文件中的内容
关于itb文件,Microchip在其linux4sam网站上给出了以下解释“ we use a FIT image, which embeds the Kernel + Device Tree blobs in a single file.“
The FIT image is a placeholder that has the zImage and the base Device Tree, plus additional overlays that can be selected at boot time.
也就说在单个itb文件里面,打包进去了多个dtb文件,在uboot加载阶段,根据用户不同的配置,来动态地加载不同的dtb文件,实现用户板级的灵活配置。
dumpimage -l /tmp/sam9x60ek.itb
- 手动从itb文件里面提取所需要的dtb文件:
sudo dumpimage -T flat_dt -p l -o at91-sam9x60ek.dtb sam9x60ek.itb
- 使用fdtdump命令查看dtb文件:
fdtdump at91-sam9x60ek.dtb