1. 前期准备工作
1.1 创建 Github 账号
- 用个人邮箱创建一个 Github 账号并登录
1.2 配置 Github 的 Access Token
github访问令牌token的创建方法
Creating a personal access token
- 2021年11月后,向 Github 仓库 push 代码前需要先生成和配置 token
- 进入 Github 配置页,生成一个 token
-
生成的 token 是一串字符,如
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
-
在从本地库向 Github 远程库推送代码前,要先将 token 放进远程仓库中,即输入下列命令
git remote add origin https://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@github.com/zhugengyu/rt-thread.git
- 之后就可以正常拉取推送仓库代码了
1.3 Fork RT-Thread 公共仓库
RT-Thread Github
RT-Thread Gitee
- RT-Thread 的代码合入是通过 Github 仓库的 master 分支完成
- 日常开发为了加速下载可以参考RT-Thread 的 Gitee 镜像,但是最后提 PR需要在 Github 完成
2. 代码开发过程
2.1 从 Standalone 导入驱动库
-
在开发 RT-Thread 功能前,需要先修改 Standalone 仓库,RT-Thread 的 Phytium BSP 驱动库是从 Standalone 仓库导出的
-
运行导出脚本,其中,
- Git 远程仓库为 https://gitlab.phytium.com.cn/zhugengyu/phytium-standalone-sdk.git
- Git 远程分支为 rtt_1025
- 输出目录为 /mnt/d/proj/rt-thread-e2000/rt-thread/bsp/phytium/libraries/standalone
./export_rtt_bsp.py -i=https://gitlab.phytium.com.cn/zhugengyu/phytium-standalone-sdk.git -b=rtt_1025 -o=/mnt/d/proj/rt-thread-e2000/rt-thread/bsp/phytium/libraries/standalone
2.2 在 Gitee 进行开发
- 从 RT-Thread 的 Github master 分支出发,拉取一个开发分支,如
phytium_1025
- 将开发分支
phytium_1025
推送到 Fork 的 Gitee 私有仓库,保存日常开发代码
2.3 推送 Github 上传分支
-
和一般的项目开发一样,把代码调试好,推送到自己 Fork 的 RT-Thread Github 仓库分支上,例如,
-
在提交 PR 之前,参考 BSP提交自查,确认修改的代码符合 RT-Thread 的要求
-
代码中的注意事项包括
-
- glob 函数的使用,应该谨慎,如果存在不能使用的源文件,应该用list 的方式进行添加 如 src+=[‘main.c’]
-
- #include <rtthread.h> 引用之后,不需要重复使用rtconfig.h
-
- scons 结尾增加一个换行符,Kconfig 文件结尾要增加一个换行符
-
2.4 用AStyle进行格式修改
- 下载解压 AStyle 格式检查修改工具
-
将 AStyle 的 bin 目录(这里是 D:\portable\AStyle\bin)加入到 Windows 环境变量 PATH 里
-
在 phytium bsp 目录下输入以下命令,进行格式检查,检查过程需要等待一段时间
for /R %f in (*.cpp;*.c;*.h; *.S) do astyle --style=allman "%f" --indent=spaces=4 --indent-preproc-block --pad-oper --pad-header --unpad-paren --suffix=none --align-pointer=name --convert-tabs --verbose
- 格式检查修改最重要的是缩进和将 TAB 缩进换成四个空格键缩进
2.4 使用 Format 脚本进行代码格式化
2.5 免除 Standalone SDK 的 CI 代码检查
- RT-Thread 可以免除外部引入库的代码检查,在 libraries 目录下添加文件.ignore_format.yml,指定不需要参与检查的库代码,如
standalone
- ignore_format
3. 向 RT-Thread 提交 PR
3.1 准备好代码,发起 PR
- 前面 2.3 已经将代码推送到 Github 个人仓库了,按照一般的流程向上流的 RT-Thread 公共库发起 PR
- PR 提交后,会自动进行一系列检查,检查通过后才能合并
- 修改 CI 返回的错误,然后手动同步rt-thread 主分支的新 commit,再次触发 CI,直到 CI 全部通过
3.2 签署 CLA 协议
-
账号第一次向 RT-Thread 贡献代码前需要签署个人 CLA 协议,CLA 即 Contribution License Agreement,贡献许可协议, 它的存在是为了规避潜在的风险,
-
所谓的风险,举几个例子:
-
- 某公司向社区捐了一笔钱,社区拿这笔钱举办了一场会议,如果该公司对此不满,有可能会请求索回捐款,也有可能诉诸法律;
-
- A公司或个人向社区贡献了一个项目,这个项目被B公司拿去进行商业活动,那么A公司有可能会状告B公司侵犯其知识产权
-
-
签署 CLA 后,简单的讲,贡献者通过 CLA 宣称贡献的代码不存在纠纷,提供的贡献(包括捐款、源代码)将授权给社区使用,社区可以放心接受贡献代码,,有点像我们发表论文里都会写上
The authors declare no conflict of interest
- 进入 CLA 条款目录
- 进入签署界面
- 完成 CLA 签署
3.3 联系 RT-Thread 社区进行代码评审
- 联系社区负责人,回复处理 review 建议,等待 review 完成