• 109.firefly-extboot的生成脚本


    内核版本: 4.4.194 

    在firefly的sdk 2.5.1c及以后的版本都是extboot.img(对应表中的extboot)

    但是之前的并不是,而且一个boot.img,(对应表中rkboot)

    rkboot的生成方法可以参考解决linux5.15编译时不生成boot.img 的问题-CSDN博客

    对于sdk 2.5.1c及以后的版本,sdk直接提供命令,build.sh extboot 即可完成。

    对于sdk 2.5.1c以前的sdk如何处理呢?我在这个脚本中截取extboot的生成部分,自己建立一个sh文件,放在kernel目录中。

    前提也是内核自己编译成功的情况下哈!!!

    注意:

    1.修改自己的dts文件名称!!!!!

    2.还有需要一个ramdisk.img

    1. #! /bin/bash
    2. RK_ARCH=arm64
    3. RK_KERNEL_DTS=rk3399-sapphire-excavator-linux-gz
    4. RK_KERNEL_IMG=arch/arm64/boot/Image
    5. if [[ ! -f $RK_KERNEL_IMG ]]; then
    6. echo "请先编译好内核!!"
    7. exit 1
    8. fi
    9. if [[ ! -f arch/${RK_ARCH}/boot/dts/rockchip/${RK_KERNEL_DTS}.dtb ]]; then
    10. echo "${RK_KERNEL_DTS}.dtb文件不存在,请注意修改该脚本后重新运行!!"
    11. exit 1
    12. fi
    13. echo "============Start building kernel============"
    14. echo "TARGET_ARCH =$RK_ARCH"
    15. echo "TARGET_KERNEL_CONFIG =$RK_KERNEL_DEFCONFIG"
    16. echo "TARGET_KERNEL_DTS =$RK_KERNEL_DTS"
    17. echo "TARGET_KERNEL_CONFIG_FRAGMENT =$RK_KERNEL_DEFCONFIG_FRAGMENT"
    18. echo "=========================================="
    19. pwd
    20. #make ARCH=$RK_ARCH $RK_KERNEL_DEFCONFIG $RK_KERNEL_DEFCONFIG_FRAGMENT #对内核进行配置
    21. #make ARCH=$RK_ARCH $RK_KERNEL_DTS.img -j$RK_JOBS #对内核进行编译
    22. echo -e "\e[36m Generate extLinuxBoot image start\e[0m"
    23. EXTBOOT_IMG=extboot.img
    24. EXTBOOT_DIR=extboot
    25. rm -rf ${EXTBOOT_DIR} && mkdir -p ./${EXTBOOT_DIR}/extlinux #删除原来的exboot目录,再新建一个,相当于清空文件夹
    26. KERNEL_VERSION=$(cat include/config/kernel.release)
    27. echo "label rk-kernel.dtb linux-$KERNEL_VERSION" > $EXTBOOT_DIR/extlinux/extlinux.conf #写入extlinux.conf,第一次创建
    28. cp $RK_KERNEL_IMG $EXTBOOT_DIR/Image-$KERNEL_VERSION
    29. echo -e "\tkernel /Image-$KERNEL_VERSION" >> $EXTBOOT_DIR/extlinux/extlinux.conf #写入extlinux.conf,第二次及之后都是追加
    30. cp arch/${RK_ARCH}/boot/dts/rockchip/${RK_KERNEL_DTS}.dtb $EXTBOOT_DIR #把dtb文件拷贝过去
    31. ln -sf ${RK_KERNEL_DTS}.dtb $EXTBOOT_DIR/rk-kernel.dtb #dtb文件做一个软链接
    32. echo -e "\tfdt /rk-kernel.dtb" >> $EXTBOOT_DIR/extlinux/extlinux.conf #写入extlinux.conf,追加
    33. if [[ -e ramdisk.img ]]; then
    34. cp ramdisk.img $EXTBOOT_DIR/initrd-$KERNEL_VERSION #如果存在ramdisk,则拷贝
    35. echo -e "\tinitrd /initrd-$KERNEL_VERSION" >> $EXTBOOT_DIR/extlinux/extlinux.conf #写入extlinux.conf,追加
    36. fi
    37. cp .config $EXTBOOT_DIR/config-$KERNEL_VERSION #拷贝配置文件
    38. cp System.map $EXTBOOT_DIR/System.map-$KERNEL_VERSION
    39. cp *.bmp $EXTBOOT_DIR/ || true
    40. make ARCH=$RK_ARCH INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$EXTBOOT_DIR modules_install #把驱动ko安装到extboot目录中
    41. if [ -n "$FF_EXTBOOT_SIZE" ];then
    42. EXTBOOT_IMG_SIZE=$FF_EXTBOOT_SIZE
    43. else
    44. EXTBOOT_IMG_SIZE=128M #extboot 文件大小 128M
    45. fi
    46. rm -rf $EXTBOOT_IMG && truncate -s $EXTBOOT_IMG_SIZE $EXTBOOT_IMG #删除原来的extboot.img 并新建一个大小为128M的extboot.img文件
    47. fakeroot mkfs.ext4 -Fq -L "boot" -d $EXTBOOT_DIR $EXTBOOT_IMG #在内核目录下格式化extboot.img,并拷贝extboot目录到extboot.img中
    48. echo -e "\e[36m Generate extLinuxBoot image done\e[0m"

    只要内核编译过,dtb文件也是正确的,自动生成是没啥问题啦。

    有问题留言吧。

    这些只是一个使用方法,方便自己灵活去组合想要的文件。

     

  • 相关阅读:
    CSS文本样式详解
    Redis实战篇(三)秒杀
    Golang之封装Mysql Slave小例子
    使用Jest测试接口时间
    如何区分2G/3G/4G基站
    【算法与数据结构】--算法基础--算法设计与分析
    分析可转债的发行公司——公司财务状况、行业分析、公司治理与管理团队
    git merge和git rebase的区别
    RepVgg实战:使用RepVgg实现图像分类(一)
    VMware Workstation安装ESXi和vCenter(8.0)
  • 原文地址:https://blog.csdn.net/zhaozhi0810/article/details/134501141