paulober/unoq-baremetal
GitHub: paulober/unoq-baremetal
一个用纯 AArch64 汇编编写的裸机操作系统,专为 Arduino UNO Q 的高通 QRB2210 芯片实现自主的 UART、中断、定时器、GPIO 驱动和交互式 shell。
Stars: 1 | Forks: 0
# 针对 Arduino UNO Q 的裸机 AArch64 操作系统
一个使用**纯 AArch64 汇编**编写的小型操作系统,不包含任何第三方运行时代码。最初在 QEMU 中进行原型开发,随后在 Arduino UNO Q 的 **Qualcomm QRB2210** 上成功运行:它在 `ExitBootServices` 处从固件接管机器控制权,并运行其自主的 UART、中断控制器、定时器、GPIO 和 shell。
`src/` 目录下的所有源文件均为手工编写的汇编代码。硬件寄存器布局取自公开文档及开发板自身的设备树,并经过实测验证 —— 参见 [`NOTICE`](NOTICE) 和 [docs/boot-chain.md](docs/boot-chain.md)。
## 板载运行内容
UEFI 交接后,操作系统直接驱动硬件:
- **GENI UART** — 专用于 SE4 控制台的自主收发驱动。
- **GICv3 + EL1 虚拟定时器** — 1 Hz 中断。初始化顺序针对运行中的内核进行了调校;定时器为 INTID 19。
- **APSS 看门狗** — 由定时器 IRQ 提供信号,因此即使发生挂起仍会触发重置。
- **TLMM GPIO** — 驱动 RGB 用户 LED。
- **交互式 shell** — 基于 UART 的表驱动命令调度器:
| 命令 | 效果 |
|---|---|
| `help` | 列出命令 |
| `el` | 当前异常级别 |
| `uptime` | 启动以来的定时器节拍数 |
| `led ` | off / red / green / blue / yellow / cyan / magenta / white |
| `rainbow` | 依托定时器以 1 Hz 循环变色,直到有按键按下 |
| `wdt` | 看门狗启用状态及超时触发时间 |
新增命令只需添加一行表项和一个函数;调度器本身永远不需要改动。
## 编译与运行
QEMU(真实的 UEFI 固件,与板载相同的 EFI 交接流程):
```
make run
```
开发板端,开发流程无需 EDL:
```
make send # builds and stages /tmp/b.efi
```
接着,在 U-Boot 提示符下,输入 `loady`,通过 YMODEM 发送 `.efi` 文件,然后执行 `bootefi
$loadaddr`。完整细节以及可逆的永久安装方法,请参阅 [docs/board-flashing.md](docs/board-flashing.md)。
## 目录结构
| 路径 | 内容 |
|---|---|
| `src/` | 操作系统本体:入口、UEFI 封装、GENI UART、GICv3、定时器 IRQ、看门狗、GPIO、shell |
| `board/` | 通过 Firehose 将 `.efi` 刷入 ESP,以及恢复原厂 ESP |
| `docs/` | [启动链与刷机参考](docs/boot-chain.md)、[开发板刷机指南](docs/board-flashing.md)、[AArch64 速查表](docs/aarch64-cheatsheet.md)、[只读开发板分析](docs/backup-analysis.md)、[QEMU 原型](docs/qemu-prototype/) |
## 注意事项
- 此开发板的 **Secure Boot 处于关闭状态**,因此可以运行未签名的代码。
- **启动链:** PBL → XBL → ABL → `boot_a` = U-Boot → U-Boot 的 UEFI → ESP。
- A/B **重试计数器**在每次加载时递减;大约启动 7 次后,ABL 将降级进入 fastboot。使用 `fastboot --set-active=a` 重置。
- **SE4 串口电平为 1.8 V** — 适配器的 TX 引脚需要使用电平转换器。
有关上述内容的逆向工程细节,请参阅 [docs/boot-chain.md](docs/boot-chain.md)。
## 许可证
Apache 2.0。参见 [`LICENSE`](LICENSE) 和 [`NOTICE`](NOTICE)。
标签:AArch64, Arduino, 安全报告生成, 快速连接, 操作系统, 汇编语言, 物联网开发, 硬件驱动, 裸机编程, 身份验证强制