很早之前就想要一个比轻薄本还便携的设备了，最好能像iPad一样优雅就好了。然后就锚定了一块小米平板5，买了个12+512的终极扩容版本，再加一块Doqo的磁吸悬浮支架键盘，性能够用，这玩意带上键盘也足够轻薄，长得像iPad但是不装iPad OS，加一起1700RMB拿下，简直薄纱iPad。 本来计划是用Windows的，因为Windows下驱动比较完善，而且部署方便，常用软件都有，而且还符合我长期的操作习惯。但是，Windows下没法驱动这块键盘的触摸板...我反反复复找了好几块键盘，发现都做得很屎，还很丑，果然还是放不下这块键盘，思来想去直接用Linux，虽然驱动不是特别完善，但是至少能发挥这块键盘的全部实力，实现完整形态。软件的问题都不是问题，硬件才让人头大，头铁刷入Linux。 故作次踩坑笔记，方便后来之人。安装参考教程: https://github.com/nabu-alarm/installation-guide/blob/main/guide/English/install.md可以使用他的UEFI Installer和nabu-alarm/images提供的rEFInd，可以dualboot到安卓和Linux。已过时的步骤，timoxa0将托管在他服务器上的数据全部删掉了，文件失传，仅供参考。使用lon-tool一键安装，非常方便，会设置好rootfs和UEFI启动，之后可以方便的把自己编译的内核替换上去。参考教程: https://github.com/nabu-alarm/installation-guide/blob/main/guide/English/install.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功能，因为一般横着用，但是默认是竖起来显示启动日志的。一些自用额外的配置# put these to arch/arm64/configs/extra.config # make defconfig sm8150.config extra.config CONFIG_LOCALVERSION="-nabu" # Xbox controller supporting CONFIG_INPUT_JOYSTICK=y CONFIG_JOYSTICK_XPAD=y CONFIG_JOYSTICK_XPAD_FF=y CONFIG_JOYSTICK_XPAD_LEDS=y # Wacom stylus supporting CONFIG_INPUT_TABLET=y CONFIG_TABLET_SERIAL_WACOM4=y # Framebuffer console CONFIG_FONTS=y CONFIG_FONT_TER16x32=y CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y # Network Tunneling & iPhone USB network sharing CONFIG_NET_IPIP=y CONFIG_USB_IPHETH=y # F2FS CONFIG_F2FS_FS_SECURITY=y CONFIG_F2FS_FS_COMPRESSION=y # ZRAM CONFIG_ZRAM=m CONFIG_ZRAM_BACKEND_LZ4=y CONFIG_ZRAM_BACKEND_LZ4HC=y CONFIG_ZRAM_BACKEND_ZSTD=y CONFIG_ZRAM_BACKEND_DEFLATE=y CONFIG_ZRAM_BACKEND_842=y CONFIG_ZRAM_BACKEND_FORCE_LZO=n CONFIG_ZRAM_BACKEND_LZO=y CONFIG_ZRAM_DEF_COMP_LZORLE=n CONFIG_ZRAM_DEF_COMP_ZSTD=y CONFIG_ZRAM_DEF_COMP="zstd" # ZSwap CONFIG_ZSWAP=y CONFIG_ZSWAP_DEFAULT_ON=y CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD=y CONFIG_ZSWAP_COMPRESSOR_DEFAULT="zstd" # EFI CONFIG_RTC_DRV_EFI=n CONFIG_DRM_PRIVACY_SCREEN=y # Compressed firmware support CONFIG_FW_LOADER_COMPRESS=y CONFIG_FW_LOADER_COMPRESS_XZ=y CONFIG_FW_LOADER_COMPRESS_ZSTD=y编译: make -j16使用ukify将镜像打包为efiexport _kernel_version="$(make kernelrelease -s)" mkdir ../linux-xiaomi-nabu-kernel # 创建SecureBoot测试密钥，密钥可以重复使用，后面编译时直接复用先前创建的密钥 openssl genrsa -out sb.key 2048 openssl req -new -x509 -key sb.key -out sb.crt -days 365 -subj "/C=CN/ST=Test/L=Test/O=Test/CN=Test SB Certificate" export cmdline_quiet="quiet loglevel=3 systemd.show_status=auto rd.udev.log_level=3 vt.global_cursor_default=0" export cmdline_root="root=PARTLABEL=linux rw" export cmdline_console="console=tty0 fbcon=rotate:1,font:TER16x32" export cmdline_other="systemd.gpt_auto=no cryptomgr.notests" # 打包 ukify build --linux ./arch/arm64/boot/Image --cmdline "${cmdline_console} ${cmdline_root} ${cmdline_quiet} ${cmdline_other}" --devicetree ./arch/arm64/boot/dts/qcom/sm8150-xiaomi-nabu.dtb --secureboot-private-key sb.key --secureboot-certificate sb.crt --output ../linux-xiaomi-nabu-kernel/${_kernel_version}.efi过时的步骤，不再使用simpleinit拷贝内核和dtb:mkdir ../linux-xiaomi-nabu-kernel export _kernel_version="$(make kernelrelease -s)" cp arch/arm64/boot/Image ../linux-xiaomi-nabu-kernel/vmlinux-$_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打包文件夹推送到设备，仅需要打包lib和*.efi将内核模块文件夹放在/usr/lib/modules下，文件夹在vmlinuz旁边的/lib/modules目录下，以内核版本号命名。将vmlinuz-xxx和dtb-xxx放置在/boot/efi下.修改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的启动菜单完全关闭设备，然后等待一会，再重试。如果重试了五六次还不行，则可能是内核的问题，检查编译步骤。