原创 深入剖析uClinux

2008-5-12 14:37 2395 7 7 分类: MCU/ 嵌入式
苹果的iPod是一款时尚的MP3播放器,采用苹果公司的专用MP3播放软件,是市场上销量最好的MP3之一。最近狂热的Linux爱好者对其进行了改造,在不改动硬件的环境下移植了内核版本为2.4.24的uClinux(基于ARM 32位处理器内核ARM 7TDMI),并使其具备了FramBuffer、硬盘支持、远程控制等功能,使一台MP3变成了一台PDA。该项目一直处于活跃阶段,许多新的功能正在添加之中。 

    图2显示了在Cisco 3000上路由器运行uClinux的图片。事实上,在基于MIPS处理器的Cisco 2500/3000/4000系列路由器上,uClinux都得到了移植,并能够出色稳定地工作。 

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

041214155356142.jpg

图1 运行uClinux的苹果iPod-MP3播放器 
041214155356143.jpg

图2 运行uClinux的Cisco 3000路由器
   

    针对没有MMU的CPU 

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

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

    最初的uClinux仅仅支持Palm硬件系统,基于Linux 2.0内核。随着系统的日益改进,支持的内核版本从2.0、2.2、2.4一直到现在最新的2.6。系统的开发人员从两人增加到了目前的12人,支持的硬件系统也从一种增加到了目前的十余种(支持的硬件平台如Motorola公司的M68328、M68EN322、MC68360、DragonBall系列如68EZ328、68VZ328,ColdFire系列的如5272、5307,ARM 7TDMI、MC68EN302、ETRAX、Intel i960、PRISMA、Atari 68k等等。) 

    根据Linuxdevices.com网站2004年3月的调查,uClinux在全球嵌入式Linux市场所占的份额已位居第二,仅仅落后于定制Linux(即自己下载源码进行修改定制)。同时Linux在全球嵌入式操作系统的市场份额依然处于统治地位(占40%以上),领先第二名微软公司的嵌入式操作系统三倍以上(市场份额约13%)。 

    uClinux系统特点 

    1. 嵌入式操作系统比较 

    由表1可以看出,对于嵌入式应用,高端平台可直接采用Linux系统,其兼容性和可移植度都较高,但对硬件处理速度和存储空间要求较高。 

    低端平台的最佳选择是uClinux,其性能稳定、移植性好、功能强大。 

    低端平台如果对实时性要求较高、应用相对简单,则可采用uc/os或其他操作系统。 

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


041214155356141.gif

041214155356144.jpg
图3 uClinux系统架构


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

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

    MMU的省略虽然带来了系统及应用程序开发的限制,但对于成本和体积敏感的嵌入式设备而言,其应用环境和应用需求并不要求复杂和相对昂贵的硬件体系,对于功能简单的专用嵌入式设备,内存的分配和管理完全可以由开发人员考虑。 

    4.文件系统
    uClinux系统多采用Romfs文件系统,Romfs是一种相对简单、占用空间较少的文件系统。空间的节约来自于两个方面:首先内核支持Romfs文件系统比支持ext2文件系统需要更少的代码;其次romfs文件系统相对简单,在建立文件系统超级块(Superblock)需要更少的存储空间。Romfs是只读的文件系统,禁止写操作,因此系统同时需要虚拟盘(RAMDISK)支持临时文件和数据文件的存储。 

    随着技术的发展,近年来日志文件系统在uClinux系统上得到了较多的应用,其中以支持NOR FLASH的JFFS、JFFS2文件系统和支持NAND FLASH的YAFFS最为流行。这些文件系统都支持掉电文件保护,同时支持标准的MTD驱动。 

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

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

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

    6.实时性讨论
    与Linux一样,uClinux本身并不支持实时性应用,但通过实时性的修改(RTLinux或RTAI)可以提供基于内核空间和用户空间的硬实时和软实时的系统调用。 

    uClinux不足之处 

    正如中国古语云“人无完人”,uClinux也有一些不足之处: 

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

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

    总结 

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

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条