apoage/nokia-e7-linux
GitHub: apoage/nokia-e7-linux
将Linux移植到2011年Nokia E7-00智能手机的开源项目,包含自定义QEMU机器模拟器、690行设备树、完整的硬件逆向文档和知识图谱。
Stars: 0 | Forks: 0
# Nokia E7-00 Linux 项目
将 Linux 移植到 Nokia E7-00 (RM-626) —— 一款 2011 年的 Symbian 智能手机,配备全尺寸滑盖 QWERTY 键盘、4 英寸 AMOLED 显示屏,以及比大多数人意识到的更多的硅片。两台不可替代的设备。零文档。最大的固执。
这款被 Nokia 过早扼杀的手机值得拥有一个合适的操作系统。我们正在给它一个。
**状态:开发中** —— QEMU 在 1.4 秒内启动到 shell,
真机正在进行激烈的反抗(TrustZone、平台安全、加密
bootloader —— 这是 Nokia 一贯的“好客”之道)。
## 这里的内容
### QEMU 机型 (`emulation/`)
定制的 QEMU 机型 `nokia-e7`,模拟 OMAP3630 SoC 和 E7 外设。
目前可在约 1.4 秒内将 Linux 6.12 引导至交互式 shell。
**模拟的硬件:**
- OMAP3630 (Cortex-A8 1GHz),带有 INTC、GPIO(6 个组)、sDMA(32 个通道)
- TWL5031 PMIC(I2C、4 从设备寄存器模型、RTC、USB PHY、看门狗、音频编解码器)
- LM8323 键盘控制器(完整的 按键→FIFO→IRQ→input 流水线)
- I2C 传感器:LIS302DL 加速度计、AK8974 磁力计、APDS990x 距离/环境光传感器
- Atmel mXT 触摸屏、BQ2415x 充电器、LP5521 LED 控制器
- GPMC 与 OneNAND 模型(Samsung 8Gbit MLC,完整命令状态机)
- HSMMC2 eMMC 模型,CM/PRM 时钟/电源域跟踪
- DSS 显示模型,I2C1/2/3 控制器
### 内核 (`kernel/`)
- `configs/nokia_e7_defconfig` — 最小化的 98 行 defconfig
- `dts/omap3630-nokia-e7.dts` — 约 690 行设备树,所有 I2C 设备探测成功
### 文档 (`docs/`)
- `hardware-lore.md` — 主芯片清单(49 个 IC)
- `qemu-machine-design.md` — SoC 模拟规范
- `emulation-strategy.md` — 优先模拟的方法
- `undocumented-*.md` — 对未公开 ASIC 的深度探索
- `knowledge-graph/` — 结构化的 JSON 硬件知识库
- 49 个组件,22 条总线,226 个信号,17 个电源轨,32 个闪存分区
- Mermaid 图表:系统框图、电源树、I2C 拓扑、启动序列
### 会议记录 (`lore/`)
按时间顺序记录了从首次启动尝试到成功模拟的开发历程,包括死胡同、调试技巧和各种发现。
## 手机概览
Nokia E7-00 是一款 2011 年发布的 Symbian^3 智能手机,其核心配置如下:
| 组件 | 详情 |
|-----------|---------|
| SoC | OMAP3630 (ARM Cortex-A8 @ 1GHz),RAPUYAMA D1800 封装 |
| RAM | 256MB LPDDR (Samsung K5W8G1GACK) |
| PMIC | TWL5031 (TI) |
| GPU | PowerVR SGX530 |
| ISP | BCM2727 (Broadcom VideoCore) |
| 显示屏 | 640x360 nHD AMOLED |
| 键盘 | 全尺寸滑盖 QWERTY (LM8323 控制器) |
| 闪存 | 1GB OneNAND + 16GB eMMC |
| 传感器 | 加速度计、磁力计、距离、环境光、触摸 |
| 连接性 | WiFi (SPI)、BT、GPS、NFC (PN544)、3G modem |
现有两台设备 —— 设备 A(开发目标)和设备 B(原厂参考/救援机)。
## 快速开始
```
# 构建 kernel
cd kernel/linux # (not included — use a shallow clone of Linux 6.12)
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- nokia_e7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j$(nproc) zImage dtbs
# 构建 QEMU (应用 omap3630.c 到 qemu source)
cd qemu && ninja -C build
# 启动 (initramfs)
qemu-system-arm -M nokia-e7 -m 256M -kernel zImage \
-dtb omap3630-nokia-e7.dtb -initrd initramfs.cpio.gz \
-append "earlycon clk_ignore_unused rdinit=/init" -nographic
# 启动 (ext4 root)
qemu-system-arm -M nokia-e7 -m 256M -kernel zImage \
-dtb omap3630-nokia-e7.dtb \
-drive file=rootfs.ext4,if=none,format=raw,id=hd0,cache.no-flush=on \
-device virtio-blk-device,drive=hd0 \
-append "earlycon clk_ignore_unused root=/dev/vda rw init=/init" -nographic
```
## 项目目标
1. 在 E7 的硬件上启动一个敏捷的 Linux 终端
2. 完整的网络功能(WiFi、蜂窝数据)
3. 充分利用每一个 ASIC(camera ISP、GPU、音频、传感器)
4. 模拟优先开发 —— 未经 QEMU 验证,绝不触碰真机
## 近期进展
为了从运行中的手机读取 584 字节的 pad mux 寄存器,我们经历了一段相当艰难的旅程:
- 从零开始构建了一个可用的 Symbian 工具链(GCC + Docker + CRT 启动代码探索)
- 逆向工程了 Nokia 的 MemSpy 内核驱动(191 个导入、168 个调试字符串 —— 无物理内存访问权限)
- 映射了 250 个 MemSpy 操作码(在此过程中导致手机崩溃了 6 次)
- 枚举了真机上运行的 200 个线程和 25 个内核驱动
- 安装了 FShell 并发现 `memoryAccess` LDD 已加载,但需要 TCB 能力
- 得知 TCB 在 Symbian 上是仅限 ROM 的 —— 无论怎么破解证书都无法获得
- 搜索了来自三个 Symbian 社区的 160,000 条 Telegram 消息
- 分析了一个 30MB 的 ROM 转储,试图找到并 NOP 掉 PlatSec 检查
- 现在正在逆向工程 Nokia 的 USB 服务协议,因为这似乎是读取寄存器所必须的
那 584 字节仍未读取。手机依然顽强抵抗。我们依然坚持不懈。
## 参与贡献
这是一个基于不可替代硬件的个人研究项目。如果您拥有
Nokia E7 硬件知识、OMAP3630 经验、Symbian 内核 internals,
或者您知道 CapsSwitch 到底是做什么的 —— 请提交 issue 或直接联系。
特别希望能联系到任何在 FShell 上成功运行过 `readmem`,
或了解用于原始内存访问的 Phonet/FBUS 协议的人。
## 许可证
文档和原创代码:MIT。
内核补丁遵循 Linux 内核许可 (GPL-2.0)。
QEMU 机型代码遵循 QEMU 许可 (GPL-2.0)。
标签:Arm架构, HTTP工具, Linux移植, OMAP3630, QEMU仿真, Symbian, TrustZone绕过, 云资产清单, 内核开发, 单板机, 固件分析, 安全渗透, 客户端加密, 嵌入式系统, 开源硬件, 手机破解, 数字取证, 旧机复活, 硬件安全, 硬件文档, 系统模拟, 网络安全审计, 自动化脚本, 设备树, 诺基亚E7, 身份验证强制, 逆向工程