uCLinux是一种优异的嵌入式Linux版别,是micro-Controller-Linux的缩写。它秉承了规范Linux的优异特性, 经过各方面的小型化改造,形成了一个高度优化的、代码紧凑的嵌入式Linux。尽管它的体积很小,却依然保留了Linux的大多数的长处:安稳、杰出的移植性、优异的网络功用、对各种文件体系齐备的支撑和规范丰厚的API。它专为嵌入式体系做了许多小型化的作业,现在已支撑多款CPU。 其编译后方针文件可控制在几百KB数量级,并现已被成功地移植到许多渠道上。
uClinux从Linux 2.0/2.4内核派生而来[1] ,沿用了Linux的绝大部分特性。它是专门针对没有MMU(内存办理单元)的CPU,并且为嵌入式体系做了许多小型化的作业。它一般用于具有很少内存或Flash的嵌入式操作体系。在GNU通用许可证的确保下,运转uClinux操作体系的用户能够运用简直一切的Linux API函数。因为经过了裁剪和优化,它形成了一个高度优化,代码紧凑的嵌入式Linux。它具有体积小、安稳、杰出的移植性、优异的网络功用、齐备的对各种文件体系的支撑,以及丰厚的API函数等长处。uClinux与Linux在兼容性方面表现出色,uClinux除了不能实现fork()外,其他uClinux的API函数与规范Linux完全相同。
特色
规范Linux或许选用的小型化办法
1. 从头编译内核
Linux内核选用模块化的规划,即许多功用块能够独立的加上或卸下,开发人员在规划内核时把这些内核模块作为可选的选项,能够在编译体系内核时指定。因而一种较通用的做法是对Linux内核从头编译,在编译时细心的挑选嵌入式设备所需求的功用支撑模块,一起删去不需求的功用。经过对内核的从头装备,能够使体系运转所需求的内核明显减小,然后减缩资源运用量。
2. 制造root文件体系映象
Linux体系在发动时有必要加载根(root)文件体系,因而取舍体系一起包含root file system的取舍。在x86体系下,Linux能够在Dos下,运用Loadlin文件加载发动,
uClinux选用的小型化办法
1.uClinux的内核加载办法
uClinux的内核有两种可选的运转办法:能够在flash上直接运转,也能够加载到内存中运转。这种做法能够削减内存需求。
Flash运转办法:把内核的可履行映象烧写到flash上,体系发动时从flash的某个地址开端逐句履行。这种办法实际上是许多嵌入式体系选用的办法。
内核加载办法:把内核的压缩文件存放在flash上,体系发动时读取压缩文件在内存里解压,然后开端履行,这种办法相对杂乱一些,可是运转速度或许更快(ram的存取速率要比flash高)。一起这也是规范Linux体系选用的发动办法。
2.uClinux的根(root)文件体系
uClinux体系选用romfs文件体系,这种文件体系相关于一般的ext2文件体系要求更少的空间。空间的节省来自于两个方面,首要内核支撑romfs文件体系比支撑ext2文件体系需求更少的代码,其次romfs文件体系相对简略,在树立文件体系超级块(superblock)需求更少的存储空间。Romfs文件体系不支撑动态擦写保存,关于体系需求动态保存的数据选用虚拟ram盘的办法进行处理(ram盘将选用ext2文件体系)。
3.uClinux的使用程序库
uClinux小型化的另一个做法是重写了使用程序库,相关于越来越大且越来越全的glibc库,uClibc对libc做了精简。uClinux对用户程序选用静态衔接的方式,这种做法会使使用程序变大,可是根据内存办理的问题,不得不这样做(这将在下文对uClinux内存办理打开剖析时进行阐明),一起这种做法也更接近于一般嵌入式体系的做法。
缺陷
正如我国古语云“人无完人”,uClinux也有一些缺少之处:
文档的缺少
与Linux及其他自由软件相似,uClinux的文档非常缺少:缺少安排和共同的文档、抢手技能和分类文档很多而乱七八糟、非热门部分文档缺失乃至没有文档。关于开发人员而言,往往要深化程序的源代码找寻有用的材料。
Bug问题
uClinux与硬件渠道直接相关。关于有商业公司资助的硬件渠道,其相关代码和Bug更新较快,编译和履行都非常顺畅;但关于非商业支撑的硬件渠道,其内核和使用程序代码都得不到及时更新和排错。这种现象在内核源代码树还不是非常遍及,但在uClinux自带的使用程序库中却常常产生编译过错,往往是增加了一个使用程序或改变了运转库便导致无法编译。这就需求开发者投入满足的时刻和精力进行排错和修正,也会导致开发进度的延误。
与Linux相同,uClinux自身并不支撑实时性使用,但经过实时性的修正(RTLinux或RTAI)能够供给根据内核空间和用户空间的硬实时和软实时的体系调用。
嵌入式操作体系uCfinux的使用开发
下面经过本体系的一个详细实例来描绘如何将使用程序增加~UuClinux,首要的规范办法有如下几点:
(1)编写自己的源程序代码和相应Makefile文件。uClinux/Linux的使用程序一般放在OS—HOME/user目录下,咱们在该目录下创立一个XDQ目录.且在该目录下创立源文件xdq.c及它相应的Makefile文件。
(2)修正uClinux—Samsung/config/config.ink件。在该文件适宜的方位增加如下内容:
mainmenu_ opTIon next comment
comment ‘xdq’
bool ‘xdq’ CONFIG_ USER_ XDQ_XDQ
endmenu
意图是在Make menuconfig时,uCLinux就会提示你是否需求编译这个新的使用程序。
(3)修正uClinux—Samsung/user/Makefile 件。在该文件适宜的方位增加下面一句:
dir-$(CONFIG_USER—XDQ—XDQ)+=xdq
加上这句后,假如你在Make menuconfig时挑选了这个新使用程序。则编译时就会编译这个新的使用程序。
把修正作业完成后要进行内核的编译作业,依照曾经编译uClinux内核的进程进行就能够了。
值得注意的一点是在第一步make menuconfig进行内核装备的时分.在Target Platform SelecTIon,要选中Customize Vendor/User SetTIngs fNEW),选中了该选项后,与开始咱们装备内核进程不同的是.它还会在make menuconfig的最终呈现一个对话框,在此进行用户使用程序的装备,在对话框里呈现的文字是在config.in文件中增加的文字,选中要编译的使用程序地点途径,就会呈现另一个对话框,选中要编译的文件名,保存好内核装备后退出。用这种办法生成的可履行文件在romfs/bin目录下。