近日,首个基于国产龙芯的开源硬件智龙主板已经完成了首发版的发货,有用户已经将一款国人的 开源实时操作系统RT-Thread RTOS成功移植到基于龙芯1C 的智龙主板上。同时智龙主板V2.0板增加了新功能,正在众筹中。 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-thread step1.配置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 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。 据介绍,“智龙”主板是首个龙芯用户社区-龙芯俱乐部和龙芯发起的一款以完全开源方式推广的龙芯嵌入式主板,采用了国产龙芯1C处理器,在较小尺寸的电路板上集成了龙芯1C SOC ,网口、USB口、电源,SD卡插槽和RTC时钟等主要部件,可以运行嵌入式 Linux、RT-Thread等操作系统。也是目前最便宜的龙芯嵌入式学习主板。目前“智龙”主板首版已经销售一空,龙芯俱乐部已经启动了第二版智龙主板的众筹,价格还是199元。众筹网址www.loongsonclub.com/gw。据悉智龙V2.0与V1.0相比有部分的改进,如增加了自定义按钮和自定义LED灯,排母间距增加,增加复位键等等,会更稳定和方便使用。 智龙主板V2.0 PCB设计图
|
Archiver|手机版|小黑屋|龙芯俱乐部 龙芯爱好者社区
GMT+8, 2024-12-15 05:56 , Processed in 0.085696 second(s), 19 queries .
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.