1. 项目概述
作为一名嵌入式开发老手,最近我在树莓派裸机开发上踩了不少坑。今天想分享一个特别实用的技巧:如何在实体树莓派上直接运行裸机程序,完全跳过操作系统层。这种方式对于学习ARM架构、理解硬件工作原理特别有帮助。
很多教程都停留在QEMU模拟器阶段,但实际硬件运行会遇到一堆模拟器里不会出现的问题。我将通过这篇笔记,记录从环境搭建到成功点亮LED的全过程,重点解决那些官方文档没写但实际会遇到的坑。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 开发环境准备
2.1 硬件选型要点
我使用的是树莓派3B+型号,选择这个型号有几个考虑:
- 性价比高:二手市场价格约200元左右
- 资料丰富:社区支持完善
- 外设典型:GPIO布局具有代表性
注意:不同代际的树莓派在内存映射和启动方式上有差异,本文的方法主要适用于3B/3B+/4B型号
2.2 工具链搭建
推荐使用官方的arm-none-eabi工具链:
bash复制sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi
验证安装:
bash复制arm-none-eabi-gcc --version
我遇到的一个典型问题是工具链版本冲突。如果之前安装过其他ARM工具链,建议先执行:
bash复制sudo apt remove gcc-arm-linux-gnueabihf
3. 裸机程序开发
3.1 最小工程结构
一个典型的裸机项目目录应包含:
code复制├── Makefile
├── kernel.c
├── linker.ld
└── start.S
关键文件说明:
start.S:ARM汇编入口,处理CPU初始状态linker.ld:内存布局定义kernel.c:主程序逻辑
3.2 启动代码详解
start.S的核心内容:
assembly复制.section .init
.global _start
_start:
ldr sp, =0x8000 @ 设置栈指针
bl main @ 跳转到C代码
b . @ 无限循环
这个简单的启动代码
