Misakiotoha
Misakiotoha
发布于 2026-07-05 / 5 阅读
1
0

红米5Plus刷入Arch Linux教程——Misaki

红米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(根文件系统),挂载成功就进入用户空间了

知道文件的用途之后,刷入顺序和方式也就能刚好的理解了。

二、刷入步骤
  1. 解锁后的红米5Plus进入官方的Fastboot模式(长按 [音量下键+电源键])
  2. 电脑打开shell(Windows在你下载好的fastboot目录下空白处,Shift+右键找到Power Shell打开)
  3. 先刷入lk2nd-Redmi5Plus这个文件。
fastboot flash boot lk2nd-Redmi5Plus.img
  1. 刷入成功后,长按手机音量键强制重启,手机显示小米的开机logo之后,长按音量下键,进入lk2nd的fastboot界面。

lk2nd

  1. 接着在lk2nd的这个fastboot界面继续刷入boot-Redmi5Plus-ArchLinux-v103-stable-Misaki,成功后终端会有提示。
fastboot flash boot boot-Redmi5Plus-ArchLinux-v103-stable-Misaki.img
  1. 继续在lk2nd的fastboot界面刷入rootfs-Redmi5Plus-ArchLinux-Misaki,这一步最耗时,我刷一次要十几分钟。
fastboot flash userdata rootfs-Redmi5Plus-ArchLinux-Misaki.img
  1. 刷入完成后重启就能进入系统了
fastboot reboot

[!IMPORTANT]
这里要注意,在第四步进入lk2nd的fastboot界面。这一步当中,部分手机可能需要这样进入:手机强制重启之后在第一声震动的同时,短时间内(1s)多次按下音量下键,才能进入lk2nd的界面

注意这很吃时机,至于为什么会这样,我从串口日志里面找到的痕迹是lk2nd的行为会因为手机出厂的fastboot而变化。我手里有两部红米5Plus,其中一部就要多次按下音量下键才能进入lk2nd的界面

之后正常来说,是可以进入系统的:
进入系统

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

image

提供一些配置可以让手机提供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[未测试]

参考


评论