经过不短的时间,断断续续的工作,在一些网友的帮助下,终于将QNX 6.3移植到ATEML的嵌入式处理器AT91RM9200上。
现在将QNX的微内核,时钟、中断、串口等程序跑了起来,通过超级终端可以进行QNX的一些命令操作了。
Welcome to Neutrino on the ATMEL AT91RM9200 (ARM 920 core) Board. BSP port by ln 2007.9.15
# pidin
pid tid name prio STATE Blocked
1 1 proc/boot/procnto 0f READY
1 2 proc/boot/procnto 255r RECEIVE 1
1 3 proc/boot/procnto 255r RECEIVE 1
1 4 proc/boot/procnto 10r RUNNING
1 5 proc/boot/procnto 10r RECEIVE 1
1 6 proc/boot/procnto 10r RECEIVE 1
1 7 proc/boot/procnto 10r RECEIVE 1
2 1 /boot/devc-ser9200 10r RECEIVE 1
3 1 proc/boot/slogger 10r RECEIVE 1
4 2 proc/boot/pipe 10r RECEIVE 1
4 3 proc/boot/pipe 10r RECEIVE 1
5 1 bin/sh 10r SIGSUSPEND
6 1 proc/boot/pidin 10r REPLY 1
# pidin info
CPU:ARM Release:6.3.0 FreeMem:28Mb/31Mb BootTime:May 10 16:20:16 UTC 2007
Processor1: 1091736064 arm920 180MHz
# ls /proc/boot
.script libc.so procnto sloginfo
cat libc.so.2 shutdown umount
cp ls sin uname
devc-ser9200 mount slay
echo pidin sleep
ksh pipe slogger
#
目前,还没有实现FLASH文件系统和网络。有时间再做吧。
现在将操作系统内核及库和一些应用程序做成一个映像,解压后大小大约1.2兆。bootloader是移植的uMon,用uMon将压缩的映像解压到内存,然后在内存中运行QNX系统。
另外值得一提的是QNX在9月12日开放了源代码,也开放了一些BSP,再搞QNX开发容易多了。呵呵
完成了QNX下9200的网络和FLASH文件系统 作者 nl1031 日期 2007-9-28 9:14:00
QNX6.32下的FLASH(NOR)文件系统的驱动移植比较简单,增加了28F640J3的器件ID就行。
8M Bytes的FLASH存储器,前2M划分给了bootloader(uMon)和保存QNX内核映像。后6M划分给了QNX系统。
建立了文件系统后,将一些共享库和工具文件拷贝到文件系统中,这样可以减少QNX内核映像的尺寸。
目前的内核映像大约500多KB。
在调试网络驱动时,利用zmodem协议通过串口,将网络驱动拷贝到目标板上,再运行调试。可以利用gdb进行驱动调试。在目标板上运行pdebug代理程序,通过串口进行连接,然后在主机上运行ntoarm-gdb进行调试。
AT91RM9200的网络性能不是很强,EMAC的DMA操作会挤占CPU的总线时间,或许用一个外部的网络控制芯片效果会更好。
试验了QNET和TCPIP,可以通过QNET与QNX主机之间直接通讯,如文件拷贝、进程控制等等。
改进了AT91RM9200的QNX网络驱动性能 作者 nl1031 日期 2007-9-28 16:01:00
将AT91RM9200的EMAC接收描述数组改到内部16KB SRAM后,网络性能明显提高。
在QNX主机上用ping -f -i0.001 192.168.0.99 命令运行了10分钟,没有丢包现象。在ethereal网络监视软件的状态统计中,可以看到网络的平均速度大约为: Avg.1.56Mbit/sec。
这样,基本可以应该用在工程中了。
可惜内部SRAM只有16K,只能开10个帧接受缓冲区,如果有160K就好了。呵呵