uClinux全称Micro-Control-Linux的缩写,可理解为"微控制Linux系统",它专为应用于没有MMU(内存管理单元)的微处理器,并专为嵌入式系统作了许多小型化的工作.uCLinux沿袭了LinuxOS的主要特征,包括稳定强大的网络和文件系统支持,uClinux剪切了大量的Linux内核以缩小尺寸,一班内核大小在500KB左右,即使加上一些其他应用也就在900KB左右,非常适合嵌入式系统.以下介绍他和一般Linux的区别:
(1)内存管理
uClinux同标准linux的区别在于,前者没有MMU单元,所以在管理内存方面可以说uClinux给了程序员更大的权限,这自然也导致了系统的安全性下降,但是MMU一般需要硬件上的支持,而许多嵌入式控制器并没有MMU的硬件,所以没有MMU并不会影响许多嵌入式系统选uClinuxOS.
uCLinux是直接对内存进行访问的,采用的是实存储器管理策略进行存储器的分页管理,所有程序对内存的访问都是采用的物理地址,OS对于内存空间没有保护,各个进程对于内存的访问是直接的,各个进程共享一个运行空间.有别于linux的虚拟内存管理技术,uClinux的内存管理技术是一种倒退.
(2)uClinux的文件管理
uClinux系统采用的是romfs文件系统,这种文件相对于一般的ext2文件系统需要更少的空间.这主要来自于两个方面:首先内核支持romfs的文件系统比ext2的文件系统要小.另一方面romfs文件系统相对简单,在建立文件系统的超级块时需要更少的存储空间.但是romfs文件系统不支持动态擦写保存,对系统需要动态保存的数据采用虚拟RAM盘的方法进行处理.
(3)uClinux应用程序库
uClinux重写了应用程序库,对于标准linux日益增大的glibc库进行了相应的剪裁,除去了大部分不合适嵌入式的代码,还对于应用程序的入口,系统调用的API和输入/数出等进行了修改,而且增加了对于平面存储器结构的支持,形成了自己的适用于嵌入式设备的应用程序库uClibc.值得一提的是,uClinux对于程序库采用的是静态链接的形式,这是由uClinux的内存管理形式决定的.
(4)可执行文件格式
Linux采用的通用文件格式是elf,它支持动态链接,但是文件比较大,而uCLinux系统采用的是flat可执行文件格式,对于文件头和一些信息进行了简化,缩小了可执行文件的体积.另外,可以使用elf2flt工具把elf格式的可执行文件转化为flat文件.
(5)uClinux进程管理
平面存储器模型是uClinux最显著的标志,由于没有虚拟存储器可以提供非常有效的fork调用,这会对它的多个进程造成一定的影响.然而uClinux提供一个系统调用vfork,vfork假定系统在调用完成vfork后,要么子进程代替父进程直到子进程调用exit退出,要么调用exec执行一个新的进程,这个时候将产生可执行文件的加载,即使这个进程只是父进程的的拷贝,这个过程也不能避免.
当子进程执行exit或exec后,子进程使用wakeup唤醒父进程,使父进程继续执行下去.起动新的进程时,OS必须为应用程序分配存储空间,并立即把应用程序加载到内存.缺少了MMU的内存重映射机制,uClinux必须在可执行文件加载阶段对可执行文件进行reloc处理,使得程序执行时能够直接使用物理内存.