moh-sarwat/mt6582-linux

GitHub: moh-sarwat/mt6582-linux

一套将联想 A5500-HV(MediaTek MT6582/MT8382)平板上的 Android 替换为 Alpine Linux 的完整实践文档与工具链,包含多个此前无文档的底层硬件发现。

Stars: 0 | Forks: 0

# 基于 MediaTek MT6582 / MT8382 平板的 Linux 在 2013-2015 年的 MediaTek 平板上用 Alpine Linux 替换 Android,已在 **Lenovo A5500-HV**(Tab A8-50,MT8382,主板项目 `lvp5_row_3gfull`)上端到端成功运行。 最终结果:原厂 Lenovo 3.4.67 kernel,Alpine armv7 用户态,基于 framebuffer 的 X11 且触摸屏正常工作,以及通过 USB 线缆进行网络连接。Android 已被移除,而非双系统。 本仓库既包含**实践发现**也包含相关脚本。其中一些发现我在其他任何地方都找不到相关文档,而每一个这样的发现都需要花费一天的时间去重新探索。 ## 关键发现 **`dumchar_info` 偏移量需要加上一个基址。** kernel 的分区表报告的偏移量是相对于分区区域的,该区域位于 eMMC 用户区域的某个位置之后(在此设备上为 8 MiB)。如果从扇区 0 开始转储,每个分区看起来都是空的或错误的。参见 `docs/02-partitions.md`。 **MediaTek 在 preloader 中启用了一个硬件 watchdog。** 如果用户态没有触发它(kick),主板就会在几秒钟后重置。Android 通过运行 `sbin/watchdogd` 来处理此问题。你的 init 也必须这样做,并且要作为其首要操作。参见 `docs/05-gotchas.md`。 **mtkfb 仅在 `FBIOPAN_DISPLAY` 时向 panel 传输数据。** 写入 framebuffer 只会改变内存,仅此而已。这会导致 `dd` 失效,破坏所有 framebuffer 程序,并导致 X 崩溃——表现为三种完全不同的症状,且没有任何错误信息。这是此类移植工作中最大的时间黑洞。参见 `docs/04-mtkfb.md`。 ## 正常工作的功能 - 通过自定义 initramfs 启动原厂 vendor kernel - 在原 Android `userdata` 分区上使用 Alpine Linux armv7 rootfs - 通过 `xf86-video-fbdev` 运行 X11,通过 `evdev` 支持触摸屏 - `jwm` 窗口管理器,屏幕键盘 - 通过 USB(RNDIS gadget)进行网络连接和 SSH - 大约 950 MB 的可用 RAM;在同一硬件上,Android 需要 512 MB 的 zram ## 无法正常工作的功能 - **无 GPU 加速。** Mali-400 kernel 驱动程序存在,但用户态部分是 Android/bionic blobs。Lima 需要 kernel 5.2+ 的 DRM 驱动程序;而这是仅有 fbdev 的 3.4 版本。一切渲染都在 CPU 上进行。 - **无 WiFi。** MTK combo chip 需要 Android 的 bionic `wmt_loader` 才能启动。网络连接只能通过 USB 线缆进行。 - **暂无音频**,暂无电池状态报告。 - 现实可行的用途:终端、仪表板、信息亭(kiosks)、媒体前端、家庭自动化面板、轻量级复古模拟器。不适合用作现代浏览器。 ## 开始之前 - **这会清除 Android。** 请先进行完整转储。 - **这些电池已有十年历史。** 在投入时间之前,请检查后盖是否有任何凸起。更换电池很便宜。 - MediaTek BootROM 是掩模 ROM(mask ROM)且无法被擦除,因此很难变砖——但无论如何都要进行转储。 - `nvram` 和 `protect_*` 保存着你的 WiFi MAC 和 RF 校准数据,并且**无法从任何原厂 ROM 中重现**。请先在设备外部备份它们。 ## 工作顺序 1. `docs/01-brom-access.md` —— 获取 BootROM 访问权限,检查你的安全熔丝 2. `docs/02-partitions.md` —— 转储,并找到你的基址偏移量 3. `docs/03-boot-images.md` —— 解包并重新打包 MTK 启动镜像 4. `docs/05-gotchas.md` —— 在首次自定义启动前阅读 5. `rootfs/build_rootfs.sh` —— 为你的设备构建 Alpine 镜像 6. `docs/04-mtkfb.md` —— 当屏幕拒绝显示任何内容时查阅 ## 工具 | 工具 | 用途 | |---|---| | `tools/scan_a5500.py` | 通过 magic signature 查找真实分区边界 | | `tools/carve_a5500_v2.py` | 将完整转储拆分为命名分区 | | `tools/unpack_mtk_boot.py` | 解包 MTK 启动镜像(剥离 MTK 头部) | | `tools/repack_mtk_boot.py` | 重新打包,带有字节级精确的往返验证 | | `tools/build_initramfs_v8.py` | 构建可启动的 initramfs | | `tools/fbprobe.c` | Framebuffer 诊断——报告每个 ioctl 结果 | | `tools/fbcon.c` | Framebuffer 文本控制台(适用于没有控制台的设备) | | `tools/fbpan.c` | 保持 mtkfb 持续传输帧,以便 X 保持可见 | | `rootfs/build_rootfs.sh` | Alpine ext4 镜像,针对 3.4 限制了功能 | | `host/a5500-net.sh` | 主机端 USB 网络设置 | ## 特定于设备的参数 以下是 A5500-HV 的参数。**你的设备会有所不同**——请使用 `scan_a5500.py` 推导,而不是直接复制。 | | | |---|---| | SoC | MT8382(MT6582 系列),4x Cortex-A7 @1.3 GHz | | 主板项目 | `lvp5_row_3gfull`(ODM 构建 `cci82_tb_lvp_kk`) | | Panel | AUO `s6d7aa0x04`,800x1280,通过 mtkfb | | 触摸屏 | Goodix GT9xx (`mtk-tpd`) | | Kernel | 3.4.67 | | DRAM 基址 | `0x10000000`(非 `0x80000000`) | | dumchar 基址偏移量 | `0x800000` | | boot 分区 | 偏移量 `39321600`,16 MiB | | recovery 分区 | 偏移量 `56098816`,16 MiB | ## 许可证 参见 `LICENSE`。注意:`tools/fbcon.c` 内嵌了源自 Liberation Mono(SIL OFL)的位图字体。在广泛分发之前,请将其替换为公共域字体或添加适当的署名。 ## 致谢 基于 bkerler 的 [mtkclient](https://github.com/bkerler/mtkclient) 构建,该项目提供了这一切所依赖的 BootROM exploit 和 flash 访问权限。
标签:Alpine Linux, Cutter, Linux移植, MediaTek, 云资产清单, 嵌入式系统, 设备驱动, 逆向工具, 逆向工程