109.firefly-extboot的生成脚本

22 篇文章 2 订阅

内核版本: 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

#! /bin/bash
	

RK_ARCH=arm64
RK_KERNEL_DTS=rk3399-sapphire-excavator-linux-gz
RK_KERNEL_IMG=arch/arm64/boot/Image


if [[ ! -f $RK_KERNEL_IMG ]]; then
    echo "请先编译好内核!!"                         
    exit 1    
fi

if [[ ! -f arch/${RK_ARCH}/boot/dts/rockchip/${RK_KERNEL_DTS}.dtb ]]; then
    echo "${RK_KERNEL_DTS}.dtb文件不存在,请注意修改该脚本后重新运行!!"                         
    exit 1    
fi



echo "============Start building kernel============"
echo "TARGET_ARCH          =$RK_ARCH"
echo "TARGET_KERNEL_CONFIG =$RK_KERNEL_DEFCONFIG"
echo "TARGET_KERNEL_DTS    =$RK_KERNEL_DTS"
echo "TARGET_KERNEL_CONFIG_FRAGMENT =$RK_KERNEL_DEFCONFIG_FRAGMENT"
echo "=========================================="
pwd


#make ARCH=$RK_ARCH $RK_KERNEL_DEFCONFIG $RK_KERNEL_DEFCONFIG_FRAGMENT     #对内核进行配置
#make ARCH=$RK_ARCH $RK_KERNEL_DTS.img -j$RK_JOBS                                                  #对内核进行编译

echo -e "\e[36m Generate extLinuxBoot image start\e[0m"

EXTBOOT_IMG=extboot.img
EXTBOOT_DIR=extboot
rm -rf ${EXTBOOT_DIR} && mkdir -p ./${EXTBOOT_DIR}/extlinux                     #删除原来的exboot目录,再新建一个,相当于清空文件夹

KERNEL_VERSION=$(cat include/config/kernel.release)
echo "label rk-kernel.dtb linux-$KERNEL_VERSION" > $EXTBOOT_DIR/extlinux/extlinux.conf        #写入extlinux.conf,第一次创建

cp $RK_KERNEL_IMG $EXTBOOT_DIR/Image-$KERNEL_VERSION
echo -e "\tkernel /Image-$KERNEL_VERSION" >> $EXTBOOT_DIR/extlinux/extlinux.conf               #写入extlinux.conf,第二次及之后都是追加


cp arch/${RK_ARCH}/boot/dts/rockchip/${RK_KERNEL_DTS}.dtb $EXTBOOT_DIR     #把dtb文件拷贝过去

ln -sf ${RK_KERNEL_DTS}.dtb $EXTBOOT_DIR/rk-kernel.dtb                                                                                    #dtb文件做一个软链接

echo -e "\tfdt /rk-kernel.dtb" >> $EXTBOOT_DIR/extlinux/extlinux.conf                              #写入extlinux.conf,追加

if [[ -e ramdisk.img ]]; then
    cp ramdisk.img $EXTBOOT_DIR/initrd-$KERNEL_VERSION                          #如果存在ramdisk,则拷贝
    echo -e "\tinitrd /initrd-$KERNEL_VERSION" >> $EXTBOOT_DIR/extlinux/extlinux.conf            #写入extlinux.conf,追加
fi

cp .config $EXTBOOT_DIR/config-$KERNEL_VERSION                                #拷贝配置文件
cp System.map $EXTBOOT_DIR/System.map-$KERNEL_VERSION
cp *.bmp $EXTBOOT_DIR/ || true

make ARCH=$RK_ARCH INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$EXTBOOT_DIR modules_install                   #把驱动ko安装到extboot目录中

if [ -n "$FF_EXTBOOT_SIZE" ];then
	EXTBOOT_IMG_SIZE=$FF_EXTBOOT_SIZE
else
	EXTBOOT_IMG_SIZE=128M                                       #extboot 文件大小 128M
fi

rm -rf $EXTBOOT_IMG && truncate -s $EXTBOOT_IMG_SIZE $EXTBOOT_IMG                  #删除原来的extboot.img 并新建一个大小为128M的extboot.img文件
fakeroot mkfs.ext4 -Fq -L "boot" -d $EXTBOOT_DIR $EXTBOOT_IMG     #在内核目录下格式化extboot.img,并拷贝extboot目录到extboot.img中


echo -e "\e[36m Generate extLinuxBoot image done\e[0m"





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

有问题留言吧。

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大智兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值