平台之上还是平台之下?QNX学习的分水岭。

学习QNX有一段时间了,应该回过头总结一下学习过程,理一理思路,为下一步学习理清方向,同时也可以给各位共同学习的朋友(我心中“同学”的概念)提供参考。

 

看一看自己的文章和目前学习的内容,发现QNX学习涉及了两个大的方面,一方面是QNX平台的使用以及QNX平台上的开发工作,另一方面是QNX平台本身的开发以及底层的软硬件原理。对于一个学习者来说,这两方面其实可以比较独立的。这也就是为什么我在标题中将它说成是“分水岭”的原因,学习者完全可以根据自己的技术积累,兴趣,工作性质选择其中一方面着重进行学习。

 

先看看QNX平台的使用和QNX平台上的开发工作,也就是平台之上。因为QNX为不同的CPU(X86,ARM,。。),不同的开发板(如我使用的BeagleBoard)提供了对应的BSP(board support package ),向上提供了统一的API以及使用界面(Shell 或者是Photon),所以QNX的使用者和开发者都不需要详细了解底层的信息。也就是说QNX平台屏蔽了不同硬件平台的差异,向上提供了统一的编程接口和使用界面。如果我们是为QNX系统开发应用的开发人员,我们不需要去了解硬件平台上是使用了X86的CPU还是ARM的CPU,我们只需要掌握c\C++,掌握QNX的API就好了。

以我个人的认识,实际上QNX系统不会有太多直接的使用者,大多数QNX用户都是通过QNX上层开发人员开发的界面操作QNX的,对他们来讲QNX可能就是车载系统的显示屏和几个按钮而已,甚至他们根本没听说过QNX。所以这里只讨论QNX上层开发人员需要学习的内容。

首先,如果你只是在QNX平台上开发应用,你不需要一个开发板,QNX Momentics和QNX 虚拟机已经足够了。

QNX上层开发人员需要做的是安装QNX Momentics和QNX 虚拟机,抱着QNX官网上的文档好好学习(天天向上)。至于学习的范围,《System Architecture》之类的需要先读一读,但不需要深入,主要学习的是《Getting Started with QNX Neutrino》和《QNX Programmer’s Guide》这两本,再备上《QNX Library Reference》就差不多了。学习一段时间,掌握了QNX基本编程技巧后,根据自己的情况选择Advanced Graphics图形编程,Photon编程等。再后面可能就需要进一步考虑各种算法,更上层的接口封装等等问题了。到那时你应该算是个高级工人了吧。

不过,话说回来,QNX平台上层开发者的身份并不会限制你学习QNX平台下的底层知识。只要你有足够的时间和精力,尽管去学习吧,对底层了解的更多就更容易掌握上层工具。

 

说到底层,就看看QNX平台平台之下的学习内容。因为QNX需要为不同的硬件平台提供支持,所以它提供了不同硬件平台对应的BSP。但是,打包好的BSP并不是万能的,很多情况下都需要对BSP进行调整,可能是增加某种输入设备的支持,或者是减少某个系统模块。令人开心的是QNX是开源的,就是说大家可以看到BSP里的源代码,然后对其进行修改(有关商业许可?那是你公司老板要考虑的问题吧,工程师不考虑它)。从中可以看到,需要钻到QNX系统底层的,是嵌入式系统开发人员。

如果你是一个嵌入式开发人员,或者你希望成为一个嵌入式开发人员,或者你只是简单地对ARM CPU感兴趣,QNX系统可以作为一个不错的学习方向。而学习QNX底层的时候必需要有一个开发板(如果是针对ARM当然就必需是ARM开发板)。对于开发板得选择我自己是觉得BeagleBoard不错,至少可以有我的博客作参考,:-)。有些网友说BeagleBoard太贵了,那可以考虑只买BeagleBoard板,不买开发板。如果只买BeagleBoard板都觉得贵了,就选择其它的一些便宜的开发板,不过有可能没有合适的QNX BSP。当然,没有人规定学嵌入式开发就必需学习QNX,按着开发板的相关资料开始学习就是了。那些就和QNX没有关系了,在这里不作讨论。

拿上开发板,在PC上安装QNX Momentics,将开发板环境设置好,开始你的学习。同样,QNX官方文档很需要,还是先看《System Architecture》,再看《Building Embedded Systems》。看完自己编译一个系统出来,测试运行成功后开始对系统进行裁剪,做到比较随意地建构QNX系统。

进一步是各种各种硬件驱动,这个时候就需要对底层有更深的了解,需要学习各种CPU架构,汇编,不同硬件的文档等等。我个人不是做嵌入式系统出身的,这些知识也在学习中,无法给出更远,更清晰的描述了。后面学习有进一步体会再和各位分享。

 

也就是说,根据我目前的学习体会,在QNX学习过程中涉及到的面比较广,上层到下层都有,可以根据自己的情况选一个着重方向。

 

 

 

 

你可能感兴趣的:(编程,嵌入式,文档,平台,reference,硬件驱动)