我们从现在开始会逐步连载RT-Thread Smart(简称rt-smart,甚至有时会称为smart os)的介绍文章,旨在让大家认识,接触到smart os的方方面面。
这个是本系列的第一篇文章,一些介绍及树莓派上rt-smart的应用编程入门(更多的从应用程序角度入手)。后续还包括在rt-smart上的不同应用程序介绍:
wget & curl移植
busybox移植
sdl图形类应用
dropbear及ssh server应用
为什么选择树莓派
树莓派是第一个smart对外提供公开支持的硬件平台?选择树莓派有诸多方面的原因:第一,它可以算是普及度最广的一款ARM Cortex-A硬件开发板,被广泛地应用在一些创新应用,高校教育等方面。第二,自树莓派4B发布以来,芯片核心部分也越来越标准化(相比较之前的树莓派2、3等,携带了标准的GIC中断控制器,有线以太网网口(vs 树莓派3的USB转有线以太网)),从这个再把rt-smart移植扩展到其他A系列处理器也会是很好的参考,例如后续ART-Pi版本ART-Pi smart开发板(ARM Cortex-A7核心,更合适的量产版本)。
树莓派4B包括了4核的ARM Cortex-A72,1.5GHz的BCM2711芯片,可以执行ARM AArch64位指令,也可以执行ARM AArch32位指令,具备标准化的通用控制器GIC。和树莓派3B+的硬件规格对比情况:
编写应用程序
要在树莓派上运行smart也很简单,直接下载smart的发布版,里面有树莓派4B上对应的移植代码,及一些用户态应用程序。
在smart上写程序,可以有以下几种方式:传统的RT-Thread scons构建方式;类Linux的方式,这里给出了基于Makefile的方式,及基于CMake的方式。下面通过一个 ❀ 花式的Hello World程序来进行介绍。
采用scons构建的应用程序
因为RT-Thread原生是采用scons来进行构建的,所以这里也用scons来构建一个应用程序,它会调用RT-Thread的一些API来创建一个线程,并输出"hello world!"。
examples/scons/main.c文件清单
1#include <rtthread.h>
2
3void thread_entry(void* parameter)
4{
5 rt_kprintf("hello world\n");
6}
7
8int main(int argc, char** argv)
9{
10 rt_thread_t tid;
11 tid = rt_thread_create("hello", thread_entry, RT_NULL,
12 1024, 20, 20);
13 if (tid)
14 {
15 rt_thread_startup(tid);
16 }
17 rt_thread_mdelay(100);
18
19 return 0;
20}
对应的编译脚本,包含两个,一份是SConscript脚本,另外一份是SContruct脚本
SConstruct文件清单:
1import os
2import sys
3
4# UROOT_DIR指向rt-smart sdk中的userapps文件夹
5UROOT_DIR = os.path.join('..', '..&#