[hardware development] [小米平板5] 如何优雅地使用单系统Linux (以Debian为例)
Tofloor
poster avatar
mozixun
Moderator
2025-07-19 15:34
Author

@空木蓮華 大佬的帮助下,我的米板5成功启动了Linux 6.14.11内核+Debian Testing KDE单系统,我在此分享一下单系统的使用教程

在此之前,你需要:

1.在PBRP里确定你要把哪个分区作为rootfs以及它的挂载点是多少(比如userdata分区在安卓和Rec下是/dev/block/sda31,那么接下来,它在Linux主线内核里的挂载点就是/dev/sda31)

(我这边建议是用userdata分区作为根目录,super分区做SWAP)

实际上,如果你的米板5只需要跑Linux不跑安卓/Win等多系统,根本不需要那么多步骤,直接一顿暴力输出就可以了:

一.制作根文件系统:

1.安装必需依赖

sudo apt install systemd-container debootstrap qemu-user-static binfmt-support -y

2.在宿主机环境先进行rootfs第一步制作:

sudo debootstrap --arch=arm64  --variant=minbase  --foreign trixie  ./rootfs   http://mirrors.ustc.edu.cn/debian/

3.第一步制作完成后,进入rootfs文件夹,在当前文件夹打开终端,输入以下内容并回车

sudo systemd-nspawn

然后它就会自动进行二进制翻译且进入chroot环境中 (更多详情可以了解systemd-nspawn容器化),接着在容器内输入:

/debootstrap/debootstrap --second-stage

等它跑完后,rootfs目录下就是一个正常的基础rootfs了

4.接着按Ctrl+]三次杀死容器,再输入sudo systemd-nspawn进入容器内安装必须的内容就可以了,我在这里贴一下装GNOME/KDE的命令(不建议装GNOME,巨卡)

5.先 sudo apt install vim 安装vim,然后 sudo vim /etc/apt/apt.conf.d/99-disable-verity 再在里面加入以下两行:

Acquire::https::Verify-Peer "false";
Acquire::https::Verify-Host "false";

如果不加就会导致apt update时SSL验证失败

6.再移除/etc/apt/sources.list,使用更现代的DEB822规范,再输入 sudo vim /etc/apt/sources.list.d/debian.sources 然后对着https://mirrors.tuna.tsinghua.edu.cn/help/debian 配置你的DEB822软件源即可

注意:qbootctl这个包必须装!!!否则你开机后bootloader会误判你启动失败而超过7次触发A/B分区保护机制而卡fastboot,我排查了整整快一个月才排查出来是这个问题

安装GNOME桌面的:

sudo apt install wget dialog -y
sudo apt install gnome-session qbootctl libqrtr1 protection-domain-mapper qrtr-tools rmtfs tqftpserv sudo apt upower apt-file debconf busybox ptyxis vim dpkg gedit gnome-software firefox-esr flatpak gnome-software-plugin-flatpak f2fs-tools loupe net-tools gnome-screenshot gnome-tweaks gnome-clocks gnome-calendar util-linux coreutils ntpsec-ntpdate gnome-logs fonts-noto-color-emoji fonts-noto gnome-terminal nautilus-extension-gnome-terminal -y
sudo apt autopurge plymouth -y

安装KDE桌面的:

sudo apt install wget dialog -y
sudo apt install kde-standard qbootctl libqrtr1 protection-domain-mapper qrtr-tools rmtfs tqftpserv flatpak kio-admin net-tools plasma-discover-backend-flatpak devscripts fonts-noto-color-emoji fonts-noto util-linux f2fs-tools coreutils vim dpkg sudo apt upower apt-file locales -y
sudo apt autopurge plymouth -y

7.配置一个新用户(我的操作是:useradd <名字>,先/home目录下新建用户文件夹权限设置为755,然后/etc/sudoers里给用户名完整的sudo权限,最后设置该用户密码)

8.再将米板5需要的firmware固件包下载: https://wwyg.lanzouo.com/icEaj31cwf4d 解压zip将两deb包拷贝入rootfs目录中,再在容器内通过apt install ./xx.deb语法安装上

9.将之前install/modules目录的6.11.4-xxx的那个内核模块modules目录通过cp -a命令拷贝到rootfs下的usr/lib/modules里( 也就是rootfs目录下的usr/lib/modules应该有6.14.11-xxx的那个目录 )

10.修改rootfs的etc/fstab,在里面加上根目录/的标识 (以我的根目录在PBRP里的实际挂载点为/dev/block/sda31为例) :

(/dev/sda31没写错,这个内核/dev目录下原本的block设备都会移出来)
b711f376d5ef312c23c8641942c31e45.jpg

如果你的根目录是ext4文件系统,把f2fs改成ext4即可,fstab同时支持指定/dev/sdaXX或者UUID=xx来指定指向的分区,最后用"0 1"就是用于接下来可以手动触发文件系统修复的

注:之所以要purge掉plymouth,是因为单系统启动下本教程的Linux启动方式与安卓是一样走本机bootloader直接启动的,所以本来就无法显示plymouth开机界面,只能显示systemd命令行

装完之后就可以搞一个f2fs/ext4的镜像接着用cp -a命令把rootfs内容全部复制进去,具体可以问AI怎么用dd if+mke2fs/mkfs.f2fs做镜像文件.

11.写入umount-root.service (用于让systemd能正常解除挂载根目录,防止你的根目录因意外断电而重启进Fastboot)

新建这个文件: /etc/systemd/system/unmount-root.service

[Unit]
Description=Force unmount root device before shutdown
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target 
Requires=local-fs.target[Service]
Type=oneshot
ExecStop=/bin/sh -c "/usr/bin/fuser -km /dev/block/sda31; /bin/umount -fl /dev/sda31"  
TimeoutStopSec=5s
RemainAfterExit=yes
[Install]
WantedBy=shutdown.target

用你习惯的文本编辑器保存后输入

sudo systemctl enable umount-root.service && sudo systemctl daemon-reload

即可

注意:其中/dev/sda31是你实际上的rootfs分区位置

12.编辑/etc/systemd/system.conf,把DefaultTimeoutStopSec那一行注释去掉,把90s改成7s,防止systemd跑时间过长导致Linux内核直接强行关机触发重启进fastboot

二.制作boot和新的dtbo镜像并刷入

教程见: https://bbs.deepin.org.cn/post/289590

看之前注意: 如果你需要能手动指定检查文件系统的功能(防止重启后莫名其妙卡fastboot),请把制作mkbootimg命令里CMDLINE中的rw改ro!否则无法实现

三.拷贝(刷入)rootfs

1.将设备重启至PBRP(第三方rec),然后先将你的rootfs目标分区通过adb shell进入PBRP的sh接着调用mke2fs或者mkfs.f2fs等格式化为你需要的文件系统

2.在adb shell中操作将其挂载到rec中(我建议/root下新建一个mount目录,然后挂载到/root/mount,因为/root本来就是空的),例如:

mkdir -p /root/mount && mount /dev/block/sda31 /root/mount

3.挂载后不要关闭当前终端,再开一个终端把你之前制作好的rootfs镜像文件push进去 (比如你挂载在/root/mount,那么就执行adb push rootfs.img /root/mount,然后/root/mount目录下就会出现rootfs.img镜像)

4.进入你挂载的文件夹,再新建一个mount-xx文件夹方便识别,将你传进去的rootfs.img挂载到mount-xx中

5.进入mount-xx这个文件夹,通过 cp -a * ../ 将rootfs镜像目录里所有文件全部拷贝出来

6.先解除你挂载的rootfs镜像文件,再删除你临时新建的挂载文件夹和rootfs镜像文件,最后解除你挂载的分区(比如/dev/block/sda31),然后重启到fastboot

四.刷入boot镜像

1.重启到fastboot后,先抹掉dtbo所有分区(fastboot erase dtbo_ab)

2.把你之前做的boot.img刷进去 (在boot.img所在文件夹里打开终端,跑 fastboot flash boot_ab boot.img 即可)

3.重启进入Linux系统:

fastboot reboot

至此,你的Linux发行版已经刷入成功,我这边最终效果如下:

米板5-Debian.jpg

最后,如果你需要手动触发修复文件系统

因为f2fs文件系统修复速度较慢,每次都修复比较费时,但如果经常不fsck就会导致某次重启后文件系统损坏,如果你之前制作boot.img时把根目录挂载改为了ro并将你的分区写进了fstab,那么只需要在你想下一次启动修复文件系统时,在根目录新建一个forcefsck文件即可,一键新建命令可以是:

touch /forcefsck

然后重启后下一次进入系统时就会触发systemd-fsck进行文件系统检查

编者按:如果你认为这个教程讲得模棱两可,那么说明你对于Linux的分区与本教程boot分区+rootfs的引导启动机制,及如何制作镜像文件并使用cp -a拷贝等命令并不了解,那个人建议不要随意折腾,如果你真的想或者有问题建议私信我

Reply Favorite View the author
All Replies
新手小白
deepin
2025-07-19 18:22
#1
It has been deleted!
流星追月
deepin
2025-07-19 22:29
#2

这能刷进去,没几把刷子不行的,可以的!

Reply View the author
绿竹
deepin
2025-07-19 23:43
#3
It has been deleted!
deepin-流云
Moderator
Community OP
2025-07-21 09:44
#4

啥时候刷上deepin就给你一个大大的置顶推荐shamed

Reply View the author
mozixun
Moderator
2025-07-21 11:01
#5
deepin-流云

啥时候刷上deepin就给你一个大大的置顶推荐shamed

等DDE的treeland触控适配做完就来

Reply View the author
应用商店-小鱿鱼
Moderator
2025-07-21 11:30
#6

agree

玲珑吃到了mozixun刷机成功的一波红利~~~

Reply View the author
归灵祈昱
deepin
14 hours ago
#7

感谢分享,来交作业哈哈
image.png

Reply View the author
mozixun
Moderator
6 hours ago
#8
归灵祈昱

感谢分享,来交作业哈哈
image.png

qbootctl装了没,我因为没装而排查重启了好几次就会莫名其妙进fastboot的问题好久,小米平板5的bootloader会校验启动后是否成功,需要qbootctl这个包启动时自动给bootloader发送启动已经成功的通知

Reply View the author
归灵祈昱
deepin
an hour ago
#9
mozixun

qbootctl装了没,我因为没装而排查重启了好几次就会莫名其妙进fastboot的问题好久,小米平板5的bootloader会校验启动后是否成功,需要qbootctl这个包启动时自动给bootloader发送启动已经成功的通知

装了的

另外我这边有一点点不一样是sda33放Linux, sda31放安卓,用AB槽位切换双系统,理论上来说多次启动失败也就是回滚到安卓的A槽位,不会卡Fastboot(

Reply View the author