原创 深入剖析uClinux

2006-12-28 16:44 4216 10 11 分类: MCU/ 嵌入式
 苹果的iPod是一款时尚的MP3播放器,采用苹果公司的专用MP3播放软件,是市场上销量最好的MP3之一。最近狂热的Linux爱好者对其进行了改造,在不改动硬件的环境下移植了内核版本为2.4.24uClinux(基于ARM 32位处理器内核ARM 7TDMI),并使其具备了FramBuffer、硬盘支持、远程控制等功能,使一台MP3变成了一台PDA。该项目一直处于活跃阶段,许多新的功能正在添加之中。  
    
2显示了在Cisco 3000上路由器运行uClinux的图片。事实上,在基于MIPS处理器的Cisco 2500/3000/4000系列路由器上,uClinux都得到了移植,并能够出色稳定地工作。 

    
以上两个例子显示了作为一个开放源代码的操作系统,uClinux有着优良的可移植性和广泛的兼容性,其应用遍及DVD播放器、PDA、路由器、防火墙、机顶盒、工业控制设备、VOIP设备、数码摄像头、智能家具设备等。  

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

运行uClinux的苹果iPod-MP3播放器 
 

运行uClinuxCisco 3000路由器
    
针对没有MMUCPU 
    
全球每年生产的CPU的数量大概在二十亿颗左右,其中大部分是应用于专用性很强的各类嵌入式系统。大部分嵌入式系统为了减少系统复杂程度、降低硬件及开发成本和运行功耗,在硬件设计中取消了内存管理单元(MMU)模块。最初,运行于这类没有MMUCPU之上的都是一些很简单的单任务操作系统,或者更简单的控制程序,甚至根本就没有操作系统而直接运行应用程序。在这种情况下,系统无法运行复杂的应用程序,或者效率很低,并且所有的应用程序需要重新开发,还要求开发人员十分了解硬件特性。这些都阻碍了不含MMU的嵌入式产品开发的速度和应用水平。 

    uClinux
专门针对没有MMUCPU,并且为嵌入式系统做了许多小型化的工作。uClinux是一个完全符合GNU/GPL公约的项目,完全开放代码。 

    
最初的uClinux仅仅支持Palm硬件系统,基于Linux 2.0内核。随着系统的日益改进,支持的内核版本从2.02.22.4一直到现在最新的2.6。系统的开发人员从两人增加到了目前的12人,支持的硬件系统也从一种增加到了目前的十余种(支持的硬件平台如Motorola公司的M68328M68EN322MC68360DragonBall系列如68EZ32868VZ328ColdFire系列的如52725307ARM 7TDMIMC68EN302ETRAXIntel i960PRISMAAtari 68k等等。) 

    
根据Linuxdevices.com网站20043月的调查,uClinux在全球嵌入式Linux市场所占的份额已位居第二,仅仅落后于定制Linux(即自己下载源码进行修改定制)。同时Linux在全球嵌入式操作系统的市场份额依然处于统治地位(40%以上),领先第二名微软公司的嵌入式操作系统三倍以上(市场份额约13%) 
    uClinux
系统特点 
    1. 
嵌入式操作系统比较 
    
由表1可以看出,对于嵌入式应用,高端平台可直接采用Linux系统,其兼容性和可移植度都较高,但对硬件处理速度和存储空间要求较高。 
    
低端平台的最佳选择是uClinux,其性能稳定、移植性好、功能强大。 
    
低端平台如果对实时性要求较高、应用相对简单,则可采用uc/os或其他操作系统。 

    2.
基本架构
    
由图3可以看出,uClinux的系统与标准Linux的架构完全一致。 




3 uClinux系统架构
    3. 
内存管理
    uClinux
是专门针对没有MMU的处理器而设计的,即uClinux无法使用处理器的虚拟内存管理技术。实际上uClinux采用实存储器管理策略,通过地址总线对物理内存进行直接访问。所有程序中访问的地址都是实际的物理地址,所有的进程都在一个运行空间中运行(包括内核进程),这样的运行机制给程序员带来了不小的挑战,在操作系统不提供保护的情况下必需小心设计程序和数据空间,以免引起应用程序进程甚至是内核的崩溃。 

    uClinux
仍然采用存储器的分页管理,系统在启动时把实际存储器进行分页,在加载应用程序时程序分页加载。一个进程在执行前,系统必须为进程分配足够的连续地址空间,然后全部载入主存储器的连续空间中。系统不含MMU带来的另外一个问题是磁盘交换空间无法使用,对于资源有限的嵌入式系统而言,系统执行时如果缺少内存将无法通过磁盘交换来得到改善。 

    MMU
的省略虽然带来了系统及应用程序开发的限制,但对于成本和体积敏感的嵌入式设备而言,其应用环境和应用需求并不要求复杂和相对昂贵的硬件体系,对于功能简单的专用嵌入式设备,内存的分配和管理完全可以由开发人员考虑。 
    4.
文件系统
    uClinux
系统多采用Romfs文件系统,Romfs是一种相对简单、占用空间较少的文件系统。空间的节约来自于两个方面:首先内核支持Romfs文件系统比支持ext2文件系统需要更少的代码;其次romfs文件系统相对简单,在建立文件系统超级块(Superblock)需要更少的存储空间。Romfs是只读的文件系统,禁止写操作,因此系统同时需要虚拟盘(RAMDISK)支持临时文件和数据文件的存储。 
    
随着技术的发展,近年来日志文件系统在uClinux系统上得到了较多的应用,其中以支持NOR FLASHJFFSJFFS2文件系统和支持NAND FLASHYAFFS最为流行。这些文件系统都支持掉电文件保护,同时支持标准的MTD驱动。 

    5.
多进程管理
    
由于uClinux没有MMU管理存储器,在实现多个进程时需要实现数据保护。uClinux的虽然支持fork函数,但其实质是和vfork:实际上uClinux所有的多进程管理都通过vfork来实现。 

    vfork
不拷贝父进程的页面,只是初始化私有的数据结构与准备足够的分页表。调用完成后父子进程事实上共享同一块存储器,因此子进程可以更改父进程的数据及堆栈信息,所有父进程进入睡眠,直到子进程执行exec。当子进程正确开始执行后,将唤醒父进程,使得父进程继续往后执行。这意味着uClinux系统fork调用完程后,要么子进程代替父进程执行(此时父进程已经休眠)直到子进程调用exit退出,要么调用exec执行一个新的进程。 

    vfork
uClinux与标准Linux应用程序的开发中最重要的不同之处,只有对vforkfork两个函数的差异和程序处理有详细的了解才能顺利地完成从LinuxuClinux的程序移植。 

    6.
实时性讨论
    
Linux一样,uClinux本身并不支持实时性应用,但通过实时性的修改(RTLinuxRTAI)可以提供基于内核空间和用户空间的硬实时和软实时的系统调用。 
    uClinux
不足之处 
    
正如中国古语云“人无完人”,uClinux也有一些不足之处: 

    1.
文档的不足
    
Linux及其他自由软件类似,uClinux的文档十分不足:缺乏组织和一致的文档、热门技术和分类文档众多而杂乱无章、非热点部分文档缺失甚至没有文档。对于开发人员而言,往往要深入程序的源代码找寻有用的资料。 

    2.Bug
问题
    uClinux
与硬件平台直接相关。对于有商业公司赞助的硬件平台,其相关代码和Bug更新较快,编译和执行都十分顺利;但对于非商业支持的硬件平台,其内核和应用程序代码都得不到及时更新和排错。这种现象在内核源代码树还不是十分普遍,但在uClinux自带的应用程序库中却经常发生编译错误,往往是增加了一个应用程序或改变了运行库便导致无法编译。这就需要开发者投入足够的时间和精力进行排错和修改,也会导致开发进度的延误。 

    
总结 

    uClinux
是一个优秀的嵌入式操作系统,集硬件兼容性、软件可移植性、系统稳定性于一身,是开放系统世界的一颗新星。在本系列文章的后面将陆续探讨uClinux的内核定制、驱动开发、文件系统等一系列技术问题


 

文章评论1条评论)

登录后参与讨论

用户1269294 2012-10-24 14:48

了解了,多谢。

用户403664 2012-10-24 10:11

word文档本上会自带很多样式代码。你用网站的高级编辑器,使用“一键排版”功能即可!详细请看:http://bbs.ednchina.com/BLOG_ARTICLE_3007122.HTM

用户1269294 2012-10-24 09:37

感谢支持!原本打算一篇博客搞定的,但是20000的字数限制是个**烦,尤其是不能有表格。

用户403664 2012-10-23 14:54

支持系列记录!

用户139266 2007-1-1 12:36

太好了,我正学呢,新手,斑竹谢谢了
相关推荐阅读
sealove518_112732726 2012-12-14 13:16
同時兩個surfaceview camera 中的一些開發問題
問題1: 如何將camera surfaceview 顯示在最上層:用了this.setZOrderOnTop(true);這個方法 問題2: 如何用一個BUTTON來自由控制came...
sealove518_112732726 2012-12-14 11:22
Eclipse中导入android项目名前有红叉但项目内文件无错误问题解决方法
Eclipse中导入android项目名前有红叉但项目内文件无错误问题解决方法 Eclipse中,Android项目名称前有红叉,但项目内所有文件都无错误,通常发生在导入项目时。 先可以去...
sealove518_112732726 2012-09-05 10:29
android各种权限及说明
  android.permission.ACCESS_CHECKIN_PROPERTIES 允 许读写访问”properties”表在checkin数据库中,改值可以修改上传( Allow...
sealove518_112732726 2012-09-05 10:27
android各种权限及说明
android各种权限及说明 android.permission.ACCESS_CHECKIN_PROPERTIES 允 许读写访问”properties”表在checkin数据库中,改值...
sealove518_112732726 2012-09-04 08:54
android 获取当前程序路径
//  获取当前程序路径     getApplicationContext().getFilesDir().getAbsolutePath();   //  获取该...
sealove518_112732726 2012-01-11 09:40
mt.exe:general error c101008d 最终原因已查明
mt.exe:general error c101008d(最终原因已查明)_算法的天空_百度空间   2011-05-27 16:22:41|  分类: 坑爹软件问题 |  标签: |字号大...
我要评论
1
10
关闭 站长推荐上一条 /2 下一条