三星 SM-A5108 移植 LineageOS 17.1 实录:分区、设备树、相机与电量修复
三星 SM-A5108 移植 LineageOS 17.1 实录:分区、设备树、相机与电量修复
2026-10-21 · 实验版 / 不支持 VoLTE,LTE 回落待查。下载链接后续贴。
这次折腾的是一台三星 Galaxy A5 2016 移动定制版 SM-A5108。起点是能正常开机的官方 Android 7.1.1,目标是在这台老机器上运行一个接近 AOSP 的系统。最终采用 LineageOS 17.1,也就是 Android 10,并针对本机的分区、设备树、相机固件和电量读取做了适配。
本文记录的是一台实机的排查过程,同时提供本次整合的 UNOFFICIAL r1 实验包。截至 2026 年 10 月 21 日,系统已经进入桌面,前后摄像头拍照、录像以及电量显示通过了测试;移动网络仍有 LTE 回落 EDGE 的问题,而且本版没有可用的 IMS / VoLTE 通话支持。因此,这一版适合有回退条件的同型号设备研究,不能满足依赖 VoLTE 的日常通话需求。
一、先把适用范围说清楚
| 项目 | 本次实机情况 |
|---|---|
| 型号与平台 | SM-A5108,Exynos 7580,标称 3 GB 内存,双卡 |
| 原厂设备代号 | a5xeltecmcc |
| 硬件修订号 | ro.boot.revision=12 |
| 原厂固件基线 | A5108ZMS4CTI1,Bootloader 修订位 4 |
| 成功启动的 Recovery | 官方 TWRP 3.2.1-0,a5xelte 镜像 |
| 系统基础 | 历史 a5xelte LineageOS 17.1 构建,Android 10 / SDK 29 |
| 系统安全补丁日期 | 2022-01-05 |
| 本次发布标识 | UNOFFICIAL a5108 r1,本地修改整合包 |
安装脚本会检查固件基线和硬件修订号。这里只验证了上表这台机器,不能据此认为 A5100、A510F 或其他 A5 2016 版本都能互刷。安装时遇到机型或基线断言失败,应停下来核对设备,不要直接删掉检查。
本次使用了现有 LineageOS 构建作为基础,保留其内核和 ramdisk,另外编译匹配的 CMCC 设备树,再离线处理系统镜像。没有从头完成一次 Android 全源码编译。电脑当时内存占用较高,实际处理主要在 Windows、Python、Node.js 和限制内存的 WSL2 环境中完成。
二、解锁状态与 Recovery:刷写成功不等于能启动
最开始容易误判的是解锁状态:刷回官方包后,开机没有以前的感叹号,也找不到 OEM 解锁入口。后来运行经过签名核验的三星 CROM Service,应用明确提示这台设备已经解锁。因此,本次没有再执行一次新的解锁写入。这个结果只说明本机当时的状态,不能代替其他设备的解锁检查。
也试过通过 ADB 重启到 bootloader。实机进入的是三星 Download 模式,电脑没有获得可用的 Fastboot 连接,所以最后沿用三星 Download 协议刷写 Recovery。
较新的官方 TWRP 3.7.0_9-0 在本机停在 Galaxy A5 / Powered by Android;围绕它制作的诊断镜像也没有进入可用界面。之后改用官方 TWRP 3.2.1-0,终于进入主界面,并能建立 Recovery ADB 连接。3.7 无法启动的具体原因没有单独证实,不能简单归结为“版本太新”。
本次使用 samloader-rs 2.2.0,刷写时只指定 RECOVERY 分区,并关闭自动重启:
samloader flash --partition RECOVERY twrp-3.2.1-0-a5xelte.img --no-reboot
写入完成后,按住“电源+音量下”至黑屏,立即切换“音量上+Home+电源”,直接进入 Recovery。首次提示先选择 Keep Read Only,不安装 TWRP App。这里的 Keep Read Only 是针对系统分区的选择,不代表手机所有分区都处于只读状态。
下载请使用 TWRP 官方 3.2.1-0 下载页面。本文不镜像分发 TWRP。下载得到的原始 .img 也不能直接当成 Odin 的 AP tar 包使用。
三、第一道坎:SYSTEM 分区少了 96 MiB
之前刷机包一直报错,首先需要解决的确实是 SYSTEM 分区容量。读取实机分区表后,发现通用 a5xelte 包的系统写入范围比本机分区更大:
| 对象 | 字节数 | 4096 字节块数 |
|---|---|---|
| 原始 LineageOS 系统写入范围 | 3,145,728,000(3000 MiB) | 768000 |
| 本机 SYSTEM 分区 | 3,045,064,704(2904 MiB) | 743424 |
差额正好是 96 MiB。处理时没有修改 PIT 或重新分区,而是在电脑上从 system.new.dat.br 与 transfer list 重建 ext4 镜像,检查文件系统后,用 resize2fs 缩小副本,再生成新的完整写入数据。
缩容后的 transfer list 为:
4 743424 0 0 new 2,0,743424
缩容阶段对比了 3966 个文件和目录的内容、链接、所有者、权限及扩展属性,确认文件树和元数据保持一致。随后校验 Brotli 解压回来的字节数与镜像 SHA-256,文件系统检查也通过了。后续相机和电量修复会再修改四个文件,不能把最终包描述成“系统文件完全没动”。
安装时出现 Patching system image unconditionally...,没有细分进度,确实很容易让人着急。这份包连续写入约 2.84 GiB 的 SYSTEM 数据,界面不一定实时显示每一段进度。本次最终有明确的安装成功日志;排查时应结合日志和实际读写判断,单看这一行无法认定卡死,也不能保证每次等待都会成功。
四、动画出现后又冻结:换成匹配的 CMCC 设备树
解决分区之后,第一次终于看到 LineageOS 启动动画,但动画只动了一下便停止了。回到 TWRP 读取上一次启动的内核日志,发现启动约 16.74 秒发生了内核 BUG,问题已经进入内核和硬件描述这一层。
对比通用 a5xelte 与原厂 CMCC 设备树,可以看到共享内存、保留内存和部分板级属性有差异。例如共享内存的物理地址,通用布局使用 0xb0000000,本机原厂布局使用 0xf0000000。
最终从与现有内核一致的提交 d78a73afd9cec8a6d7f205519a6ca4eac4ea4443 编译 exynos7580-a5xelte_chn_cmcc_12.dts,保留 LineageOS 原有内核与 ramdisk,将 BOOT 中的设备树表替换为 CMCC 修订号 12 的条目,并重新计算旧式 boot image 头校验值。
重新写入并回读校验 BOOT 后,手机进入欢迎页和桌面。这次更换的是完整板级设备树,因此可以确认这条适配路线有效,但不能把全部故障归因于某一个地址。
五、打开相机整机重启:匹配人脸检测固件
能进桌面还没结束。第一次打开相机,手机直接重启。保存下来的内核日志指向 fimc_is_ischain_loadfd,也就是相机 FD(人脸检测)固件加载路径。
本机 CMCC 布局中的 FD 保留区与通用包不同。日志中的异常执行地址位于 0xffffffc07e200020,而 CMCC 布局对应的 FD 虚拟地址区域在 0xffffffc07f600000。继续对比固件内部地址,可以看到两份固件分别对应不同的内存布局。
解决办法是从本机固件基线 A5108ZMS4CTI1 的原厂镜像提取 fimc_is_fd.bin,替换到:
/system/vendor/firmware/fimc_is_fd.bin
替换时保留文件所有者、0644 权限和 SELinux 标签,没有手工批量改固件指针,也没有关闭固件检查。之后前摄、后摄均能拍照,并分别完成录像测试,未再复现这次打开相机立即重启的问题。
六、电量一直显示 0%:修正 SELinux 的 sysfs 路径
相机正常后,又发现状态栏显示 0% 电量。读取内核数据,电池实际上还有约 43%,而 Android 电池服务却报告电池不存在、状态未知,USB 供电也没有正确识别。
这次问题出在设备树变化后,电池节点路径与通用 SELinux genfs 标签不匹配:
| 通用策略路径 | 本机实际路径 |
|---|---|
/devices/battery.43/power_supply | /devices/battery.42/power_supply |
/devices/i2c.42/i2c-7/7-0071/power_supply | /devices/i2c.41/i2c-7/7-0071/power_supply |
Health HAL 因此被拒绝读取节点。修复只调整这两个路径,并同步到系统根目录的 sepolicy、vendor 的 precompiled_sepolicy 与 vendor_sepolicy.cil,没有扩大 allow 规则。原始和修改后的二进制策略都经过 checkpolicy 解析检查。
重启后,Android 正确显示约 43% 电量和 USB 充电状态,电池健康状态正常;getenforce 仍返回 Enforcing。这次修复没有依赖把 SELinux 全局改为 Permissive。
七、r1 当前验证范围与未解决问题
| 项目 | 结果 |
|---|---|
| 启动、欢迎页与桌面 | 已实测进入,boot_completed 为 1 |
| 前后摄像头拍照、录像 | 已分别实测正常 |
| 电量、USB 充电状态 | 修复后读取正常,SELinux Enforcing |
| Wi-Fi 网页、扬声器、音量键、导航键 | 使用者对这组基础检查反馈“目前正常”,未逐项单独留存结果 |
| 移动网络 | 出现 LTE 回落 EDGE,原因待查,不能认定稳定 |
| IMS / VoLTE | 已知不支持;实机两个通道均未注册 IMS,未找到标准 IMS 服务实现 |
| 传统语音通话、双卡切换 | 未完成独立验证;不能把网络注册或 LTE 图标当作通话可用的证据 |
| GPS / GNSS | 尚未通过定位验证;后续开发测试观察到一次 GNSS 回调引发系统进程崩溃,自动重启后恢复,原因待查 |
| 蓝牙、NFC、指纹、长期待机 | 尚未逐项测试 |
移动网络补记:插卡后曾显示 LTE,按系统提示重启后只剩 EDGE。拔掉另一张 giffgaff、仅保留移动卡之后,已确认默认数据订阅指向当前移动卡,网络模式也包含 LTE。切换飞行模式后曾重新注册 LTE,但约 45 秒后再次回落 EDGE;把接入点从 CMWAP 改成 CMNET 后,重新搜网仍有回落。“仅 LTE”诊断设置被基带返回错误,随后已恢复 GSM/WCDMA/LTE 自动模式。关机把移动卡换到另一个卡槽后,仍然先 LTE、再 EDGE。使用者补充确认,同一张卡此前在官方 Android 7.1.1 上可稳定使用 4G 和 VoLTE 通话。因此,上述调整都不能作为已验证的修复办法,LTE 回落的直接原因仍待查。
VoLTE 是另一项已经确认的限制。LineageOS 的 a5xelte 设备页 标记了 IMS 限制,官方说明 明确表示这类构建不支持依赖 IMS 的功能。实机 TelephonyDebugService 的两个通道均显示 mImsRegistered=false,查询标准 android.telephony.ims.ImsService 也没有匹配服务。这不能通过打开一个 VoLTE 开关解决;如果所在地语音通话必须依赖 VoLTE,本版不适合承担通话用途。IMS 缺失与 LTE 回落目前只是同时存在,尚不能断言前者导致后者。
还需说明整合包的验证边界:手机是通过首次完整刷入系统,再逐项更新 BOOT、相机固件和电量策略达到当前状态。下面提供的 r1 将这些修改整合到一个 ZIP,已完成离线文件系统、压缩数据往返、ZIP CRC 和修改范围校验;尚未对这份最终整合 ZIP 再做第二次独立的清空数据安装回归。
八、本版刷机包与校验值
下载:LineageOS 17.1 SM-A5108 UNOFFICIAL r1 实验包 下载 SHA-256 校验文件
文件名:
lineage-17.1-20220214-UNOFFICIAL-a5108-r1.zip文件大小:463,138,178 字节,约 441.7 MiB。
SHA-256:
15408ebbec8dc1a3ae8609f36d574301c7fd5182fbc0e98562ffb4fdb3a163bd
Windows 可用以下命令核对下载文件:
Get-FileHash .\lineage-17.1-20220214-UNOFFICIAL-a5108-r1.zip -Algorithm SHA256
这是修改后的本地实验包,没有官方 LineageOS OTA 签名。历史基础包的官方签名曾核验通过,但那个签名不适用于本次修改后的 ZIP。如果 TWRP 开启了 ZIP 签名校验,它会拒绝该包;应先独立核对上面的 SHA-256,再按本地未签名包处理。
本包只安装 SYSTEM 和 BOOT,不包含设备个人备份,也不刷入 Recovery、基带、Bootloader 或 PIT。相机 FD 固件来自上述原厂基线,LineageOS 与相关上游项目的权利和署名归原作者所有。
九、同条件设备的刷入顺序
核对 SM-A5108、硬件修订号 12 和固件基线 A5108ZMS4CTI1。准备完整原厂回退包,先备份自己的数据、EFS 和关键分区;不同手机的 EFS 备份不能互用。
确认本机允许自定义镜像。本文实机的 CROM Service 提示已经解锁,不能假设所有读者设备都是这个状态。
按前文方式将官方 TWRP 3.2.1-0 写入 RECOVERY,直接用实体按键进入 TWRP。
首次从官方系统迁移时,备份完成后执行 Factory Reset,并清理 Cache / Dalvik。本次实机 DATA 可正常读取且未加密;没有验证加密 DATA 的迁移。无需修改 PIT 或扩大 SYSTEM 分区。
把校验通过的 r1 ZIP 放到 TWRP 可读取的位置,通过 Install 安装。不要把 ZIP 当作 Odin 线刷包。
确认安装日志成功,再重启系统。进入桌面后先打开 USB 调试,依次检查相机、充电、Wi-Fi 和移动网络;遇到重启先保留日志,不要立即反复清空或重刷。
Recovery 测试阶段,恢复原厂 RECOVERY 曾让本机重新正常启动官方系统。但安装本 ROM 后,SYSTEM 和 BOOT 已经改变,此时只恢复原厂 Recovery 不能恢复完整官方系统;需要使用匹配基线的完整官方恢复方案。本文不提供包含 PIT 的一键重分区命令。
十、资料与实现线索
TWRP 3.2.1-0 官方下载页:本次实机可启动的 Recovery。
samloader-rs 2.2.0:本次使用的 Download 协议刷写工具。
本版匹配的 LineageOS 内核源码提交:保留的内核对应此提交;CMCC rev12 设备树也从该提交编译。
CMCC rev12 DTS 源文件:板级适配的主要依据。
历史 a5xelte 基础构建归档:第三方历史归档站,并非当前官方更新服务。
这次最有帮助的做法,是把每次失败对应到具体阶段:安装器报错先量分区,动画冻结看上次内核日志,相机重启追 FD 加载路径,电量异常再对照 Health HAL 的拒绝记录。能进入桌面只是一个节点,后面的硬件验证和网络问题仍需要继续完成。