编译打包相关脚本文件。
vim -p build.sh buildroot/scripts/mkcommon.sh buildroot/scripts/mkcmd.sh tools/pack/pack
拷贝tools/pack/chips/sun50iw1p1/bin/boot0_sdcard_sun50iw1p1.bin
到out/boot0_sdcard.fex
#tools/pack/pack line 132
boot_file_list=(
chips/${PACK_CHIP}/bin/boot0_sdcard_${PACK_CHIP}.bin:out/boot0_sdcard.fex
)
#tools/pack/pack line 132
for file in ${boot_file_list[@]} ; do
cp -f `echo $file | awk -F: '{print $1}'` \
`echo $file | awk -F: '{print $2}'` 2>/dev/null
done
通过sys_config.bin 更新boot0,最终生成boot0_sdcard.fex。
#tools/pack/pack line 132
update_boot0 boot0_sdcard.fex sys_config.bin SDMMC_CARD > /dev/null
$./build.sh -p sun50iw1p1
brandy/build.sh
会编译uboot并且将其拷贝到tools/pack/chips/sun50iw1p1/bin/u-boot-sun50iw1p1.bin
。
tools/pack/pack 将其拷贝为u-boot.fex;
#tools/pack/pack line 132
boot_file_list=(
chips/${PACK_CHIP}/bin/u-boot-${PACK_CHIP}.bin:out/u-boot.fex
)
#tools/pack/pack line 132
for file in ${boot_file_list[@]} ; do
cp -f `echo $file | awk -F: '{print $1}'` \
`echo $file | awk -F: '{print $2}'` 2>/dev/null
done
通过sys_config更新uboot 文件头的元数据;
update_uboot u-boot.fex sys_config.bin > /dev/null
合并monitor.fex、scp.fex、sunxi.fex
merge_uboot u-boot.fex monitor.fex u-boot.fex secmonitor
merge_uboot u-boot.fex scp.fex u-boot.fex scp
#偏移地址 0xda800
update_uboot_fdt u-boot.fex sunxi.fex u-boot.fex
提示:monitor.fex、scp.fex 直接位应用,sunxi.fex 为sys_config.fex 最终文件,参考sys_config
sys_config 是全志 sunxi的配置脚本,区别linux kernel的dts,但是会作用于dts,以下梳理其完整链路。
应用sys_config.fex,通过dts生成sunxi.dtb;
local DTC_INI_FILE_BASE=${LICHEE_OUT}/../../../../tools/pack/out/sys_config.fex
local DTC_INI_FILE=${LICHEE_OUT}/../../../../tools/pack/out/sys_config_fix.fex
cp $DTC_INI_FILE_BASE $DTC_INI_FILE
$DTC_COMPILER -O dtb -o ${LICHEE_OUT}/sunxi.dtb \
-b 0 \
-i $DTC_SRC_PATH \
-F $DTC_INI_FILE \
-d $DTC_DEP_FILE $DTC_SRC_FILE
通过生成sys_config.bin 拷贝config.fex,sys_config.bin 用以后面的其他文件更新,config.fex暂时未发现使用;
busybox unix2dos sys_config.fex
script sys_config.fex > /dev/null
cp -f sys_config.bin config.fex
使用sys_config.bin 更新boot0、uboot、fes1、toc0。
update_boot0 boot0_spinor.fex sys_config.bin SDMMC_CARD > /dev/null
update_uboot u-boot-spinor.fex sys_config.bin >/dev/null
update_boot0 boot0_nand.fex sys_config.bin NAND > /dev/null
update_boot0 boot0_sdcard.fex sys_config.bin SDMMC_CARD > /dev/null
update_uboot u-boot.fex sys_config.bin > /dev/null
update_fes1 fes1.fex sys_config.bin > /dev/null
update_toc0 toc0.fex sys_config.bin
应用sys_config.fex 通过dts生成sunxi.dtb
$DTC_COMPILER -O dtb -o ${LICHEE_OUT}/sunxi.dtb \
-b 0 \
-i $DTC_SRC_PATH \
-F $DTC_INI_FILE \
-d $DTC_DEP_FILE $DTC_SRC_FILE
提示:使用sys_config 主要是更新dts中的
status
。
拷贝生成 sunxi.fex 合并到uboot
#偏移地址 0xda800
update_uboot_fdt u-boot.fex sunxi.fex u-boot.fex
hexdump -C -n 1000 tools/pack/out/sunxi.fex
hexdump -C -n 1000 -s 0xda800 tools/pack/out/u-boot.fex
boot-resource为用以uboot引导的一些资源文件,主要是包含一些背景图片。
背景图bootlogo.bmp
../a64_jay/tools/pack/chips/sun50iw1p1/configs/t1/bootlogo.bmp
../a64_jay/tools/pack/out/boot-resource/bootlogo.bmp
整合资源文件后生成boot-resource.fex 和boot-resouce.ini 之后通过fat16 文件系统写入/dev/mmcblk0p2。
boot.img 为安卓引导的内核格式,其主要包含描述镜像的文件头和可执行的kernel和ramdisk。相信参考android boot image 。
linux-3.10/scripts/build.sh 为制作引导镜像脚本,其约定kernel和ramdisk可执行文件的偏移地址和通过mkbootimg 工具制作引导镜像文件。
#"linux-3.10/scripts/build.sh" line 287
if [ ${bss_sz} -gt $((16#1000000)) ]; then
RAMDISK_OFFSET="0x02000000";
else
RAMDISK_OFFSET="0x01000000";
fi
#modify ramdisk offset from 16m to 20m
RAMDISK_OFFSET="0x01400000";
${MKBOOTIMG} --kernel ${BIMAGE} \
--ramdisk ${RAMDISK} \
--board ${CHIP} \
--base ${BASE} \
--kernel_offset ${KERNEL_OFFSET} \
--ramdisk_offset ${RAMDISK_OFFSET} \
-o output/boot.img
pack打包工具未对镜像做任何处理,软连接到了boot.fex。
ln -s ${LICHEE_OUT}/boot.img boot.fex
rootfs 的制作通过build.sh moudle=all 制作,会选择buildroot/scripts/mkcommon.sh
再到buildroot/scripts/mkcmd.sh
,最终通过buildroot/target/debian/build.sh
打包镜像。
OUT_PATH="../../../out/dragonboard"
#"buildroot/target/debian/build.sh" line 36
buildroot/target/tools/host/usr/bin/make_ext4fs -s -l $NEW_NR_SIZE"M" $TARGET_IMAGE ${LICHEE_TOP_DIR}/debian/
cp -v rootfs.ext4 $OUT_PATH/
pack打包工具未对镜像做任何处理,软连接到了rootfs.fex。
ln -s ${LICHEE_OUT}/rootfs.ext4 rootfs.fex