怎么在树莓派2上移植rt-thread操作系统

这篇文章给大家分享的是有关怎么在树莓派2上移植rt-thread操作系统的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

创新互联专注于石阡企业网站建设,响应式网站设计,购物商城网站建设。石阡网站建设公司,为石阡等地区提供建站服务。全流程按需定制设计,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

1.准备工作

硬件

1.树莓派2开发板(如果没有,可以直接用qemu替代)。

软件

1.window上可以采用rt-thread提供的env工具。

2.Ubuntu上需要装scons,因为rt-thread操作系统是通过scons组织的。

3.git工具,进行代码管理

4.qemu,模拟开发板

5.arm gcc版本gcc-arm-none-eabi-5_4-2016q3

以下文章的实验都是在Ubuntu16.04下进行,用qemu仿真树莓派2。实际硬件也进行过测试,效果一样。

2.移植思路

树莓派2的启动上电流程是先启动gpu,从sd卡中读取kernel固件。所以如果要自己实现kernel,也需要做类似的处理,编译一个kernel7.img的固件放在sd卡中。如果直接用qemu操作,那么就不需要这么多复杂的操作,直接本地模拟就可以了。

如果要实现移植rt-thread操作系统到树莓派上,要点是什么?

2.1.启动代码

当树莓派的gpu加载kernel7.img到sdram开始执行的时候,首先需要做必要的初始化工作。所以链接地址0x00008000需要正确的给予。初始化必要的设备,由于前期没有分配栈,只能使用汇编进行初始化。简而言之,进行必要的操作。那么这些必要的操作有那些?由于树莓派2的芯片采用bcm2835,里面有4个核在工作,所以只能让一个核工作,其他三个核睡眠。然后关闭mmu,分配栈空间,清除bss段。此时可以跳转到C语言去执行相关的逻辑操作了。毕竟C语言的操作比汇编看起来让人清晰。

2.2.中断向量初始化

这里需要指定中断向量表,指定中断函数的处理函数。根据armv7的体系架构,整理中断向量表的偏移。然后初始化rt-thread中断向量表的初始化。当然,这些已经在操作系统里面完成了。

2.3.tick

rt-thread操作系统需要有时钟tick,也就是定时中断。对于这部分来说,需要自己实现一个timer中断。在实体硬件上,我们可以采用的是树莓派内部自带的一个名为SP802的时钟模块产生的中断,但是qemu并没有实现,只实现gtimer。所以为了保证硬件和qemu都能运行,实验中采用的是gtimer。

2.4.上下文切换

如果要实现中断现场的返回和线程切换现场的返回,少不了上下文切换的逻辑,也就是context。这部分主要完成的是切换上下文前保存状态寄存器,切换完成后恢复寄存器的内容。这样就能够恢复上次的现场了。

2.5.uart

如果要调试rt-thread程序,当然少不了串口打印,rt-thread操作系统的一大特色就是支持shell。可以通过命令来操作系统,查看信息。树莓派有两个串口,一个是直接通过内部时钟驱动的mini uart。另外一个是pl011串口模块,两者操作的寄存器地址不一样。

以上5点也是整个最小系统移植关键。现在笔者已经将这个树莓派rt-thread最小系统移植上去了。有兴趣的自己可以玩一下。

https://github.com/bigmagic123/raspi-littlevgl。

这个项目的是为了在树莓派上移植littlevgl。初代版本就是最小系统。

3.操作步骤

首先需要将代码clone下来。

git@github.com:bigmagic123/raspi-littlevgl.git

怎么在树莓派2上移植rt-thread操作系统

然后进入到工程目录/bsp/raspi2。这里需要修改的是rtconfig.py文件中的GCC路径。

怎么在树莓派2上移植rt-thread操作系统  

这里需要改成自己的gcc路径。

然后打开vscode上的Terminal --> new  Terminal可以看到控制台窗口的出现。

怎么在树莓派2上移植rt-thread操作系统

输入scons进行编译。现象如下则表示成功。

怎么在树莓派2上移植rt-thread操作系统  

QEMU运行

如果此时电脑上已经装了qemu,那么直接启动脚本即可正常运行了。

怎么在树莓派2上移植rt-thread操作系统  

此时表示系统正常运行成功。

树莓派2硬件运行

怎么在树莓派2上移植rt-thread操作系统  

连接树莓派用USB转TTL模块。然后将刚才编译好的文件放到SD卡目录中。

SD卡文件只留下这三个文件就可以了,其中kernel7.img就是我们刚才用scons编译出来的rtthread固件。

怎么在树莓派2上移植rt-thread操作系统  

4.代码分析

相关的内核代码可以在rt-thread的官方网站上进行下载。笔者只是改了一些bsp文件。

CPU相关

与cpu相关的在bsp/raspi2/cpu目录下。

启动从start_gcc.S开始。上下文切换在context_gcc.S文件中。

外设相关

外设相关的代码在driver目录下。目前只有实现uart和tick。

用户操作代码

用户操作代码在applications文件中,其中启动的第一个线程就是在main函数中

int main(int argc, char** argv)
{
   rt_kprintf("Hello RT-Thread!\n");
   while(1)
   {
       rt_kprintf("cur tick is %d\n",rt_tick_get());
       rt_thread_delay(1000);
   }
   return 0;
}

感谢各位的阅读!关于“怎么在树莓派2上移植rt-thread操作系统”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


网站名称:怎么在树莓派2上移植rt-thread操作系统
网站链接:http://ybzwz.com/article/psippc.html