贵阳哪里可以做网站,十五种网络营销工具,自助模板网站建设做seo,小红书推广方法RT-Thread今天的快速发展和所取得成绩#xff0c;离不开所有开发者的持续贡献和社区小伙伴的竭力支持。一、前言今年6月#xff0c;我在一款智能混合型的FPGA芯片上#xff0c;完成了RT-Thread的移植#xff0c;并向RT-Thread提交了一个完整的BSP#xff0c;后续又根据审查… RT-Thread今天的快速发展和所取得成绩离不开所有开发者的持续贡献和社区小伙伴的竭力支持。一、前言今年6月我在一款智能混合型的FPGA芯片上完成了RT-Thread的移植并向RT-Thread提交了一个完整的BSP后续又根据审查意见进行了一些完善最近(11.18)被合并到RT-Thread主分支上。如果你曾经下载过RT-Thread的源码仓库在最常用的STM32 BSP上面的smartfusion2这个BSP就是我提交的了如果有读者朋友使用过这款芯片欢迎体验或者提交BUG。BSP包有的朋友可能注意到了我这里使用的是FPGA芯片FPGA芯片还能运行RT-Thread吗准备的说应该是FPGA片上的处理器可以运行RTOS这里的处理器从实现方式来看包括硬核和软核处理器从内核种类上来看包括ARM核或其他内核如ARM硬核Altera的NIOS软盒Xilinx的microblaze软核还有51软核等关于FPGA片上处理器可以参考以下文章FPGA硬核和软核处理器的区别除了ZYNQ还有哪些内嵌ARM硬核的FPGA此次提交的这个BSP是我第一次向开源项目贡献代码而且是向这么优秀的国产RTOS操作系统还是很有成就感的~本篇文章记录如何向RT-Thread或其他开源项目贡献代码有不准确的地方欢迎大家指正希望大家支持国产RTOS的发展二、RT-Thread遵循的许可协议RT-Thread的开源协议是进行过调整的在2018年RT-Thread官方公众号发布的一篇文章[1]中我们可以知道当时是使用的GPLv2协议GPLV2但是现在已经是Apache-2.0协议了。rt-thread所遵循的开源协议在贡献代码之前我们有必要先来了解一下开源项目所遵循的协议如果你提交成功开源协议将会约束这些代码被如何使用。从RT-Thread官方GitHub页面我们可以了解到RT-Thread所遵循的开源协议为Apache-2.0 License这个协议有以下特点永久权利一旦被授权永久拥有。全球范围的权利在一个国家获得授权适用于所有国家。假如你在美国许可是从印度授权的也没有问题。授权免费且无版税前期后期均无任何费用。授权无排他性任何人都可以获得授权授权不可撤消一旦获得授权没有任何人可以取消。比如你基于该产品代码开发了衍生产品你不用担心会在某一天被禁止使用该代码。有很多人认为开源就是免费可以随意的使用其实这个观点是错误的。如果你有自己的开源项目关于协议的选择可以参考黄工大佬之前总结的[2]程序猿如何选择开源协议开源协议虽然不一定具备法律效力但是当涉及软件版权纠纷时开源协议也是非常重要的证据之一。三、SmartFusion2 BSP简介这个BSP是移植 RT-Thread 操作系统到一款 FPGA 芯片——M2S010 该芯片属于 Microsemi(现Microchip)SmartFusion2系列是一款智能混合型FPGA片上除了 FPGA Fabric 逻辑部分还包括一个 ARM® Cortex™-M3 内核的 MCU主频最高 166MHz 256KB eNVM64KB eSRAM集成GPIO、UART、I2C、SPI、CAN、USB等基本外设。关于 Microsemi第三大 FPGA 厂商原 Actel 半导体2010 年Microsemi 收购 Actel2018 年 Microchip 收购 Microsemi。SmartFusion2 内部框图Microsemi_Smartfusion2_BD移植了 RT-Thread 内核支持线程调度、线程间同步和通信等已经完成了PIN、Serial设备驱动FinSH组件默认使用uart0设备。支持GPIO和UART外设支持SCons构建系统可以输入scons调用env工具中包含的arm-gcc编译器构建工程支持以下scons命令scons使用arm-gcc编译BSPscons -c清除执行 scons 时生成的临时文件和目标文件。scons --targetmdk4重新生成Keil MDK4环境下的工程。scons --targetmdk5重新生成Keil MDK5环境下的工程。scons --dist打包BSP工程包括RT-Thread源码及BSP相关工程文件。通过添加Kconfig文件可以使用menuconfig来配置外设用于生成rtconfig.h。四、如何提交你的BSP包0.准备工作进行提交之前需要做一些准备工作一个GitHub账号Git Windows客户端(git-scm.com/download/win)一些基本Git命令的使用如git clone/add/commit/pull/push/checkout等。了解所使用处理器的启动流程熟悉基本外设的使用如GPIO、UART等。1.Fork并Clone到本地PC登录自己的GitHub账号Fork RT-Thread仓库到个人仓库Fork的意思可以理解为复制一份。Fork将远程仓库下载到本地git clone https://github.com/username/rt-thread这样就会把远程代码下载到本地。Clone2.创建分支从 master 分支创建自己的开发分支如whik_sf2可以使用命令git checkout -b whik_sf23.开发你的BSP包这是整个开发过程中最重要也是最耗时的一步如果是ARM内核可以参考STM32的移植过程如果是其他内核就需要多用一点时间了。编码风格参考https://github.com/RT-Thread/rt-thread/blob/master/documentation/coding_style_cn.md一个最基本的BSP包至少应该包括以下部分内核移植支持线程调度、线程间同步和通信支持GPIO/UART外设PIN/Serial设备驱动支持SCons构建系统可以使用arm-gcc进行编译支持生成MDK工程支持dist打包通过SConscript、SConstruct、rtconfig.py文件实现支持menuconfig配置外设用于生成rtconfig.h通过Kconfig文件实现README文件用于指导开发者如何使用这个BSP包可以参考其他BSP文件夹下的README文件提交关于BSP的代码尽量确保代码改动仅限制于BSP中而不影响到其他代码否则可能会被拒绝[3]。4.提交到远程并发起PR如果本地进行测试没问题就可以同步到远程了三部曲git add/commit/push更新到远程之后就可以发起PR了在 git 仓库中选择自己修改了的分支点击 create Pull Request 按钮发起 pull request。PRPR在正式发起 Pull Request 之前需要根据 Preview 里面默认的描述信息即 checklist 仔细核对代码在没问题的 checklist 对应选项复选框填写[x]确认注意[x]两边没有空格。比如若代码是成熟版本请选择成熟版本且可以添加相应的描述信息checklist 核对完成才可发起 Pull Request。ChecklistChecklist第一次为 RT-Thread 贡献代码需要需要签署 Contributor License Agreement。CLA签署请确认 CLA 显示签署成功及 CI 编译通过如下图所示CLA签署提交PR之后就会获得一个PR#号码在https://github.com/RT-Thread/rt-thread/pulls可以看到所有的PR请求其中应该会包含你的。如果是Open状态说明正在进行代码审查还没有合并到主分支。5.代码审查一个完善的BSP往往不是一次性就能提交成功的。提交PR后要多看看反馈 项目管理者会对提交的代码进行审查如果有问题会在对应的PR下面进行评论提出修改意见就像下面这样修改意见PR只需要提交一次每次根据修改意见进行修改之后项目管理者会看到你的修改并再次审查修改之后的代码一般需要2个或以上的项目管理者进行审查如果代码没有问题就可以进行以下步骤了。6.添加到CI自动化编译如果是提交的完整BSP可以将BSP添加到CI编译脚本使用远程主机对BSP进行编译和本地使用arm-gcc scons编译是一样的如果本地编译正常这一步基本也会通过。添加到CI编译7.等待合并如果CI编译成功而且审查通过这个PR会依次被标记为1、2此时只需要耐心等待几天直到最终被合并到主分支上。我提交的这个BSP过程可以参考https://github.com/RT-Thread/rt-thread/pull/3661五、除了代码还能向开源项目贡献什么为开源项目做贡献我们可以分为两大类:代码类贡献和非代码类贡献。代码贡献BUG修复软件包开发BSP提交内核开发非代码贡献撰写和改进文档通过实例来展示RT-Thread的使用为RT-Thread撰写教程如学习笔记、常见问题等官方社区发布自己的经验文章或积极回复帖子的问题六、注意事项不要使用非GitHub账号提交不要使用不同账号提交Commit之后提交PR会导致CLA签署失败编程风格遵守documentation 目录下的 coding_style_cn.txt文件。不接受5个以上的Commit七、总结向开源项目贡献代码提交PR可以通俗的理解这里摘自知乎[4]网友的一段解释我尝试用类比的方法来解释一下pull reqeust。想想我们中学考试老师改卷的场景吧。你做的试卷就像仓库你的试卷肯定会有很多错误就相当于程序里的bug。老师把你的试卷拿过来相当于先fork。在你的卷子上做一些修改批注相当于git commit。最后把改好的试卷给你相当于发pull request你拿到试卷重新改正错误相当于merge。当你想更正别人仓库里的错误时要按照下面的流程进行先 fork 别人的仓库相当于拷贝一份别人的资料。因为不能保证你的修改一定是正确的对项目有利的所以你不能直接在别人的仓库里修改而是要先fork到自己的git仓库中。clone 到自己的本地分支做一些 bug fix然后发起 pull request给原仓库让原仓库的管理者看到你提交的修改。原仓库的管理者 review 这个 bug如果是正确的话就会 merge 到他自己的项目中。merge 的意思就是合并将你修改的这部分代码合并到原来的仓库中添加代码或者替换掉原来的代码。至此整个 Pull Request 的过程就结束了。参考资料[1]. 如何开启RT-Thread社区贡献之路https://mp.weixin.qq.com/s/JfVYB0yUcbyxa5EVWY4DKw[2]. 五种开源协议(GPL,LGPL,BSD,MIT,Apache)https://www.oschina.net/question/54100_9455[3]. 在Github上为RT-Thread贡献代码为自己的人生涂色https://mp.weixin.qq.com/s/pPGunFzGcfz01pugNnWCiA[4]. GitHub 的 Pull Request 是指什么意思https://www.zhihu.com/question/21682976我的博客www.wangchaochao.top我的公众号mcu149由于微信文章不支持超链接文中出现的软件、程序等文件下载可以点击如果觉得我的文章对你有所帮助可以随手点“好看”分享你的支持将是我持续更新的动力。