嵌入式系统课外调研
一、uClinu
https://blog.csdn.net/whatday/article/details/87003713
1. 名字含义
uClinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思, 所以uClinux就是Micro-Control-Linux,字面上的理解就是"针对微控制领域而设计的Linux系统"。
2. 与linux区别?
- 没有虚存管理
- 不能运行时增加进程栈
- 不支持分页
- 可执行程序不是elf, 而是flat
- 不能用fork, 而是用vfork
- RAMDISK
uClinux是针对控制领域的嵌入式linux操作系统,它从Linux 2.0/2.4内核派生而来,沿袭了主流Linux的绝大部分特性。适合不具备内存管理单元(MMU)的微处理器/微控制器。没有MMU支持是 uClinux与主流Linux的基本差异。
二、Windows CE
1. 名字含义
Windows Embedded Compact(即 Windows CE)是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统。(在2008年4月15日举行的嵌入式系统大会上,微软宣布将Windows CE更名为Windows Embedded Compact,与Windows Embedded Enterprise、Windows Embedded Standard和Windows Embedded POSReady组成Windows Embedded系列产品。)
Windows CE 是有优先级的多任务操作系统,它允许多重功能、进程,在相同时间系统中运行 Windows CE 支持最大的 32 位同步进程。一个进程包括一个或多个线程,每个线程代表进程的一个独立部分,一个线程被指定为进程的基本线程,进程也能创造一个未定数目的额外线程,额外线程实际数目,仅由可利用的系统资源限定。
2. 与Linux的区别
本段将会从商业模式,学习和开发难度,对硬件的支持,稳定性,对工程师未来发展的帮助,对研发中心未来发展的帮助来探讨。
嵌入式Linux OS与Windows CE相比的优点
- Linux是开放源代码,遍布全球的众多Linux爱好者都是Linux开发者的强大技术支持者;Windows CE 6.0内核全部开放,GUI不开放。
- Linux的内核小、效率高;Windows CE与之相比,占用过多的RAM。
- Linux是开放源代码的OS,在价格上极具竞争力,适合中国国情。Windows CE需要版权费用。
- Linux不仅支持x86芯片,还是一个跨平台的系统。更换CPU时就不会遇到更换平台的困扰。
- Linux内核的结构在网络方面是非常完整的,它提供了对包括十兆位、百兆位及千兆位的以太网络,还有无线网络、Token ring(令牌环)和光纤甚至卫星的支持,Windows CE的网络功能也比较强大。
嵌入式Linux OS与Windows CE相比的弱点
- LINUX开发难度较高,需要很高的技术实力,WINCE开发相对较容易,开发周期短,内核完善,主要是应用层开发。
- LINUX核心调试工具不全,调试不太方便,尚没有很好的用户图形界面,WINCE的GUI丰富,开发工具强大;
- LINUX系统维护难度大。Linux在使用较完整的GUI时一般会占用较大的内存,可以去掉部分无用的功能来减小使用的内存,但是如果不仔细,将引起新的问题。
三. Windows Mobile
Windows Mobile(简称:WM)是微软针对移动设备而开发的操作系统。该操作系统的设计初衷是尽量接近于桌面版本的Windows,微软按照电脑操作系统的模式来设计WM,以便能使得WM与电脑操作系统一模一样。WM的应用软件以Microsoft Win32 API为基础。新继任者[Windows Phone](https://baike.baidu.com/item/Windows Phone)操作系统出现后,Windows Mobile系列正式退出手机系统市场。2010年10月,微软宣布终止对WM的所有技术支持。
四. Android
1. 名字含义
安卓(Android)是一种基于Linux的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。Android操作系统最初由[Andy Rubin](https://baike.baidu.com/item/Andy Rubin)开发,主要支持手机。
2. 系统内核
Android 是运行于Linux kernel之上,但并不是GNU/Linux。因为在一般GNU/Linux 里支持的功能,Android 大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以Bionic 取代Glibc、以Skia 取代Cairo、再以opencore取代FFmpeg等等。Android 为了达到商业应用,必须移除被GNU GPL授权证所约束的部份,例如Android将驱动程序移到 Userspace,使得Linux driver 与 Linux kernel彻底分开。Bionic/Libc/Kernel/ 并非标准的Kernel header files。Android 的 Kernel header 是利用工具由 Linux Kernel header 所产生的,这样做是为了保留常数、数据结构与宏。
Android 的 Linux kernel控制包括安全(Security),存储器管理(Memory Management),程序管理(Process Management),网络堆栈(Network Stack),驱动程序模型(Driver Model)等。下载Android源码之前,先要安装其构建工具 Repo来初始化源码。Repo 是 Android 用来辅助Git工作的一个工具。
3. 后缀简介
APK是安卓应用的后缀,是AndroidPackage的缩写,即Android安装包(apk)。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。apk文件和sis一样,把android sdk编译的工程打包成一个安装程序文件,格式为apk。 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。
APK文件结构:
-
META-INF\ (注:Jar文件中常可以看到);
-
res\ (注:存放资源文件的目录) ;
-
AndroidManifest.xml (注:程序全局配置文件) ;
-
classes.dex (注:Dalvik字节码);
-
resources.arsc (注:编译后的二进制资源文件)。
总结下我们发现Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接执行安装,和Windows Mobile中的PE文件有区别,这样做对于程序的保密性和可靠性不是很高,通过dexdump命令可以反编译,但这样做符合发展规律,微软的 Windows Gadgets或者说WPF也采用了这种构架方式。