美文网首页
小改fenix镜像

小改fenix镜像

作者: 叶迎宪 | 来源:发表于2023-05-18 11:29 被阅读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

    相关文章

      网友评论

          本文标题:小改fenix镜像

          本文链接:https://www.haomeiwen.com/subject/ulzisdtx.html