很多年前,我尝试在我的 htc one m8 上运行完整 Linux 环境,但是失败了。那个时候以为 Linux 只是内核,软件层是可以通用的。
只要内核编译完,按理说进去桌面问题不大。事实上,也是这个样子,若是使用软件驱动 framebuffer 是能显示东西的,可是没有硬件加速,也就没法正常使用。
去年,我有一段时间一直在研究 wayland,入门就是这个 GPU buffer 管理,比我想的要麻烦很多。就是你得在 CPU 端管理 GPU 端的内存,还不能随便拷贝,
图片合成都是通过别扭的指令实现,很繁琐,我到现在还不会这一方面的东西。

今天突然想起了抽屉里面的 m8 拿出来充电,然后开一个项目啪啦啪啦的就搞定了。
花了很多时间在同步源代码、编译、拷贝文件到手机上。

对比小十年前,现在电脑编译一个 Linux 内核就五分钟不到的时间,下载源代码都是 100M 宽度跑满(我没钱只能开到这么高的套餐)。除了 m8 emmc 读写速度还是 9M/s 外。

移植版本 halium-10.0 对应 LineageOS 17.1,rootfs 采用 ubuntu-touch-android9-armhf.tar.gz。

Halium 项目目标是构建一个叫做 libhybris 的抽象层,其他发行版适配这个抽象层,然后 libhybris 在去调用底层安卓的接口。
开机之后,需要在 LXC 容器内运行一部分 Android 原生的服务,通过 libhybris 层把这些服务接口暴露出来。

构建流程,最终产物:

  • halium-boot.img: Android 内核,里面是 kernel + ramdisk 组合(上次我只做到这里)
  • android-rootfs.img: Android 固件,剥离掉 UI 框架和内置 APP 之后的产物
  • rootfs.img: ubuntu-touch rootfs 叠加了 Claude 打的各种补丁后的镜像

rootfs.img 和 android-rootfs.img 放在 /data 目录,然后在 fastboot 模式启动 halium-boot.img 就可以实现临时启动调试,而不用完全抹去现有的系统。

从左往右滑动有两段菜单,从右向左滑动进入任务视图,右上角状态栏图标向下滑动打开状态栏。这三个都是全局手势,不知道在开发 APP 的时候是否有接口禁用这些手势。
只是感觉非常粗糙,毕竟是第一个版本。

能正常工作的硬件:

  • 按键(音量键、电源键)
  • wifi
  • 震动
  • 触摸屏
  • 硬件加速渲染
  • 电池电量识别

不能正常工作或是未测试

  • 声音
  • 电话、短信
  • 相机
  • FM
  • GPS
  • NFC
  • 红外
  • 陀螺仪

本来这些使用 AI 工具问一问调试一下,也能解决,只是没有折腾下去的想法。系统很粗糙,然后我就思考,如果 Ubuntu Touch 不行换一个 rootfs 是不是可以?
m8 只有 3.4 内核,这个是最大的问题,对于 systemd 支持不太行,如果强行上的话,需要给内核打大量的补丁。
所以直接排除 systemd 引导的系统,包括后续 Ubuntu Touch 20.04 和 Ubuntu Touch 24.04,还有 Plasma mobile 内核没有 drm 模块的话,也启动不了。
其他的还有 LuneOS 和 Sailfish OS,想起来十年前是移动互联网起飞的时间,大公司都希望有自己的移动端操作系统,像是 LG 搞 WebOS, Samsung 搞 Tizen,
现在这些项目都没怎么看到新闻,热点都在 AI 上面了。

过程做成了文档,解压之后让 Claude 加载也能作出来吧: halium-m8.zip