第一章 概述
1.1目标
依据本指南,您可以在一个安卓设备上部署一个运行于已有的安卓固件和内核之上sailfishos(或基于sailfishos core)linux操作系统。
内容包括:
Sailfish Core: GNU/Linux userspace core
Android Hardware Adaptation (HA/HAL), 包括:
指定设备的 Android Kernel
Android base :
LineageOS - https://wiki.lineageos.org
AOSP - Android Open Source Project - https://source.android.com
CAF - Code Aurora Forum - https://www.codeaurora.org
Sony Open Devices program - Open Devices - Open Devices - Sony Developer World
Vendor-specific Android base
从 Android base 获取的二进制驱动
针对 Android base 的hybris补丁
针对二进制驱动程序构建的 libhybris 接口
基于特定硬件插件的中间件包
使用 Android hwcomposer 的 Qt/Wayland QPA 插件
Sailfish OS 组件
1.2 开发
1.2.1 需求
使用platform SDK作为开发环境,具备以下功能:
一个或多个特定于设备的目标(具有特定于设备的头文件和库的 rootfs)
HA 构建 SDK(构建 Android 源代码所需的最小 Ubuntu chroot) 在 HA 开发期间,您通常会有一个使用 HA 构建 SDK 的窗口/终端,您可以在其中构建和处理 Android 代码。以及另一个使用 Platform SDK 构建 RPM 以进行硬件适配的会话。
配置 platform SDK,以及特定设备的target和用于HA构建的chroot在配置SDK中介绍。
平台 SDK 会话的命令和输出通过在代码块顶部使用 PLATFORM_SDK $ 指示,如下所示:
PLATFORM_SDK $
echo "此命令应该在 Platform SDK 执行"
如何进入platform SDK 在配置SDK中介绍。
在代码块顶部使用HABUILD_SDK $指示来自与HA构建会话的命令和输出,类似这样
HABUILD_SDK $
echo "此命令应该在 Ubuntu HA build SDK 执行"
如何进入 HABUILD_SDK $ 在进入Ubuntu Chroot中介绍.
1.2.2 构建位置的根目录
在本指南中,我们使用环境变量 $PLATFORM_SDK_ROOT 代表托管 Platform SDK、Targets 和 Ubuntu chroot 的 SDK 目录。 对于一个在 0.5-1GB 的 SDK Targets,您总共需要大约 3GB 的空间。
1.2.3 构建组件
有许多组件需要构建; 在HA build SDK中构建底层和Android相关的组件; 其余的都是在 Platform SDK 中构建的。
在 HA 构建 SDK 中:
一个内核
一个支持各种启动选项的hack友好的 initrd
hybris-boot.img 和 hybris-recovery.img(用于启动和调试)
最小的 Android /system/ 树
为与 libhybris 和 Sailfish OS(例如 Bionic libc、logcat、init、...)兼容而修改的 Android 组件
在platform SDK中:
包含所有构建的二进制文件和提取的配置的 RPM 包
特定于硬件的中间件和插件(例如 Qt QPA 插件、PulseAudio)
RPM 包被上传到一个特定于 HA 的存储库进行分发,通过这个存储库,使用 mic 实用程序的完整系统映像。 mic 实用程序通常也在 Platform SDK 中运行。
1.3 部署
hybris-boot.img(包含内核和我们自定义的 initrd)被刷写到设备上,而 Sailfish OS rootfs 被放置在 /data/ 分区的子目录中,与一个现有的、未修改的 Android 系统一起。Sailfish OS rootfs 然后用作 switchroot 目标,其中 /data 绑定安装在其中以共享访问任何用户数据。
第二章 先决条件
2.1 移动设备
在撰写本文时(2021-02-12 ),LineageOS 15.1 (Android 8)、16.0 (Android 9) 和 17.1 (Android 10) 正式支持 Android 设备。 CyanogenMod 版本(与 Sailfish 操作系统兼容)10.1.x、11.0、12.1、13.0、14.1 将需要额外的努力,因为 CM 已经过时。 有关更多受支持的 Android 版本,请查看此链接
在本指南中,我们将使用术语 Android 基础,它指的是您正在移植的适当基础:LineageOS、AOSP、CAF 等
我们同样支持Sony Open Device项目,并且为此发布了如何重构可刷机镜像的教程:
Xperia X (Sony AOSP 6)
Xperia XA2 (Sony AOSP 8)
Xperia 10 (Sony AOSP 9)
Xperia 10 II (Sony AOSP 10)
自 sailfishos 3.4.0,添加了对 ARM 64bit 的 sailfishos userspace 支持。
从 CM 13.0 (Android 6) 开始的 Sailfish OS 适配是通过混合运行 64 位 Linux 内核和 Android HAL 构建的,而 Sailfish OS 用户空间在 32 位模式下运行。 这种混合模式仍然受支持,但我们鼓励移植者切换到完整的 64 位移植(以 Xperia 10 II 为参考)
兼容设备的列表,请参阅 Redirecting…
有关已使用 HADK 移植的设备的状态列表,请参阅 Adaptations/libhybris - Mer Wiki
请参阅 Adaptations/libhybris/porters - Mer Wiki 以获取早期阶段的移植人员列表,以在 IRC 上联系作者
AOSP 或 CAF Android 基础支持也是可能的,但我们为更广泛的设备选择 LineageOS。 由移植者用 hybris 补丁修补 AOSP/CAF base。使用它的剩余差异很小(例如,使用lunch命令替代breakfast)
用于备份和恢复设备内容(例如 SD 卡或 USB 电缆到主机),以及闪存恢复图像到设
2.2 构建设备
使用64bit 内核的 X86-64机器
sailfishos platform SDK (稍后介绍安装方法)
sailfishos platform SDK target (稍后介绍)
至少 30 GiB 的可用磁盘空间(20 GiB 源下载 + 更多用于构建)用于完整的 Android 6 构建; 最少的下载和 HADK 构建(仅与硬件适配相关的组件)需要空间略小。 较新的 Android 基础版本会产生越来越大的尺寸要求。
最少4GB RAM(越大越好)
第三章 准备您的设备
确认您可以备份和恢复您的设备,并且您了解设备恢复选项。 这不仅在刷写您使用本指南构建的映像时很有用,而且在您想使用库存 Android 将设备重置为出厂状态时也很有用(请注意,并非所有 Android 供应商都提供可供下载的出厂映像,因此您可能需要创建 正在运行的 Android 系统的完整备份并将其存储在安全的地方,然后再开始使用您的自定义版本擦除和重新刷新设备)。
3.1 备份和检查您的设备
如上所述,在首次刷入 Android 基础版本之前备份现有的 Android 原始镜像可能会有所帮助,因为对于某些供应商而言,获取原始镜像可能很困难(例如,某些原始图像只能作为适用于 Windows 的自解压 . exe 包)或不可能(某些供应商不提供供下载的库存镜像)。
使用 Android Recovery&#x