a64 sdk pack tool

linux 2018-11-26 1458 次浏览 次点赞


pack tool

编译打包相关脚本文件。

vim -p  build.sh buildroot/scripts/mkcommon.sh buildroot/scripts/mkcmd.sh tools/pack/pack 

boot0

  • 拷贝tools/pack/chips/sun50iw1p1/bin/boot0_sdcard_sun50iw1p1.binout/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

u-boot

$./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

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

dts

  • 应用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-resouce

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。

bootimg(kernel+ramdisk)

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

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


本文由 Jay 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处,点赞2

还不快抢沙发

添加新评论