感谢你对 IMX-Forge 项目的关注!我们欢迎各种形式的贡献。
我们欢迎以下三种贡献方式:
- 🐛 修复 Bug
- ✨ 添加新功能
- ♻️ 代码重构
- 📝 完善文档
- 🧪 添加测试
- 修正错别字和错误
- 改进文档结构和表达
- 翻译文档
- 添加示例和教程
- 提出 Bug 报告
- 提出功能请求
- 参与讨论
- 分享使用经验
开发主机:
- Ubuntu 22.04+ 或 WSL2 (Ubuntu 22.04/24.04)
- CPU: 4 核心以上
- 内存: 8GB 以上
- 磁盘: 20GB 可用空间
目标硬件:
- NXP i.MX6ULL 开发板
- 串口模块(CP2102/CH340/FT232)
- SD 卡 + 读卡器
我们推荐使用 Docker 开发环境进行贡献,确保环境一致性:
优点:
- ✅ 环境统一,避免"在我机器上能跑"问题
- ✅ 开箱即用,无需配置工具链和依赖
- ✅ 适合团队协作
快速开始:
# 1. 构建 Docker 镜像
cd docker
DOCKER_BUILDKIT=1 docker build -t imx-forge:latest .
cd ..
# 2. 运行容器
docker run -it --rm -v $(pwd):/workspace imx-forge:latest
# 3. 在容器内开发
# (所有工具链和依赖已预装)详细文档:
如果您希望在主机上直接开发,请参考:
Docker 环境:
# 运行容器并验证
docker run -it --rm -v $(pwd):/workspace imx-forge:latest
# 在容器内执行
cd /workspace
./scripts/release-all.sh主机环境:
cd /path/to/imx-forge
# 一键构建所有组件(NXP BSP 内核)
./scripts/release-all.sh
# 或指定只构建某一阶段
./scripts/release-all.sh --stage 1 # 只构建 U-Boot
./scripts/release-all.sh --stage 2 # 只构建内核
./scripts/release-all.sh --stage 3 # 只构建 BusyBox我们使用以下分支策略:
main- 主分支,保持稳定feature/*- 功能开发分支fix/*- Bug 修复分支
我们遵循语义化提交规范:
type(scope): subject
body(可选)
footer(可选)
Type 类型:
feat: 新功能fix: Bug 修复docs: 文档更新refactor: 代码重构test: 测试相关chore: 构建/工具链相关
示例:
# 新功能
git commit -s -m "feat(uboot): add support for custom board configuration"
# Bug 修复
git commit -s -m "fix(kernel): resolve Ethernet driver initialization issue"
# 文档更新
git commit -s -m "docs: update Quick Start guide for WSL2"点击 GitHub 页面右上角的 "Fork" 按钮。
git clone https://github.com/YOUR_USERNAME/imx-forge.git
cd imx-forgegit checkout -b feature/your-feature-name
# 或
git checkout -b fix/your-bug-fix# 进行你的更改
git add .
git commit -s -m "feat: add your feature"git push origin feature/your-feature-name- 访问你的 Fork 仓库页面
- 点击 "Compare & pull request"
- 填写 PR 描述:
- 清晰的标题
- 详细的描述
- 关联的 Issue(如果有)
- 测试情况
- 维护者会尽快审查你的 PR
- 根据反馈进行修改
- 响应评论和建议
- PR 被批准后,维护者会合并代码
- 分支可能会被删除
我们使用 .clang-format 来统一代码风格。
- 缩进:4 空格
- 命名:驼峰命名(
myFunction) - 指针:左对齐(
int* a) - 大括号:Allman 风格
# 格式化单个文件
clang-format -i file.c
# 格式化整个目录
find . -name "*.c" -o -name "*.h" | xargs clang-format -i项目包含 .clangd 配置,支持:
- VS Code (C/C++ 扩展)
- Vim/Neovim (coc-clangd)
- Emacs (lsp-mode)
- 函数:驼峰命名
myFunction() - 变量:驼峰命名
myVariable - 常量:大写下划线
MAX_SIZE - 类型:驼峰命名 + _t 后缀
typedef struct MyStruct MyStruct_t;
- 函数:小写下划线
my_function() - 变量:小写下划线
my_variable - 常量:大写下划线
MAX_SIZE
- C/C++:小写下划线或小写连字符
my_file.c/my-file.h - Shell:小写下划线
my_script.sh - Markdown:小写连字符
read-me.md
所有代码必须能够成功编译:
./scripts/release-all.sh- 在 i.MX6ULL 开发板上验证功能
- 确保没有引入新的 Bug
- 测试相关的边缘情况
- 同步更新相关文档
- 添加必要的注释
A: 我们建议从以下方式开始:
A: 当然可以!我们需要各种形式的贡献:
- 📝 改进文档
- 🐛 报告 Bug
- 💡 提出建议
- 🌐 帮助其他用户
- 🎨 设计相关资源
A: 请通过 GitHub Issues 提交,包含:
- 清晰的标题
- 详细的问题描述
- 复现步骤
- 环境信息(操作系统、工具链版本等)
- 相关日志和截图
A: 请:
- 检查 PR 是否符合贡献指南
- 确保 CI 检查通过
- 在 PR 中 @ 相关维护者
- 耐心等待,维护者都是志愿者
通过贡献代码,你同意你的贡献将根据项目的 MIT License 进行许可。
感谢你花时间阅读贡献指南!
你的每一个贡献都能让 IMX-Forge 项目变得更好。
让我们一起让嵌入式 Linux 开发变得简单! 🚀
Sources: