小改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