1.问题描述
-
香橙派核编译和安装分为如下四部:
bash# 第1步:配置内核(orangepi5plus_linux_defconfig是我自己保存的配置文件) make orangepi5plus_linux_defconfig # 第2步:编译内核 make -j10 # 第3部:安装内核模块 sudo make modules_install # 第4部:安装内核镜像 sudo make install -
在执行到第4步时出现如下报错
bashorangepi@orangepi5plus:~/work/linux-orangepi$ sudo make install INSTALL /boot run-parts: executing /etc/kernel/postinst.d/dkms 6.1.99 /boot/vmlinuz-6.1.99 * dkms: running auto installation service for kernel 6.1.99 [ OK ] run-parts: executing /etc/kernel/postinst.d/initramfs-tools 6.1.99 /boot/vmlinuz-6.1.99 update-initramfs: Generating /boot/initrd.img-6.1.99 update-initramfs: Converting to u-boot format run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 6.1.99 /boot/vmlinuz-6.1.99 run-parts: executing /etc/kernel/postinst.d/xx-initramfs-cleanup 6.1.99 /boot/vmlinuz-6.1.99 run-parts: executing /etc/kernel/postinst.d/xx-update-initrd-links 6.1.99 /boot/vmlinuz-6.1.99 run-parts: /etc/kernel/postinst.d/xx-update-initrd-links exited with return code 1 make: *** [arch/arm64/Makefile:169: install] Error 1
-
从报错信息可以看出 是在执行脚本
/etc/kernel/postinst.d/xx-update-initrd-links时返回1并退出
2.问题分析和解决
-
通过在脚本中加打印的方式发现是在执行
tmp=$(lsblk -f | grep "boot" | grep "vfat")时退出

-
tmp=$(lsblk -f | grep "boot" | grep "vfat")是查看/boot是否为vfat文件系统,如果是则保存分区信息到tmp变量,否则tmp变量为空,单独运行一下lsblk -f,会发现/boot并没有挂在独立的分区上,也没有vfat文件系统,这会导致grep命令找不带匹配项,从而返回1;又因为脚本中存在set -e导致任何命令在返回非零状态都会终止运行。bashorangepi@orangepi5plus:~/work/linux-orangepi$ lsblk -f NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS mtdblock0 mmcblk1 └─mmcblk1p1 ext4 1.0 opi_root 246cb637-ef48-45eb-b006-7e1a612b1b33 51.3G 10% /var/log.hdd / mmcblk0 └─mmcblk0p1 ext4 1.0 desktop-rootfs 1883fc13-4793-4474-ac53-5209e822531b mmcblk0boot0 mmcblk0boot1 zram0 [SWAP] zram1 171.2M 1% /var/log -
解决办法 :依据前后文
tmp=$(lsblk -f | grep "boot" | grep "vfat")即使没有匹配到合适的内容,将tmp赋空值即可,不应该立即退出,j经验证将set -e删除即可正常安装,如下:bashorangepi@orangepi5plus:~/work/linux-orangepi$ sudo make install INSTALL /boot run-parts: executing /etc/kernel/postinst.d/dkms 6.1.99 /boot/vmlinuz-6.1.99 * dkms: running auto installation service for kernel 6.1.99 [ OK ] run-parts: executing /etc/kernel/postinst.d/initramfs-tools 6.1.99 /boot/vmlinuz-6.1.99 update-initramfs: Generating /boot/initrd.img-6.1.99 update-initramfs: Converting to u-boot format run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 6.1.99 /boot/vmlinuz-6.1.99 run-parts: executing /etc/kernel/postinst.d/xx-initramfs-cleanup 6.1.99 /boot/vmlinuz-6.1.99 run-parts: executing /etc/kernel/postinst.d/xx-update-initrd-links 6.1.99 /boot/vmlinuz-6.1.99