AM335X-移植RTThread
前言
RTThread的BSP部分对于TI官方的BeagleBone AM3358开发板有一点点支持,因此同为AM335X系列的蚂蚁矿板可以参考rtthread/bsp/beaglebone下的底层代码。
下载源码
打开RTThread的github,传送门: https://github.com/RT-Thread/rt-thread
此处注意不要直接去下载master分支下的代码,这个分支是开发版,详情见官网说明。
找到左边的 release
TAG,点进去
下载4.X的版本,截至当前,最新的版本是4.0.3
下载后得到一个zip压缩文件,约223MB,这里可以删除掉bsp文件夹下的其他处理器支持,减少文件数量,这里我只留下beaglebone
的bsp代码,其余的均删除。
导入eclipse
修改下C/C++ build -> build settings和C/C++ General -> Path and Symbols,让eclipse不是满屏的红色波浪线报错就可以,可以看到bsp部分只提供了gpio和uart驱动,还是比较简陋的...
添加CPU支持包
这样直接编译肯定是无法运行的,默认的bsp在rt_hw_board_init
中没有完成mmu,interrupt,和heap的初始化,所以上电串口输出完rtt的logo后,rt_application_init
时就挂掉了。
首先在bsp/beaglebone
新建一个libcpu
的包,用于存放处理器相关代码,接着把rt-thread-4.0.3/libcpu/arm/am335x
文件夹内的所有文件复制进去。
然后删除rt-thread-4.0.3/libcpu/
整个文件夹,这里面还有其他处理器的支持包,没啥用处,直接全部删除。
在tools/building.py
442行可以看到这里has_libcpu
包含了默认的libcpu文件夹,因此需要在bsp的SConstruct中声明下has_libcpu=True
,这样libcpu包就不会到默认路径去找了。
修改bsp的SConstruct中的PrepareBuilding配置
修改编译/连接脚本
默认提供的连接脚本是beaglebone_ram.lds
,这里需要对连接地址进行修改,原先是0x80002000,这里我用了自己修改过的二级引导(SPL)来启动rtthread,因此连接器首地址就是ram首地址。
在移植的时候务必确保启动地址被正确配置,顺便重命名为link.lds
。
检查rtconfig.py对于编译选项的配置,如果后续要添加编译选项,可以在此文件修改
添加SConstruct的clean选项,默认情况是没有的,可以按需求添加进去。
修改启动文件
打开libcpu/start_gcc.S
,在stack_setup
之后,clear bss
之前添加开启分支预测和NEON VFPv3协处理器的代码,启动文件的修改可以参考StarterWare\system_config\armv7a\gcc\init.S