很早之前就想要一个比轻薄本还便携的设备了,最好能像iPad一样优雅就好了。
然后就锚定了一块小米平板5,买了个12+512的终极扩容版本,再加一块Doqo的磁吸悬浮支架键盘,性能够用,这玩意带上键盘也足够轻薄,长得像iPad但是不装iPad OS,加一起1700RMB拿下,简直薄纱iPad。
本来计划是用Windows的,因为Windows下驱动比较完善,而且部署方便,常用软件都有,而且还符合我长期的操作习惯。但是,Windows下没法驱动这块键盘的触摸板...我反反复复找了好几块键盘,发现都做得很屎,还很丑,果然还是放不下这块键盘,思来想去直接用Linux,虽然驱动不是特别完善,但是至少能发挥这块键盘的全部实力,实现完整形态。软件的问题都不是问题,硬件才让人头大,头铁刷入Linux。
故作次踩坑笔记,方便后来之人。
安装
使用lon-tool
一键安装,非常方便,会设置好rootfs和UEFI启动,之后可以方便的把自己编译的内核替换上去。
参考教程: https://git.timoxa0.su/timoxa0/Guide-Linux-Nabu/src/branch/main/guide/English/prepare-en.md
简述
- 安装工具:
powershell.exe -C "irm https://s.tx0.su/ltw | iex"
- 下载镜像: https://timoxa0.su/?dir=share/nabu/images/v3/latest
- 刷入:
lon-tool deploy /path/to/image.lni
编译6.12内核
上一步镜像使用的是6.1
的镜像,通常来说也够用,不必自行编译内核。实际上可以使用6.12
的内核,记录在Ubuntu 24.04 x64
上的编译步骤。
思路参考: Nabu merge request in postmarketOS
- 安装依赖:
sudo apt install build-essential gcc-aarch64-linux-gnu bc flex bison 7zip kmod bash cpio binutils tar git wget dpkg libssl-dev
(参考map220v/ubuntu-xiaomi-nabu的workflow) - 拉取
6.12
内核的代码:git clone https://gitlab.postmarketos.org/panpanpanpan/sm8150-mainline.git --branch 6.12-wip --depth 1
修补内核: 请参考在小米平板 5 上安装 Arch Linux
只需要参考修补的内容,编译步骤在Ubuntu上完全不同针对patch文件,使用
git apply /path/to/patch
,其他文件找到相应的文件并直接替换。
修改后编译出来的内核会有dirty
标识,可以使用git commit -am 'patch'
去除。- 准备编译,指定编译器:
export ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
- 加载配置:
make defconfig sm8150.config
按需修改配置:
make -j16 nconfig
建议启用framebuffer console的rotate功能,因为一般横着用,但是默认是竖起来显示启动日志的。
- 编译:
make -j16
拷贝内核和dtb:
mkdir ../linux-xiaomi-nabu-kernel export _kernel_version="$(make kernelrelease -s) cp arch/arm64/boot/Image.gz ../linux-xiaomi-nabu-kernel/vmlinuz-$_kernel_version cp arch/arm64/boot/dts/qcom/sm8150-xiaomi-nabu.dtb ../linux-xiaomi-nabu-kernel/dtb-$_kernel_version
- 拷贝内核模块
make modules_install INSTALL_MOD_PATH=../linux-xiaomi-nabu-kernel
删除不必要的文件:
rm -rf ../linux-xiaomi-nabu-kernel/lib/modules/*/build rm -rf ../linux-xiaomi-nabu-kernel/lib/modules/*/source
- 打包文件夹推送到设备
- 将
vmlinuz-xxx
和dtb-xxx
放置在/boot/efi
下. - 将内核模块文件夹放在
/usr/lib/modules
下,文件夹在vmlinuz旁边的/lib/modules
目录下,以内核版本号命名。 - 修改
simpleinit
配置:
以root权限编辑/boot/simpleinit/simpleinit.uefi.cfg
:
会看到一大串boot.configs.linux.xxx=yyy
将这些全数复制粘贴到文件结尾,并把boot.configs.linux.
改成boot.configs.linux2.
,重点是configs
后面跟着的id,simpleinit
使用id表示不同的启动项。
修改.desc
,这会决定他在启动菜单中显示的文字说明,我建议的是修改为Linux ${KernelVersion}
,例如Linux 6.12.0-nabu-g2e1ac76b
。
修改.extra.kernel
和.extra.dtb
,指向编译好的内核文件。
修改extra.cmdline
:pd_ignore_unused clk_ignore_unused root=PARTLABEL=linux loglevel=6 fbcon=rotate:1
,重点是添加pd_ignore_unused clk_ignore_unused
,否则UFS可能无法正常驱动。 - 删除旧的固件并添加新的固件,
6.12
内核无法加载6.1
使用的旧固件。
删除/usr/lib/firmware
(考虑备份)
从KawaiiZapic/ubuntu-xiaomi-nabu下载xiaomi-nabu-debs_6.7-working.zip
,解压后得到firmware
和alsa
的deb文件,可以直接安装,如果无法安装可以尝试根据apt显示的包名称卸载旧的包。 重启设备,通过音量键选择新的内核启动
可能会遇到跑日志后直接黑屏,尝试用
simpleinit
的启动菜单完全关闭设备,然后等待一会,再重试。如果重试了五六次还不行,则可能是内核的问题,检查编译步骤。