chinesebear 发表于 2015-6-27 23:22:06

关于在smart_loong(LS1C)开发板RT-Thread的移植

本帖最后由 chinesebear 于 2015-9-14 20:58 编辑

教程for smart loong:http://pan.baidu.com/s/1bnyQa8B龙芯智龙开发板教程rtt for smart loong:链接


关于在smart_loong(LS1C)开发板RT-Thread的移植by chinesebear(swubear@163.com)RT-Thread RTOS是一款来自中国的开源实时操作系统,由国内一些专业开发人员开发、维护。它不仅仅是一款高效、稳定的实时核心,也是一套面向嵌入式系统的软件平台,覆盖了全抢占的实时操作系统内核,小巧而与底层具体实现无关的文件系统,轻型的TCP/IP协议栈以及轻型的多窗口多线程图形用户界面。             开源龙芯智龙开发板用的是loongson 1C主控芯片,该芯片一共有12个串口,其中uart2是智龙的调试串口。 我大概将移植分为3个级别: CPU级、板级(BSP,board support package )、应用级(移植应用程序)。本次移植主要是uart2 配置成调试串口,通过串口进入RTT(RT-Thread)内部,属于BSP。BSP移植一般是找一个类似的开发板(同一款CPU更好)的代码,进行修改来达到移植的目的。龙芯的CPU是比较小众的,很少有系统愿意支持它。庆幸的是在此前,有人移植过loongson 1B的RTT,1B跟1C几乎一样,所以我们可以通过简单修改1B的RTT来在 1C上运行。            RTT原码的下载连接:https://github.com/RT-Thread/rt-threadstep1.配置RTT的shell。RTT的shell是finsh,这也是用户与系统的交互的工具。finsh是RTT的组件,需要在bsp/ls1bdev/rtconfig.h定义相应的宏才能在编译的时候将finsh加到系统包中。step2.认识RTT驱动架构.            简单说一下RTT驱动架构。一般系统的设备分为字符设备、网络设备等。串口设备属于字符设备。RTT提供IO管理层用来管理这些设备的初始化、读、写、开、关。            这些函数具体的内容需要自己实现,把地址赋给结构体rt_device中的函数指针。通过函数 rt_device_register()将设备驱动(结构体rt_device中的各个函数纳入驱动管理层)注册IO管理层,这样RTT通过查找设备名称(比如“uart2”)找到相应的rt_device结构体,并得到了操作设备所需要的具体函数(开关读写等)。step3.配置调试串口uart2.            串口配置主要是关于串口的几个寄存器的配置,包括波特率、RX中断、全局中断号。配置波特率和RX中断使能在bsp/ls1bdev/drivers/uart.c。函数rt_uart_init()初始化串口寄存器,此函数的地址将会赋给rt_device结构体中的init函数指针。            3.1在初始化工作开始之前,需要清除该设备的中断。            3.2设置线路控制寄存器,这个寄存器中bit7是用来控制是否设置波特率寄存器的。            3.3设置波特率寄存器,波特率寄存器。DEV_CLK= 252000000 (即252MHz,1C的主频), UART_BUADRATE = 115200(波特率115200Hz)。波特率寄存器有两个,MSB和LSB。为什么要两个寄存器,因为波特率配置数有时候很大,需要这两个寄存器(2个8bits)的存储。            3.4设置完波特率,需要回复线路控制寄存器LCR的bit7的赋值(0)。并且将LCR的末了的两位(bit1和bit0)设置为1,这是设置串口数据的帧格式,即1个开始位+8个数据位+1个停止位。帧格式如下:            3.5打开RX的中断使能。即设置IER寄存器。 step4.在RTT的BSP包中配置调试串口uart2.            在文件bsp/ls1bdev/drivers/board.c中修改。在关键的地方(红框)改成串口2 step5.在应用层初始化的过程中,初始化finsh,配置finsh的输入输出设备uart2。            在bsp/ls1bdev/applications/startup.c的rtthread_startup()函数中修改。            在libcpu/mips/loongson_1b/ls1b.h中修改uart2的irq(中断号)4 to 5。step6.编译RTT。            6.1打开装有ubuntu14.2的虚拟机,默认诸君已经下载龙芯的GCC包,并且如何用编译工具已经谙熟于胸。实在不了解,移步开源龙芯论坛: http://www.openloongson.org/foru ... d=67&extra=page%3D1            6.2下载RTT for smart loong原码包。百度云盘:http://pan.baidu.com/s/1gdq4QPl            6.3用firefox下载rtt2.zip,将其copy到”~/app”下。            $ cd ~/app            $ ls            $ unzip rtt2.zip             6.4 安装python和scons,这是因为RTT的编译依赖scons,类似makefile之类的。            $sudo apt-get install python            $sudo apt-get install scons            6.5修改编译器路径。在~/app/rtt2/bsp/ls1bdev/rtconfig.py中修改。 我的编译器路径: /opt/opt/gcc-4.3-ls232/bin。编译器命令是一堆bin文件。可以vi,或者直接点击文件,ubuntu会自动调用gedit打开。            6.5编译RTT。很快生成rtthread.elf,这就是我们要的RTT的包,可以直接在smart loong上直接运行。            $cd ~/app/rtt2/bsp/ls1bdev/            $sudo scons               

chinesebear 发表于 2015-6-27 23:30:07

本帖最后由 chinesebear 于 2015-7-12 14:02 编辑

step7.在smart loong上运行RTT系统。            step7.1安装tftp服务器。百度云盘:http://pan.baidu.com/s/1eQvqBkQ。下载到windows下,随便建一个文件夹,把解压tfp32.zip,将tftpd32.exe和rtthread.elf放在同一个文件夹。
            step7.2在龙芯的pmon中修改autoload的文件。打开tftpd32.exe。                            可以看出我的tftp服务器的地址是192.168.3.10。                            进入pmon。加电后狂按空格键。                            PMON> set al tftp://192.168.3.10/rtthread.elf                            PMON> reboot             step7.3运行RTT。            step7.4按tab键。可以echo出几个RTT内置的系统命令。关于finsh的命令可以认为的添加,当然函数需要自己实现。            step7.5执行hello()命令。echo:Hello RT-Thread!step8.谈谈关于RTT的感受。            优点:硬实时,免费开源,支持平台多(龙芯这么小众都支持),模块化,高度可裁剪,图形界面,shell,社区活跃。            缺点:finsh不够power。
最近编译的RT-Thread的ELF文件,大小358KB:

shigeng 发表于 2015-6-28 11:40:34

厉害!!!!

sn2015ol 发表于 2015-6-28 14:10:07

很好!

ratking 发表于 2015-6-28 23:51:04

顶起^^^^

简单平安 发表于 2015-7-2 11:11:00

赞!

简单平安 发表于 2015-7-2 11:16:13

网卡移植好没有?

chinesebear 发表于 2015-7-2 12:28:36

本帖最后由 chinesebear 于 2015-7-2 12:30 编辑

简单平安 发表于 2015-7-2 11:16
网卡移植好没有?
没有。驱动移植安排是这样的:i2c>spi>pwm>networks,龙芯网卡据说稍微难搞。有兴趣的话,大家可以一起研究一下,我平时的时间也很有限。

简单平安 发表于 2015-7-2 17:35:59

哦,不急。我的水平只能围观,呵呵!
页: [1]
查看完整版本: 关于在smart_loong(LS1C)开发板RT-Thread的移植