红米5Plus刷入Arch Linux教程——Misaki
最近参考一篇教程给红米5Plus构建了Arch Linux,虽说是参考,但是教程里面的部分内容无法复现,遇到不少kernel,dts相关的问题,最后基本都解决了。因此在此写个博客记录一下。
前言
因为自己的开源项目Yosuga其中的客户端做了嵌入式Linux的支持,因此需要一些设备来做验证,手里面有块rk3566的板子已经能够跑起项目了,不过因为屏幕大小是480*480的圆形屏幕,观感有些差,再加上近期内存价格暴涨,rk3566来跑项目客户端的成本还是太高了,刚好抽屉里面有一部解锁的红米5Plus,同样是ARM64的架构,理论上rk3566能跑的,红米5Plus都能跑。同时发现红米5Plus的GPU性能和rk3566的接近,项目在rk3566上流畅运行,到了红米5Plus上应该也差不多。况且这部手机小黄鱼里面100左右就能拿到一台4+64版本的,3+32甚至不到50就能买到。
红米5Plus当初买来是想刷个Linux在局域网里跑点服务,于是刷了个pmOS进去,但是折腾了一会就吃灰了。翻出来之后发现pmOS是musl的,毕竟是基于Alpine的发行版。但自己的项目里面用到了Live2D SDK,这个库里面的Core部分是不开源的,官方只提供给了预编译的库作为链接使用。而官方提供的链接库是glibc平台的,所以在pmOS里面直接跑我自己的项目有点难,再去做容器之类的东西跑又比较麻烦,最后去网上找了一些教程,得知这个手机的soc——msm8953是有Linux kernel主线支持的,最终决定自己构建一个。
刷入教程
一、前期准备
只提供了线刷的方式。你必须要有一台电脑,没有系统要求。以及一台成功解锁BL的红米5Plus。
[!NOTE]
红米5Plus解锁BL不需要到社区申请。在手机上插好SIM卡(SIM卡的手机号必须是和小米账号绑定的一致)去开发者模式找到解锁相关的设置,绑定小米账号到手机
电脑下载安装小米解锁工具,手机长按音量下键+电源键进入fastboot模式
电脑点击一键解锁即可
你需要在你的电脑上安装以下软件:
- fastboot
- 小米驱动(不一定需要,至少我没用到)
[!NOTE]
不同的系统有不同的安装方式,自行百度。fastboot是必须要安装的,一般fastboot会和adb捆绑安装。
你需要下载以下文件到你的电脑上:
稍微解释一下不同的文件都是干什么的:
[!NOTE]
lk2nd-Redmi5Plus,就是lk2nd,这是一个二级引导加载器,专门用于 Qualcomm MSM 平台的手机/平板。用来解决原厂 bootloader 与主线 Linux 内核之间的兼容性问题这里就不得不说一下在MSM平台上Linux的启动流程:上电后先启动芯片内部固化的
PBL ->手机原厂LK ->lk2nd ->Linux Kernel ->用户空间(rootfs)而正常启动安卓的流程则是:上电后先启动芯片内部固化的
PBL ->手机原厂LK ->Android使用
lk2nd就是为了加载Linux Kernel,因为手机原厂Little Kernel(也就是bootloader)只认识Android 的启动协议,不懂Linux的设备树
[!NOTE]
boot-Redmi5Plus-ArchLinux-v103-stable-Misaki,这里面包括了Linux Kernel,DTB,initramfs。rootfs-Redmi5Plus-ArchLinux-Misaki,这是
Arch Linux的本体,Linux Kernel成功启动之后就会挂载rootfs(根文件系统),挂载成功就进入用户空间了
知道文件的用途之后,刷入顺序和方式也就能刚好的理解了。
二、刷入步骤
- 解锁后的红米5Plus进入官方的Fastboot模式(长按 [音量下键+电源键])
- 电脑打开shell(Windows在你下载好的fastboot目录下空白处,Shift+右键找到Power Shell打开)
- 先刷入lk2nd-Redmi5Plus这个文件。
fastboot flash boot lk2nd-Redmi5Plus.img
- 刷入成功后,长按手机音量键强制重启,手机显示小米的开机logo之后,长按音量下键,进入lk2nd的fastboot界面。

- 接着在lk2nd的这个fastboot界面继续刷入boot-Redmi5Plus-ArchLinux-v103-stable-Misaki,成功后终端会有提示。
fastboot flash boot boot-Redmi5Plus-ArchLinux-v103-stable-Misaki.img
- 继续在lk2nd的fastboot界面刷入rootfs-Redmi5Plus-ArchLinux-Misaki,这一步最耗时,我刷一次要十几分钟。
fastboot flash userdata rootfs-Redmi5Plus-ArchLinux-Misaki.img
- 刷入完成后重启就能进入系统了
fastboot reboot
[!IMPORTANT]
这里要注意,在第四步进入lk2nd的fastboot界面。这一步当中,部分手机可能需要这样进入:手机强制重启之后在第一声震动的同时,短时间内(1s)多次按下音量下键,才能进入lk2nd的界面注意这很吃时机,至于为什么会这样,我从串口日志里面找到的痕迹是lk2nd的行为会因为手机出厂的fastboot而变化。我手里有两部红米5Plus,其中一部就要多次按下音量下键才能进入lk2nd的界面
之后正常来说,是可以进入系统的:

同时如果你使用usb将设备与电脑连接,你的电脑正常会多出一个网卡:

提供一些配置可以让手机提供usb使用电脑的网络去上网,这边给出默认配置。
[root@alarm ~]# cat /etc/systemd/network/20-usb0.network
[Match]
Name=usb0
[Network]
Address=192.168.7.2/24
[Link]
RequiredForOnline=no
[!CAUTION]
如果你运气十分的不好,发现手机usb连接电脑出现了网卡,但是手机屏幕却没有亮起,不用慌张,这不是你的问题,也不是我的问题这是因为红米5Plus当初在制造的时候触摸屏有两家供应商,分别是
Synaptics的RMI4和Novatek的NT36672本次提供的boot当中,我预编译的为
Novatek的NT36672触摸屏,不过你不用担心,很快我会为Synaptics的RMI4触摸屏也编译一个专属的boot,但是我手里没有这个型号屏幕的手机,无法完成验证,因此如果你出现了手机usb连接电脑出现了网卡,但是手机屏幕却没有亮起的情况,请联系我的邮箱:misakiotoha@126.com,我需要你来一同协助我完成验证。
手机的配置是这样的,有三个用户,密码都是123456,用户名分别是alarm,root,misaki
[root@alarm ~]# fastfetch
-` root@alarm
.o+` ----------
`ooo/ OS: Arch Linux ARM aarch64
`+oooo: Host: Xiaomi Redmi 5 Plus
`+oooooo: Kernel: Linux 6.11.6-ArchLinux-qcom-msm8953-Misakiotoha+
-+oooooo+: Uptime: 31 mins
`/:-:++oooo+: Packages: 595 (pacman)
`/++++/+++++++: Shell: bash 5.3.15
`/++++++++++++++: Display (DSI-1): 1080x2160 in 6", 60 Hz
`/+++ooooooooooooo/` Terminal: /dev/pts/1 10.3p1
./ooosssso++osssssso+` CPU: msm8953 (8)
.oossssso-````/ossssss+` GPU: Qualcomm FD506
-osssssso. :ssssssso. Memory: 315.88 MiB / 3.47 GiB (9%)
:osssssss/ osssso+++. Swap: Disabled
/ossssssss/ +ssssooo/- Disk (/): 4.28 GiB / 52.11 GiB (8%) - ext4
`/ossssso+/:- -:/+osssso+- Local IP (wlan0): 192.168.1.111/24
`+sso+:-` `.-/+oso: Battery: 93% [Unknown]
`++:. `-/+/ Locale: C
.` `/
如果你发现Disk那里显示的是8GB左右的硬盘大小,那么请执行:
# 首先找出硬盘大小最大的一个分区
lsblk
# 在我这里是/dev/mmcblk0p50,正常来说到你手机上应该也是一样的
# 扩展文件系统到分区边界,执行前确认你最大的那个硬盘分区
resize2fs /dev/mmcblk0p50
# 验证
df -h
最后,当前的boot支持驱动的硬件功能如下,包括待修复的:
- 屏幕显示 (DSI/Panel)
- GPU (Adreno 506)
- 触摸屏 (NT36525)
- WiFi (WCNSS)
- 蓝牙
- USB RNDIS
- 耳机输出 (HPHL/HPHR)
- 麦克风录音 (AMIC1)
- 电池 (qcom_fg)[部分支持,暂时无法检测充电状态]
- 加速度计 + 陀螺仪 (LSM6DSL)
- SD 卡扩展存储
- 扬声器 (TAS2557)[尝试过合并一个没有被并入主线的**提交**,成功注册了设备,但是无法让扬声器发声,仍在尝试修复 ]
- 听筒 (EAR PA)[暂未验证,估计不可用,待修复]
- 耳机孔麦克风 (Headset Mic)[未验证,因为我手里没有3.5mm的带录音输入的有线耳机]
- 磁力计[未启用,估计只能做到部分支持]
- GPS/GNSS[同磁力计]
- 摄像头[未测试]
- 光线/距离传感器[未测试]
- NFC[未测试]
参考
- Arch Linux 在红米5 Plus (MSM8953) 上的移植
- pmOS for Redmi 5 Plus "pmOS-wiki")