小改fenix镜像

2023-05-18  本文已影响0人  叶迎宪

想修改fenix镜像中的内核启动参数,打印出更多的日志。 Linux AMLogic Toolkit并不能成功的解包fenix编译出来的ubuntu镜像,因为镜像分区数量什么的都跟标准的amlogic镜像包差异较大。与armbian类似,fenix有一个/boot目录,存放着内核及内核启动参数、启动脚本。试着研究fenix脚本是怎么生成镜像的,注意到一句话
Copying files to /boot directory...

对应代码位于 config/functions/build-rootfs

    # rsync /boot
    info_msg "Copying files to /boot directory..."
    if [[ $(findmnt --target $ROOTFS/boot -o FSTYPE -n) == vfat ]]; then
        # fat32
        rsync -rLtWh $rsync_progress $ROOTFS_TEMP/boot $ROOTFS
    else
        # ext4
        rsync -aHWXh $rsync_progress $ROOTFS_TEMP/boot $ROOTFS
    fi

其中的预定义变量位于 config/config

BUILD=$(realpath "$BUILD")
BUILD_IMAGES="$BUILD/images"
ROOTFS="$BUILD_IMAGES/rootfs"   // build/images/rootfs
ROOTFS_TEMP="$BUILD_IMAGES/.tmp/rootfs-${KHADAS_BOARD}-${DISTRIB_RELEASE}-${DISTRIB_TYPE}"

CONFIG="$ROOT/config"
BOARD_CONFIG="$CONFIG/boards"
BOOT_SCRIPTS="$CONFIG/bootscripts"

继续看 $ROOTFS_TEMP/boot 的内容怎么来的。config/functions/build-board-deb

    # Copy boot scripts
    mkdir -p $pkgdir/boot
    if [ "$VENDOR" == "Amlogic" ]; then
        if [ -f $BOOT_SCRIPTS/$BOOT_SCRIPT_BOARD ]; then
            cp $BOOT_SCRIPTS/$BOOT_SCRIPT_BOARD $pkgdir/boot
            $UTILS_DIR/mkimage -A arm64 -O linux -T script -C none -a 0 -e 0 -n "$CHIP autoscript" -d $pkgdir/boot/$BOOT_SCRIPT_BOARD $pkgdir/boot/${BOOT_SCRIPT_BOARD%.cmd*}
            # For mainline u-boot to load autoscript
            cp $pkgdir/boot/${BOOT_SCRIPT_BOARD%.cmd*} $pkgdir/boot/boot.scr
        fi
        if [ -f $BOOT_SCRIPTS/$BOOT_SCRIPT_VENDOR ]; then
            cp $BOOT_SCRIPTS/$BOOT_SCRIPT_VENDOR $pkgdir/boot
            $UTILS_DIR/mkimage -A arm64 -O linux -T script -C none -a 0 -e 0 -n "$VENDOR autoscript" -d $pkgdir/boot/$BOOT_SCRIPT_VENDOR $pkgdir/boot/${BOOT_SCRIPT_VENDOR%.txt}
            cd $pkgdir/boot
            zip ${BOOT_SCRIPT_VENDOR%.txt}.zip ${BOOT_SCRIPT_VENDOR%.txt} ${BOOT_SCRIPT_VENDOR}
            cd -
        fi
    fi

    ...
    # Copy boot environment
    if [ -f $BOOT_ENV/$BOOT_ENV_FILE ]; then
        cp $BOOT_ENV/$BOOT_ENV_FILE $pkgdir/boot/env.txt
        # Extra boot environment
        if [ -f $BOOT_ENV/$BOOT_ENV_FILE_EXT ]; then
            cat $BOOT_ENV/$BOOT_ENV_FILE_EXT >> $pkgdir/boot/env.txt
        fi
    fi
    if [ -f $BOOT_ENV/$BOOT_ENV_FILE_NEW ]; then
        cp $BOOT_ENV/$BOOT_ENV_FILE_NEW $pkgdir/boot/uEnv.txt
    fi

准备好的 /boot 目录,会被打包进 $BUILD_DEBS/$VERSION/$KHADAS_BOARD/${DISTRIBUTION}-${DISTRIB_RELEASE} 的 linux-board-package deb包。make过程中,deb包又会被安装到 $ROOTFS_TEMP

## Install debs in chroot
install_deb_chroot()
{
    local package=$1
    local name=$(basename $package)
    [ -e "$package" ] || {
        warning_msg "Installing $name in chroot skipped (not exist)"
        return 0
    }
    cp $package $ROOTFS_TEMP/root/$name
    info_msg "Installing $name in chroot..."
    mount_chroot "$ROOTFS_TEMP"
    chroot $ROOTFS_TEMP /bin/bash -c "dpkg -i /root/$name" || exit 1
    umount_chroot "$ROOTFS_TEMP"
    rm -f $ROOTFS_TEMP/root/$name
}

    # Install board deb in chroot
    install_deb_chroot $BUILD_DEBS/$VERSION/$KHADAS_BOARD/${DISTRIBUTION}-${DISTRIB_RELEASE}/${LINUX_BOARD_DEB}_${VERSION}_${DISTRIB_ARCH}.deb

因此,想要修改内核启动时的启动参数,就需要修改 config/bootscripts/s905_autoscript.cmd。fenix启动时因为加了 quiet 和 loglevel=0,所以没有太多的启动日志

if test "X${enable_splash}" = "Xtrue"; then
  setenv loglevel 0;
  setenv splashargs "splash quiet plymouth.ignore-serial-consoles vt.handoff=7";
fi;

可见,只要修改了enable_splash参数,就可以恢复启动日志。enable_splash定义在了 config/bootenv/amlogic_default_env.txt

上一篇下一篇

猜你喜欢

热点阅读