树莓派2移植linux,如何在树莓派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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值