2.4.1.3. 嵌入式相对通用的知识:嵌入式操作系统

相对通用的操作系统:嵌入式Linux,ucOS/II,VxWorks等等

2.4.1.3.1. 嵌入式常用操作系统:嵌入式Linux

此处的嵌入式Linux,是有别于普通桌面电脑所使用的普通桌面Linux系统。

2.4.1.3.2. 嵌入式常用操作系统:μC/OS-II

2.4.1.3.3. 嵌入式常用操作系统:ThreadX

2.4.1.3.4. 嵌入式常用操作系统:VxWorks

TODO:http://www.windriver.com/evaluations/gpp-ve/可以下载试用包,有空去试试。

2.4.1.3.5. 嵌入式常用操作系统:WinCE

2.4.1.3.6. Android不是传统意义上的嵌入式操作系统

此处需要专门解释一下,被很多人归类为嵌入式操作系统的Android,实际上不是传统意义上的嵌入式操作系统。

2.4.1.3.6.1. Android和嵌入式Linux的区别

典型的Android系统中,根据开发所用语言不同和开发环境不同,可以划分为:

  • 上层应用:用java语言在Eclipse+ADT或者Android Studio的IDE中开发Android的app应用程序
  • 嵌入式底层:用C,C++等语言实现底层的,以Linux为基础的,在Android框架下的,设备的驱动相关的开发,其中更多的是涉及到Linux驱动开发,Java的JNI,Android的驱动框架模型等等内容。

此时,对于传统意义上的,嵌入式软件开发,尤其是嵌入式Linux驱动开发,基本上是和,上述的Android开发中的,嵌入式底层开发中的Linux驱动开发,是基本上一样的。

而Android系统中的其他内容,包括嵌入式底层的Java的JNI,Android驱动模型,以及上层应用的Java的Android的app开发,都是和传统的Linux的驱动开发,没什么关系,也是差别很大的,包括所使用的语言,以及所使用的开发环境。

即,Android的开发,基本上都是基于app那层去开发app的,都是用Java语言去写代码的。且底层有Android的运行时作为支持

而Linux的开发,对于Linux驱动开发,都是基于底层的内核去开发的,用的都是C语言,甚至偶尔还会涉及到汇编代码;对于Linux的应用层面的开发,都是Application Framework级别的,应用程序的开发,往往都是去写C语言代码的。

对应的传统Linux嵌入式驱动开发,以及Android中的app开发,以及Android中的驱动移植,所处于不同层次的关系,可以用下图表示:

图 2.2. 传统Linux和Android的不同的开发所处层次关系对比图

传统Linux和Android的不同的开发所处层次关系对比图


而对于Android的中间的Libraris,Android Runtime,以及Application Framework,很多时候,是各种(C,C++,Java等)不同的语言的混合体,包括中间的Android Runtime是利用到了Java的JNI,为Java和C或C++语言之间,提供一个接口,可以互相通讯。

而对于Android这套框架来说:

  • 如果是你做Application,即做Android的应用,现在流行称其为app,的话

    则是去开发上层的应用->比如基于Android做一个收音机,做一个音乐播放器等等的应用

    ->都是在Android的框架之下(用Android相关的工具,比如Eclipse+ADT) 去写Java代码去实现对应的功能

  • 如果你是做Android底层嵌入式开发的话

    ->那就是在Linux内核框架下,去实现各种功能和模块

    ->典型的工作要属,你是一个做硬件的公司,做了块开发板,为了使得其支持Android系统,需要在开发板这个硬件的基础上,去为开发板中的各个硬件模块,比如Nand Flash存储芯片,SD卡芯片,网卡芯片等等,去写对应的模块的驱动

    ->此时主要就是在Linux框架下写C(或C++)代码去实现模块驱动

    ->当然有时候为了支持Android,还需要了解Android本身的框架,可能还需要加上一些JNI的代码支持