撰文几周前,我看到 QQ 群有人展示他给 Redmi K40 装了 Arch Linux,我想起来我的因为屏幕摔坏而闲置了一年的 Redmi K40,想要让它再利用起来。自行了解了下,有两种方案:Project-Silicium 的 UEFI,和 postmarketOS。考虑到 postmarketOS 的默认 USB Networking 可以方便 headless 使用,就选了它。
踩坑一:落后的设备 Wiki 页
postmarketOS 官方不支持 Redmi K40。
Redmi K40 设备页 相当不友好,安装小节只有两句话:
Note: The device has not yet been merged into pmaports. Use manual installation. PostmarketOS Installation guide.
Installation guide 指出有预构建镜像、使用 pmbootstrap 构建镜像两种安装方法,添加新设备支持也围绕 pmbootstrap 进行。通读 pmbootstrap 方法后,看着 Redmi K40 设备页上一串正在运行 pmOS 的用户,我知道我需要找到他们使用的 pmaports 包仓库。
顺着页面底部 See also 里的 Mainline Kernel Source,我找到了 nikroks 的 pmaports
修复 nikroks 的 pmaports 中 APKBUILD 路径错误,构建并刷入重启后,直接回到 fastboot,说明 kernel 都过不去。AI 诊断发现是内核 config 里开了 CONFIG_EFI_ZBOOT=y 导致内核镜像格式错误。
后来,我再次到设备页翻起了 "Users owning this device",找到了 ShouChen 的博客 PostmarketOS折腾笔记 ,这篇博客完整说明了如何为 Redmi K40 安装 pmOS。他提到用的另一个 pmaports 来自 nasaarmas/pmaports-alioth,里面已经踩过 nikroks 内核 config 的坑了,并且提到了需要擦除 dtbo 分区。
结论是,尽管 nikroks 在设备维基列为唯一的 Maintainer,但根据 Git 仓库、Wiki 页更新动态,他的移植工作未完成,自2025年6月就暂停了;他的 pmaports 在2026年6月还收到 Pull Request 修复路径错误,但是没有任何回复。 nasaarmas 的 pmaports 才是可用的,最后于2026年5月更新。
踩坑二:硬件改动的内核挂起
这台 Redmi K40 屏幕被摔坏的时候,我注意到了屏幕会严重发热。决定将它再利用时,我打开后盖将触摸屏排线拔掉。没想到这给我自己挖了一个坑。
排除踩坑一的问题后,无论是 nikroks 还是 nasaarmas 的移植,手机刷入 pmOS 重启后,电脑都无法识别到 USB 设备。
为了提前暴露问题,我跟随 Initramfs/Inspecting 启用了 debug shell ,还是找不到 USB 设备,排除了 rootfs 的问题;
接着指示 AI 尝试在 initramfs 阶段和 device tree 中打开闪光灯,但是都没有效果,确认了问题还是在内核中。
最后怀疑到触摸屏上,将 0001-Added-POCO-F3-dts-panel-and-touchscreen-drivers.patch 中显示子系统(mdss)和触控 IC 总线(spi4)的 status 均设置为 "disabled",终于成功启动了。
最后
电脑成功识别到了 USB 网卡并通过 ssh user@172.16.42.1 成功登录后,指示 AI 借鉴 acc 写了个限制充电的脚本,源码:acc.tar.gz 。之后我打算注册个 postmarketOS Wiki 账户,完善 Redmi K40 设备 Wiki 页面。