如何在小米平板5上运行 deepin 23 ?

news2025/1/9 14:56:03

deepin 23 加入了 ARM64 支持,这里尝试将 deepin 系统刷入平板中,平常使用中,带个笔记本电脑有时候也会嫌比较麻烦,把 Linux 系统刷入平板中既满足了使用需要,又满足了轻便的需求。为什么不使用 Termux ?虽然 Termux 很方便,但是不想直接嵌套一层系统运行,希望能够获取更好的使用性能。然后上网查阅资料后,选中了小米平板5,不得不说小米为发烧友而生。下面是关于小米平板5刷入系统的介绍,关于获取 root 权限,以及解 bootloader 锁的内容不做过多介绍。先叠个甲,如果有人想尝试刷机,请先确认具备刷机相关知识,产生的后果自行负责。
 
制作根文件系统
git clone https://github.com/chenchongbiao/dev-tools
go mod vendor
makesudo ./bin/dp-build build rootfsimg -n="deepin" -v="beige" -c="main,commercial,community" -a="arm64" -s="deb https://community-packages.deepin.com/beige/ beige main commercial community" -d "mipad5"
如果需要自己制作,默认不安装图形界面。可以用nmcli 配置下网络。安装以下桌面包。
sudo apt install deepin-desktop-environment-base deepin-desktop-environment-cli deepin-desktop-environment-core deepin-desktop-environment-extras
 
编译内核
安装编译环境
sudo apt install libncurses-dev gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf llvm gcc-aarch64-linux-gnu
获取内核源码
git clone https://github.com/maverickjb/linux-6.1.10.git
编译源码
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- xiaomi_nabu_maverick_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image.gz dtbs
make ARCH=arm64 install INSTALL_PATH=../install/boot
make ARCH=arm64 dtbs_install INSTALL_DTBS_PATH=../install/boot/dtbsmake ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules
rm -rf ../install/lib/modules/
make ARCH=arm64 modules_install INSTALL_MOD_PATH=../install打包 boot.img
安装 mkbootimg
sudo apt install mkbootimg
cat linux-6.1.10/arch/arm64/boot/Image.gz linux-6.1.10/arch/arm64/boot/dts/qcom/sm8150-xiaomi-nabu-maverick.dtb > zImage
mkbootimg --kernel zImage --cmdline "console=tty0 root=/dev/sda33 rw rootwait" --base 0x00000000 --kernel_offset 0x00008000 --tags_offset 0x00000100 --pagesize 4096 --id -o boot.img/dev/sda33. 是用来安装 deepin 系统的分区名称。
ps: mkbootimg 1:34.0.4-1 上使用了gki 模块,但是打包并没有引入该模块。使用了 Docker 安装低版本的mkbootimg 使用。
编译UEFI固件
 
git clone --recursive git@github.com:edk2-porting/edk2-msm.git
将 edk2-msm/Platform/Xiaomi/sm8150/FdtBlob/nabu/ 中的dtb文件 sm8150-xiaomi-nabu.dtb 替换为前面编译的内核DTB文件,重命名为 sm8150-xiaomi-nabu.dtb 并构建镜像:
./build.sh -d nabu
 
对 UFS 进行分区
userdata 重新分区
 
要修改 UFS 上的分区,需要使用 Orangefox Recovery 第三方恢复环境,xiaomi-nabu-orangefox.img
手机USB接入系统,需要使用 adb 工具。
sudo apt install adb fastboot
手机的开发者选项打开USB调试。
进入 bootloader
adb reboot bootloader
开始启动恢复映像。屏幕打开后,使用 adb shell 继续操作。
需要使用 fastboot 工具
sudo apt install adb fastboot
fastboot boot xiaomi-nabu-orangefox.img
adb shell
查看分区
ls -l /dev/block/bootdevice/by-name/ | grep userdata
lrwxrwxrwx 1 root root 16 1970-01-16 07:05 userdata -> /dev/block/sda31
userdata 分区位于整个磁盘的第31个分区。
要调整 userdata 分区的大小,需要使用parted命令工具。adb shell 终端中输入 parted 。
parted /dev/block/sda
输入 print 命令列出 /dev/block/sda 的所有分区:
(parted) print
print
Model: SAMSUNG KLUFG8RHGB-B0E1 (scsi)
Disk /dev/block/sda: 509GB
Sector size (logical/physical): 4096B/4096B
Partition Table: gpt
Disk Flags:Number Start End Size File system Name Flags
1 24.6kB 32.8kB 8192B switch
2 32.8kB 65.5kB 32.8kB ssd
3 65.5kB 98.3kB 32.8kB dbg
4 98.3kB 131kB 32.8kB bk01
5 131kB 262kB 131kB bk02
6 262kB 524kB 262kB bk03
7 524kB 1049kB 524kB bk04
8 1049kB 1573kB 524kB keystore
9 1573kB 2097kB 524kB frp
10 2097kB 4194kB 2097kB countrycode
11 4194kB 8389kB 4194kB misc
12 8389kB 12.6MB 4194kB vm-data
13 12.6MB 16.8MB 4194kB bk06
14 16.8MB 25.2MB 8389kB logfs
15 25.2MB 33.6MB 8389kB ffu
16 33.6MB 50.3MB 16.8MB oops
17 50.3MB 67.1MB 16.8MB devinfo
18 67.1MB 83.9MB 16.8MB oem_misc1
19 83.9MB 101MB 16.8MB ext4 metadata
20 101MB 134MB 32.9MB bk08
21 134MB 168MB 34.2MB splash
22 168MB 201MB 33.6MB bk09
23 201MB 9328MB 9127MB super
24 9328MB 9328MB 131kB vbmeta_system_a
25 9328MB 9328MB 131kB vbmeta_system_b
26 9328MB 9396MB 67.1MB logdump
27 9396MB 9530MB 134MB minidump
28 9530MB 9664MB 134MB rawdump
29 9664MB 10.7GB 1074MB ext4 cust
30 10.7GB 10.9GB 134MB ext4 rescue
31 10.9GB 509GB 499GB userdata重新划分 31 分区
(parted) resizepart 31
resizepart 31
End? [210GB]? 209GB
209GB
Warning: Shrinking a partition can cause data loss, are you sure you want to
continue?
Yes/No? Yes
Yes使用 print 再次查看结果,分区31的分区变小了。
扩展主分区
如果需要将分区数量从 32 扩展到 64,q 退出分区工具,执行下面的命令。
sgdisk --resize-table 64 /dev/block/sda
创建 esp 分区
 
parted /dev/block/sda
(parted) mkpart esp fat32 209GB 210GB
# set the esp partition as ​​EFI system partition type​​退出分区工具执行
mkfs.fat -F32 -s1 /dev/block/sda32
进入分区工具,启用 esp
set 32 esp on
使用 print 再次查看结果
(parted) print
print
Model: SAMSUNG KLUFG8RHGB-B0E1 (scsi)
Disk /dev/block/sda: 509GB
Sector size (logical/physical): 4096B/4096B
Partition Table: gpt
Disk Flags:Number Start End Size File system Name Flags
1 24.6kB 32.8kB 8192B switch
2 32.8kB 65.5kB 32.8kB ssd
3 65.5kB 98.3kB 32.8kB dbg
4 98.3kB 131kB 32.8kB bk01
5 131kB 262kB 131kB bk02
6 262kB 524kB 262kB bk03
7 524kB 1049kB 524kB bk04
8 1049kB 1573kB 524kB keystore
9 1573kB 2097kB 524kB frp
10 2097kB 4194kB 2097kB countrycode
11 4194kB 8389kB 4194kB misc
12 8389kB 12.6MB 4194kB vm-data
13 12.6MB 16.8MB 4194kB bk06
14 16.8MB 25.2MB 8389kB logfs
15 25.2MB 33.6MB 8389kB ffu
16 33.6MB 50.3MB 16.8MB oops
17 50.3MB 67.1MB 16.8MB devinfo
18 67.1MB 83.9MB 16.8MB oem_misc1
19 83.9MB 101MB 16.8MB ext4 metadata
20 101MB 134MB 32.9MB bk08
21 134MB 168MB 34.2MB splash
22 168MB 201MB 33.6MB bk09
23 201MB 9328MB 9127MB super
24 9328MB 9328MB 131kB vbmeta_system_a
25 9328MB 9328MB 131kB vbmeta_system_b
26 9328MB 9396MB 67.1MB logdump
27 9396MB 9530MB 134MB minidump
28 9530MB 9664MB 134MB rawdump
29 9664MB 10.7GB 1074MB ext4 cust
30 10.7GB 10.9GB 134MB ext4 rescue
31 10.9GB 209GB 198GB userdata
32 209GB 210GB 1000MB esp b检查分区是否正确,q 退出。
新建分区
 
(parted) mkpart deepin ext4 210GB 509GB
mkpart pmos ext4 210GB 509GBdeepin 为分区名,ext4 为文件系统,210GB起始位置,509为前面userdata原来的结束位置。
(parted) print
print
Model: SAMSUNG KLUFG8RHGB-B0E1 (scsi)
Disk /dev/block/sda: 509GB
Sector size (logical/physical): 4096B/4096B
Partition Table: gpt
Disk Flags:Number Start End Size File system Name Flags
1 24.6kB 32.8kB 8192B switch
2 32.8kB 65.5kB 32.8kB ssd
3 65.5kB 98.3kB 32.8kB dbg
4 98.3kB 131kB 32.8kB bk01
5 131kB 262kB 131kB bk02
6 262kB 524kB 262kB bk03
7 524kB 1049kB 524kB bk04
8 1049kB 1573kB 524kB keystore
9 1573kB 2097kB 524kB frp
10 2097kB 4194kB 2097kB countrycode
11 4194kB 8389kB 4194kB misc
12 8389kB 12.6MB 4194kB vm-data
13 12.6MB 16.8MB 4194kB bk06
14 16.8MB 25.2MB 8389kB logfs
15 25.2MB 33.6MB 8389kB ffu
16 33.6MB 50.3MB 16.8MB oops
17 50.3MB 67.1MB 16.8MB devinfo
18 67.1MB 83.9MB 16.8MB oem_misc1
19 83.9MB 101MB 16.8MB ext4 metadata
20 101MB 134MB 32.9MB bk08
21 134MB 168MB 34.2MB splash
22 168MB 201MB 33.6MB bk09
23 201MB 9328MB 9127MB super
24 9328MB 9328MB 131kB vbmeta_system_a
25 9328MB 9328MB 131kB vbmeta_system_b
26 9328MB 9396MB 67.1MB logdump
27 9396MB 9530MB 134MB minidump
28 9530MB 9664MB 134MB rawdump
29 9664MB 10.7GB 1074MB ext4 cust
30 10.7GB 10.9GB 134MB ext4 rescue
31 10.9GB 209GB 198GB userdata
32 209GB 210GB 1000MB esp boot, esp
33 210GB 509GB 299GB ext4 deepin重启设备。
 
获取 MIUI 设备树和引导
这里需要获取MIUI的设备树和引导用来后续切换系统使用。
需要获取平板的root权限,这里不做介绍。平板上安装 linuxswitch 后,点击 ​​Dump android images​​,平板这里使用板内部存储中的 ​​linux​​ 文件夹,并且从该文件夹中取出 ​​android.boot.img​​ 和 ​​android.dtbo.img​​,把前面打包的 ​​boot.img​​ 重命名为 ​​linux.boot.img​​ 放入平板内部存储中的 ​​linux​​ 文件夹。
刷入系统
进入 bootloader
 
adb reboot bootloader
找到准备好的系统镜像,开始之前,我们需要禁用 Android Verified Boot (AVB) 功能,否则将无法启动系统。
╰─❯ fastboot flash vbmeta_ab --disable-verification --disable-verity vbmeta.img
Sending 'vbmeta_ab' (4 KB) OKAY [ 0.013s] Writing 'vbmeta_ab' (bootloader) Partition vbmeta_a flashed successfully
(bootloader) Partition vbmeta_b flashed successfully
OKAY [ 0.006s] Finished. Total time: 0.046s 
清除设备树
fastboot erase dtbo_ab
刷入内核映像 boot.img
fastboot flash boot_ab linux.boot.img
Sending 'boot_ab' (13052 KB) OKAY [ 0.327s] Writing 'boot_ab' OKAY [ 0.052s] Finished. Total time: 0.663s刷入rootfs img
fastboot flash deepin rootfs.img
deepin 为前面创建的分区名。
最后重启。
 
初始化配置
制作镜像时默认创建了用户,用户名:deepin,密码:deepin
第一次进入系统需要默认是竖屏,需要在控制中心-->显示-->方向270度。
系统默认英文,控制中心-->键盘和语言-->语言-->添加简体中文。
音频问题禁用 pulseaudio,使用pipewire-pulse。
systemctl --user disable pulseaudio.{socket,service}
systemctl --user mask pulseaudiosystemctl --user enable pipewire.{socket,service}
systemctl --user enable pipewire-pulse.{socket,service}刷入系统没自动扩容需要手动操作。
sudo resize2fs /dev/sda33
 
安装Switch2Linux
在 Linux 上 s2a 工具,解压,并把之前的 ​​android.boot.img​​ 和 ​​android.dtbo.img​​ 拷到系统上,放到 s2a 文件夹里。
.
├── install.sh
├── s2a
│ ├── android.boot.img
│ ├── android.dtbo.img
│ └── s2a
├── S2A.desktop
└── s2a.svg运行 ​​sudo ./install.sh​​ 安装 s2a,注销并重新登录,即可在菜单栏中找到 Switch2Android 选项。
desktop 文件中的 pkexec /opt/s2a/s2a 在,deepin 上执行pkexec会被切换,修改 desktop文件。
Exec="pkexec /opt/s2a/s2a"
在安卓侧可以从 Switch to Linux 这个 app 切换到 Linux。
 
尝试启用 UEFI
不过看上去并没有成功,刷入后也没自动识别出放在efi分区的引导,可能引导文件不对。不过看项目没看到资料,先搁置。
编译UEFI固件
克隆 edk2-msm 仓库
git clone --recursive git@github.com:edk2-porting/edk2-msm.git
sudo apt install clang
cd edk2-msm
./build.sh -d nabu生成boot-nabu.img文件
 
编译UEFI固件
╰─❯ sudo blkid /dev/sda32
/dev/sda32: UUID="0136-67CF" BLOCK_SIZE="4096" TYPE="vfat" PARTLABEL="esp" PARTUUID="5542f54c-b776-49bf-992e-3cec1e7bfe3d"
╰─❯ sudo blkid /devsda33
/dev/sda33: UUID="dfc62099-10f1-4f7d-a21c-bbc5f44d2345" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="deepin" PARTUUID="5344ad3c-085c-4265-bee7-045aef1bb791"修改 /etc/fstab 为上面的 UUID
UUID=dfc62099-10f1-4f7d-a21c-bbc5f44d2345 / ext4 errors=remount-ro,x-systemd.growfs 0 1
UUID=0136-67CF /boot/efi vfat umask=0077 0 1 
安装GRUB工具并生成RAM盘
sudo apt-get install grub2-common grub-efi
sudo grub-install --target=arm64-efi --boot-directory=/bootsudo apt install initramfs-tools
sudo mkinitramfs -o /boot/initrd.img 6.1.10-nabu+生成GRUB配置文件:
sudo grub-mkconfig -o /boot/grub/grub.cfg
 
  刷入 boot.img
进入 bootloader
fastboot flash boot boot-nabu.img
 
效果图及如下:
 
蓝牙,触屏,WIFI,音频,功能正常,界面流畅,暂时未遇到严重问题。

相关阅读:

(1)deepin 全版本镜像下载(含 deepin V15)

(2)deepin 多架构适配之路历程揭秘

(3)【视频】在小米平板5使用deepin 23和MIUI14

(4)支持社区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2257236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为HarmonyOS 快速构建各种文本识别应用 -- 通用文字识别

适用场景 通用文字识别,是通过拍照、扫描等光学输入方式,将各种票据、卡证、表格、报刊、书籍等印刷品文字转化为图像信息,再利用文字识别技术将图像信息转化为计算机等设备可以使用的字符信息的技术。 可以对文档翻拍、街景翻拍等图片进行…

【系统架构核心服务设计】使用 Redis ZSET 实现排行榜服务

目录 一、排行榜的应用场景 二、排行榜技术的特点 三、使用Redis ZSET实现排行榜 3.1 引入依赖 3.2 配置Redis连接 3.3 创建实体类(可选) 3.4 编写 Redis 操作服务层 3.5 编写控制器层 3.6 测试 3.6.1 测试 addMovieScore 接口 3.6.2 测试 g…

【Docker】如何在Docker中配置防火墙规则?

Docker本身并不直接管理防火墙规则;它依赖于主机系统的防火墙设置。不过,Docker在启动容器时会自动配置一些iptables规则来管理容器网络流量。如果你需要更细粒度地控制进出容器的流量,你需要在主机系统上配置防火墙规则。以下是如何在Linux主…

java+ssm+mysql美妆论坛

项目介绍: 使用javassmmysql开发的美妆论坛,系统包含超级管理员,系统管理员、用户角色,功能如下: 用户:主要是前台功能使用,包括注册、登录;查看论坛板块和板块下帖子;…

【MFC】vs2019中使用sqlite3完成学生管理系统

目录 效果图list Contral 控件的简单使用使用sqlite3 效果图 使用sqlite3完成简单的数据库操作。 list Contral 控件的简单使用 本章只介绍基本应用 添加表头:语法: int InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat LVCFMT_LEFT…

Java设计模式 —— 【创建型模式】建造者模式详解

文章目录 一、建造者模式二、案例实现三、优缺点四、模式拓展五、对比1、工厂方法模式VS建造者模式2、抽象工厂模式VS建造者模式 一、建造者模式 建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过…

单链表(C语言版本)

前提 不探讨头结点空链表可以插入和查找,不可删除一般不选择phead移动,定义一个新结点把phead赋给他,移动新结点即可单链表不适合在前面和后面插入或删除,适合在后面插入删除 头插 void SLPushFront(SLTNode** pphead, SLTDataTy…

VMware虚拟机搭建和镜像配置

VMware虚拟机搭建和镜像配置 下载安装VMware 开始下载 更改安装路径,需要一个大空间的盘 更改后下一步 下一步后,选择不主动升级更新 一直下一步 直到安装完毕 输入许可密钥,我下载的版本是12,输入完成点击输入&#xff…

使用PPT科研绘图导出PDF边缘留白问题解决方案

使用PPT画图导出PDF格式后,边缘有空白,插入latex不美观,解决方案为自定义PPT幻灯片母版大小,如题步骤为: 1、查看已制作好的图片的大小,即长度和宽度 2、选择自定义幻灯片大小 3、自定义幻灯片大小为第1…

在Ubuntu上使用docker compose安装N卡GPU的Ollama服务

在现代计算环境中,利用 GPU 进行计算加速变得越来越重要。下面将讲解如何在Ubuntu上使用docker compose安装N卡GPU的Ollama服务。 1、安装 NVIDIA 容器工具 首先,需要确保你的系统已经安装了 NVIDIA 容器工具 nvidia-container-toolkit。这是让 Docker 容器访问 GPU 的关键…

如何借助前端表格控件实现金融投资分析平台?

最新技术资源(建议收藏) https://www.grapecity.com.cn/resources/ 金融投资分析背景介绍 金融投资分析是金融领域的核心活动,它要求对资产、市场及经济数据进行深入研究,以识别并评估潜在的投资机会与风险。这一过程融合了宏观经…

01_Node.js入门 (黑马)

01_Node.js入门 知识点自测 从 index.js 出发&#xff0c;访问到 student/data.json 的相对路径如何写? A&#xff1a;../public/teacher/data.json B&#xff1a;./public/student/data.json C&#xff1a;../student/data.json <details><summary>答案</sum…

快速构建NLP理论知识体系

NLP理论知识体系 一句话解释NLPNLP模型及原理简述1、Rag 一句话解释NLP 如果我们要实现机器翻译、情感分析、问答系统、文本摘要、聊天机器人、构造智能化的辅助文件填写模板&#xff0c;NLP可以通过现成的模型对输入的语音、文字、图片进行处理&#xff08;分词、标词性、去停…

Python:import语句的详细解析(绝对路径导入和相对路径导入)

相关阅读 Pythonhttps://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 import语句是Python中一个很重要的机制&#xff0c;允许在一个文件中访问另一个文件的函数、类、变量等&#xff0c;本文就将进行详细介绍。 在具体谈论import语句前&a…

CUDA 计时功能,记录GPU程序/函数耗时,cudaEventCreate,cudaEventRecord,cudaEventElapsedTime

为了测试GPU函数的耗时&#xff0c;可以使用 CUDA 提供的计时功能&#xff1a;cudaEventCreate, cudaEventRecord, 和 cudaEventElapsedTime。这些函数可以帮助你测量某个 CUDA 操作&#xff08;如设置设备&#xff09;所花费的时间。 一、记录耗时案例 以下是一个示例程序&a…

数字图像处理(15):图像平移

&#xff08;1&#xff09;图像平移的基本原理&#xff1a;计算每个像素点的移动向量&#xff0c;并将这些像素按照指定的方向和距离进行移动。 &#xff08;2&#xff09;平移向量包括水平和垂直分量&#xff0c;可以表示为&#xff08;dx&#xff0c;dy&#xff09;&#xff…

Hyper-V安装Win11虚拟机并设置vGPU显卡直通

一、为什么我使用Hyper-V虚拟机 我的宿主机是Win11,想装一个Win10或Win11虚拟机。但是我用VMware安装Win10或Win11后,随机地蓝屏,非常烦人,估计是和宿主机的某些设置有关,或者宿主机电脑硬件比较新(我电脑装Win10就会蓝屏,Win11就不会),某些特性不支持。 所以我就安…

Qt Xlsx安装教程

Qt Xlsx安装教程 安装perl 如果没有安装perl&#xff0c;请参考perl Window安装教程 下载QtXlsxWriter源码 下载地址 ming32-make编译32 lib库 C:\Qt\Qt5.12.12\5.12.12\mingw73_32>d: D:\>cd D:\Code\QtXlsxWriter-master\QtXlsxWriter-master D:\Code\QtXlsxWrit…

C# RSA加密和解密,RSA生成私钥和公钥

C# RSA加密和解密&#xff0c;RSA生成私钥和公钥&#xff08;使用XML格式秘钥&#xff09; 目录 前言生成xml格式的公钥和私钥 PrivateKeyPublicKey测试加密、解密 方案1&#xff1a;RSA公钥加密&#xff0c;RSA私钥解密方案2&#xff1a;RSA私钥加密&#xff0c;RSA私钥解密…

【Rive】Android与Rive交互

1 Android与Rive交互的常用接口 1.1 RiveAnimationView参数 <app.rive.runtime.kotlin.RiveAnimationViewandroid:id"id/rive_view"android:layout_width"match_parent"android:layout_height"match_parent"android:adjustViewBounds"…