在闲置的 Redmi 5 plus (vince) 上弄了 postmarketOS 来玩,触摸屏驱动不行,结果弄完内核启动只会进 lk2nd fastboot 了。。又没有电脑,幸好留有 recovery install zip,尝试在 TWRP 下面修复一下。
用 unzip 解压卡刷包,得到 chroot 目录;用里面的工具把 postmarketOS 的分区映射出来。要用到的工具不是静态链接的,干脆直接 chroot 方便一点。
参考 postmarketOS recovery installer 代码 pmos_install_functions,用 kpartx 映射分区,我安装 postmarketOS 的块设备是 /dev/block/by-name/userdata,所以等下映射出来就是 /dev/mapper/userdata*(和 basename 有关):
mkdir chroot/dev && mkdir chroot/proc && mkdir chroot/sys
mount --bind /dev chroot/dev
mount --bind /proc chroot/proc
mount --bind /sys chroot/sys
chroot chroot bin/busybox sh
bin/kpartx -afs /dev/block/by-name/userdata
exit
第一个分区是 boot 分区,我们给挂载上:
mount -t ext2 /dev/mapper/userdata1 /data
尝试备份一下 boot:
# cp -r /data/ /system_root/
cp: Structure needs cleaning
看来文件系统有点问题。卸载卷,然后尝试修复一下:
umount /data
e2fsck -y /dev/mapper/userdata1
再挂载没问题了。重启试一下,不会进 fastboot 但是引导之后马上黑屏。看来我彻底把内核弄炸了,只好用安装包把 boot 覆盖一下。重来一次,这次把 rootfs.tar.gz 也从卡刷包里解压出来,再把 boot 解压出来然后覆盖:
tar -xzvf rootfs.tar.gz ./boot
rm -rf /data/*
cp -r /boot/* /data
umount /data
重启。oK这下进系统了,可能是 dts 问题没 wifi,doas apk fix linux-postmarketos-qcom-msm8963 然后从 /boot/dtbs 里面拿 dtb 覆盖一下 /boot 下面的就完美解决了。