内核版本: 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文件也是正确的,自动生成是没啥问题啦。
有问题留言吧。
这些只是一个使用方法,方便自己灵活去组合想要的文件。