项目二:QEMU 上的嵌入式系统
这是一个系统化的嵌入式开发项目,模拟真实的嵌入式系统启动流程。
项目目标
实现一个完整的嵌入式系统,包含:
- Bootloader(从 Flash 加载程序到 SRAM)
- 数据搬运(.data 段拷贝)
- BSS 清零
- 跳转到应用程序
- UART 驱动和 Shell
系统架构
内存布局:
┌─────────────────────┐ 0x80000000
│ Bootloader │ Flash (ROM)
│ - 初始化 │
│ - 数据拷贝 │
│ - 跳转到 SRAM │
├─────────────────────┤ 0x80010000
│ 应用程序镜像 │
│ - .text │
│ - .rodata │
│ - .data (初始值) │
├─────────────────────┤ 0x80100000
│ SRAM │
│ - .text (拷贝) │
│ - .data (拷贝) │
│ - .bss (清零) │
│ - 栈 │
└─────────────────────┘
设计要求
1. 两阶段启动
- Stage 1 (Bootloader):运行在 Flash (0x80000000)
- Stage 2 (Application):运行在 SRAM (0x80100000)
2. 数据搬运
- 将 .text 段从 Flash 拷贝到 SRAM
- 将 .data 段从 Flash 拷贝到 SRAM
- 清零 .bss 段
3. 地址重定位
- 使用位置无关代码(PIC)
- 正确处理符号地址
学习路径
第一部分:环境与基础
第二部分:启动流程
第三部分:硬件驱动
第四部分:系统库
第五部分:应用开发
开始学习
从 QEMU RISC-V 入门 开始!