[请教]QNX对MIPS处理器的支持

大家好!我是QNX操作系统的初学者,目前正在进行基于QNX的嵌入式操作系统移植。在阅读资料的时候产生一些疑问,特向大家请教:
1.QNX支持一些MIPS的处理器,这种支持是体现在对指令集的支持吗?如果是的话,它都支持哪些MIPS的指令集呢?如果不是,那这种支持具体是怎么一个情况2.如果我所采用的处理器不是标准的MIPS处理器,只是支持MIPS指令集。那么针对这一情况,我是不是还可以在一些MIPS的BSP包基础上修改?与普通的修改相比,不知有没有需要特别注意的地方?

麻烦各位大侠赐教!谢谢!!

难道是龙芯?:slight_smile:

对 MIPS 的支持主要体现在指令集(当然就包括了基本cpu体系结构,比如通用寄存器个数、专有寄存器什么的)具体是那种指令集标准我也不清楚,不过qnx的传统是尽量取最小子集,你的cpu直接能跑也说不定。试试就知道了。

如果不行,那就要重新编译内核了,内核的源码是网上公开的,你应该有针对你自己cpu的编译器吧。

被猜到了。没错,是的。。
我还以为没人解答了呢,谢谢xtang先生!

根据所附资料介绍,龙芯支持的指令集是MIPS32定点指令集。且它自带了一个PMON,作为bootloader和测试驱动程序用。pmon已经可以运行,自带的Linux系统可以启动。后来看了网上的一些资料,于是就很简单的把另一个处理器的BSP编译拷进去测试了(仅修改了Buildfile里[image=××××]那一句),PMON似乎能找到镜像,但还没任何显示就又重启了。

现在系统移植上有两种不同的意见:

1.通过修改相近的BSP包实现移植。这个方法好处是有现成的代码可以参考,且QNX也提供了标准的框架;缺点是BSP里包含了太多的代码,本来就不熟悉,改起来有点无从下手。我看到一些修改的案例,基本都是同一款处理器但不同型号的,一般修改时钟频率、设备地址就好。貌似我们这个改起来有点太特殊了。

2.考虑到针对CPU的编译器是有的,可以修改内核,然后通过PMON引导内核启动。不知道这样的思路对不对?感觉工作量比1大得多。。

另外,xtang先生,请问QNX的BSP跟Linux的BSP概念是不是不一样?QNX的微内核是否就是procnto?

哇,还真的是啊。这个要支持。:slight_smile:

记得以前写过一些,找不到了,先大致再写些吧。

QNX的启动基本上经过三个阶段,第一个是IPL (Initial Program Loader);这个是通电后执行的第一个程序。功用上相当于你的PMON。如果你有PMON的话,IPL可以略过。

第二个叫 startup,这个是为Kernel提供关于板子的具体信息的;比如内存大小,中断控制等等。

第三步才是Kernel启动,kernel启动完全结束后,才会执行Build Script里的那个启动script.

如果我是你的话,还是应该先找一个相近的BSP来试试。这一步最后实在不行的话,再考虑重新编译Kernel.

QNX的BSP里虽然东西很多,跟你有关的应该就是startup那部份代码,如果Kernel跪起来了,别的驱动什么的都是后面的事情。这也算是微内核的好处吧。

startup里比较重要的一个是时钟中断,一个是串口轮询输出(debug console),再一个就是中断调用(interrupt callout)了。通常会出问题的是Interrupt Callout,这个没搞对,内核启动后就很容易reset了。

希望这些对你有帮助。

cstart.S是startup的入口,从那里下手一步一步摸,看能走到哪里,如果有LED或串口输出的话要方便许多.估计QNX不认识龙芯的ID,所以要自己写,startup/lib/mips下有许多mipsv_xx的文件就是干这个的.

谢谢楼上两位的答复!

我们现在已经开始着手分析和修改了。

以后可能还有很多问题,希望大家多多指教! :slight_smile: