为红米note4x移植debian/ubuntu
记录一次为红米note4x(mido)移植ubuntu系统,及使用技巧
参考链接:
postmarketos相关: https://wiki.postmarketos.org/wiki/Xiaomi_Redmi_Note_4_(xiaomi-mido)
博客: https://blog.csdn.net/github_38345754/article/details/114291930 https://forum.renegade-project.tech/t/835-845-855-uefi-archlinux/2497 https://forum.renegade-project.tech/t/835-845-855-uefi-ubuntu-rootfs/2891
https://www.knightli.com/2023/08/09/随身wif-idebian-固件编译/
视频: https://www.bilibili.com/video/BV15N4y127mN/ https://www.bilibili.com/video/BV13G411Y7u4/
名词解释: https://wiki.postmarketos.org/wiki/Glossary
postmarketos支持的主线:https://wiki.postmarketos.org/wiki/Mainlining
尽量保证移植的系统与编译所使用的系统版本一致
源码下载
msm8953(骁龙625)的mainline
https://github.com/msm8953-mainline/linux
注意下载打包后的, 而不是main仓库
相关脚本
https://gitee.com/meiziyang2023/hm2-ubuntu-ports
或者123云盘
https://vip.123pan.cn/1815661672/%E7%9B%B4%E9%93%BE/mido/hm2-ubuntu-ports-master.zip
内核编译配置文件
开源驱动
https://gitlab.com/postmarketOS/pmaports/-/blob/master/device/community/firmware-xiaomi-mido/APKBUILD?ref_type=heads 找到这个下载地址 https://github.com/Kiciuk/proprietary_firmware_mido
依赖安装
sudo apt install gcc-aarch64-linux-gnu kernel-package simg2img img2simg mkbootimg bison flex gcc-aarch64-linux-gnu pkg-config libncurses-dev libssl-dev unzip git kmod cpio bsdmainutils rsync
具体参考以下两份教程
注意:
debian内核不能压缩,需要在make menuconfig时,将此项设置None
固件加载
在https://gitlab.com/postmarketOS/pmaports/-/blob/master/device/community
的firmware开头的目录下找到APKBUILD文件,观察文件内容,手动下载固件并且导入rootfs.img的/lib/firmware目录下
提前在chroot进入rootfs.img时安装wireless-tool
和 swpa_supplicant
小技巧:
关闭屏幕背光(必须在root用户下执行)
echo 1 > /sys/class/backlight/backlight/bl_power
扩容
resize2fs $(df / | awk '$NF=="/"{print $1}')
查看电池电量
upower -e查看设备
upower -i 任意一个路径
例如
root@hu:~# upower -e
/org/freedesktop/UPower/devices/battery_smb1360_battery
/org/freedesktop/UPower/devices/DisplayDevice
root@hu:~# upower -i /org/freedesktop/UPower/devices/DisplayDevice
power supply: yes
updated: 2024年02月02日 星期五 19时14分10秒 (6 seconds ago)
has history: no
has statistics: no
battery
present: yes
state: discharging
warning-level: none
energy: 9.46 Wh
energy-full: 22 Wh
energy-rate: 5.88 W
charge-cycles: N/A
time to empty: 1.6 hours
percentage: 43%
icon-name: 'battery-good-symbolic'
查看电池电量
upower -i /org/freedesktop/UPower/devices/battery_qcom_battery
开启串口调试
内核配置需要打开g_serial
以模块的方式编译
已经安装了原内核的系统也可直接安装开启了虚拟串口的内核
单独使用
启用g_serial模块
sudo modprobe g_serial
开启串口终端,最好以service的形式启用
sudo agetty -L ttyGS0 115200 vt100
[Unit]
Description=Serial Console on ttyGS0
After=multi-user.target
[Service]
ExecStart=/sbin/agetty -L ttyGS0 115200 vt100
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
适用于没有wifi的时候调试
串口一般用于没有wifi时调试系统,所以可以写一个脚本,判断是否成功链接wifi,如果有wifi,就不启动串口,因为会占用usb接口,没有otg功能
判断是否有wifi脚本
root@hu:~# cat /home/open_serial.sh
#!/bin/bash
sleep 15
# 检测网络连接
if ping -q -c 1 -W 1 223.5.5.5 >/dev/null; then
echo "网络连接成功"
else
echo "网络连接失败"
# 加载g_serial模块
modprobe g_serial
# 运行agetty命令
agetty -L ttyGS0 115200 vt100
fi
调用该脚本的service服务文件内容
root@hu:~# cat /etc/systemd/system/open_serial.service
[Unit]
Description=Check Network Connectivity and Load g_serial Module if not Connected
After=multi-user.target
[Service]
Type=simple
ExecStart=/bin/bash -c '/home/open_serial.sh'
Restart=always
[Install]
WantedBy=multi-user.target
之后启用服务
sudo systemctl enable open_serial
关闭wiif后重启设备查看是否生效
推荐串口调试工具
putty 下载链接:https://the.earth.li/~sgtatham/putty/latest/w64/putty-64bit-0.80-installer.msi
MobaXterm 下载链接:https://download.mobatek.net/2362023122033030/MobaXterm_Installer_v23.6.zip
GPU驱动
ubutnu直接添加mesa驱动的ppa源
sudo add-apt-repository ppa:kisak/kisak-mesa
或者手动添加源nano /etc/apt/sources.list.d/mesa.list
deb https://ppa.launchpadcontent.net/kisak/kisak-mesa/ubuntu jammy main
deb-src https://ppa.launchpadcontent.net/kisak/kisak-mesa/ubuntu jammy main
然后安装相关驱动就行
apt install libclang-common-15-dev libclang-cpp15 libclang-rt-15-dev:arm64 libclc-15 libclc-15-dev libdrm-amdgpu1:arm64 libdrm-common libdrm-nouveau2:arm64 libdrm-radeon1:arm64 libdrm2:arm64 libegl-mesa0:arm64 libegl1-mesa-dev:arm64 libgbm1:arm64 libgl1-mesa-dev:arm64 libgl1-mesa-dri:arm64 libglapi-mesa:arm64 libgles2-mesa-dev:arm64 libglx-mesa0:arm64 libllvm15:arm64 libosmesa6:arm64 mesa-libgallium:arm64 mesa-opencl-icd:arm64 mesa-va-drivers:arm64 mesa-vdpau-drivers:arm64 mesa-vulkan-drivers:arm64 mesa-utils libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev opencl-headers ocl-icd-libopencl1 ocl-icd-opencl-dev glmark2 libclang-common-15-dev libclang-cpp15 libclang-rt-15-dev libclc-15 libdrm-common
debian的话需要一些野鸡办法,改os-release假装自己是ubuntu
比如debian12就修改/etc/os-release成
NAME="Ubuntu"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 22.04.3 LTS"
VERSION_ID="22.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=jammy
UBUNTU_CODENAME=jammy
常用软件包
sudo apt install language-pack-en-base ssh net-tools ethtool ifupdown iputils-ping htop vim kmod network-manager make gcc g++ git nano fdisk usbutils initrmfs-tools initramfs-tools xinit xinput x11-xserver-utils xserver-xorg-input-evdev xserver-xorg-input-libinput xserver-xorg-legacy xserver-xorg-video-fbdev fonts-noto-cjk bash-completion
时间同步
安装 chrony:
sudo apt install chrony
启动并启用服务:
sudo systemctl enable chrony sudo systemctl start chrony