本帖最后由 chinesebear 于 2015-9-14 20:58 编辑
龙芯智龙开发板教程rtt for smart loong:链接
关于在smart_loong(LS1C)开发板RT-Thread的移植 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上运行。 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.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
|