问题描述
给嵌入式设备更新完内核后无法启动。u-boot 中打印的错误信息
...
...
Verifying Checksum .. Bad Data CRC
...
...
Ramdisk image is corrupt or invalid
似乎是 ramdisk 镜像受损了,导致 CRC 验证失败。问题的解决步骤
- 以 chroot 进入原系统
- 调用 bash 进入终端
- 调用 update-initramfs 更新 initramfs 文件
- 调用 mkimage 传入更新的 initramfs 文件以生成新的内核 uInitrd 镜像文件
- 将新生成的文件放置到正确位置
- 重启
具体步骤代码及说明
这里假设你的原系统分区位于 /dev/sda1 ,启动分区位于 /dev/sda12#挂载原系统环境,准备进入chroot
mount -t ext4 /dev/sda1 /mnt
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
chroot /mnt /bin/bash
mount -t ext4 /dev/sda2 /mnt/boot
#由于chroot环境下的内核不为原系统内核,你需要先确定原内核版本
#通常可以确定于 /lib/modules 中,这里假设原内核版本为 5.4.0-81-generic
update-initramfs -c -t -k 5.4.0-81-generic
#通常会在 boot 分区中生成新的文件,使用下列命令使用该文件生成新的镜像,替换受损的镜像即可,请自行替换相关参数信息
mkimage -A arm64 -O linux -T ramdisk -C none -a 0 -e 0 -n uInitrd -d /boot/initrd.img-5.4.0-81-generic /boot/initrd.img
#卸载文件系统并重启
umount /mnt/boot
exit
umount /mnt/{proc,sys,dev}
umount /mnt
reboot
Code language: PHP (php)
完成
你的设备应可以正常启动了!温馨提示
在更新内核时确保内核安装完全,并在重启前将缓冲写入文件系统。Refer
- https://superuser.com/questions/111152/whats-the-proper-way-to-prepare-chroot-to-recover-a-broken-linux-installation
- https://forum.odroid.com/viewtopic.php?t=7965
了解 Starx's Home 的更多信息
Subscribe to get the latest posts sent to your email.
0 条评论