- UID
- 852722
|
Why 嵌入式Linux?
截至2001年7月30日,已经使用或将要使用嵌入式Linux的用户已达到88.6%。
Why uclinux?
全球每年生产的CPU的数量在二十亿颗左右,超过80%应用于专用性很强的各类嵌入式系统。其中又有相当一部分面向低端市场。为降低硬件成本及运行功耗,有一类CPU在设计中取消了内存管理单元(Memory ManagementUnit,简称MMU)功能模块。如Motorola公司的M68328、M68EN322 、MC68360、DragonBall系列如68EZ328、68VZ328,ColdFire系列的如5272、5307,ARM7TDMI andMC68EN302、ETRAX、Intel i960、PRISMA、Atari 68k等等。
􀂄 标准Linux针对有MMU的处理器设计。在这种处理器上,虚拟地址被送到MMU,把虚拟地址映射为物理地址。通过赋予每个任务不同的虚拟地址/物理地址转换映射,可支持不同任务之间的保护。
What is uclinux?
uCLinux是一个完全符合GNU/GPL公约的项目,完全开放代码,现由Lineo公司支持维护。英文单词中u表示Micro,小的意思,C表示Control,控制的意思, 所以uCLinux 就是Micro-Control-Linux,字面上的理解就是“微控制领域中的Linux系统”。它专门针对没有MMU的CPU,并专为嵌入式系统做了许多小型化的工作,已支持前面提到的多款CPU.
uclinux针对NOMMU的特殊处理
uClinux针对没有MMU的处理器设计,不能使用处理器的虚拟内存管理技术,但出现简单和尽量靠拢标准Linux得需要,uClinux仍然沿用标准Linux的分页内存管理结构,系统在启动时把实际存储器进行分页,但实际上采用的是实存储器管理策略。(#ifdef NO_MM,arch/armnommu)uClinux系统对于内存的访问是直接的,(它对地址的访问不需要经过MMU,而是直接送到地址线上输出),所有程序中访问的地址都是实际的物理地址。操作系统对内存空间没有保护(这实际上是很多嵌入式系统的特点),各个进程实际上共享一个运行空间(没有独立的地址转换表)。一个进程在执行前,系统必须为进程分配足够的连续地址空间,然后全部载入主存储器的连续空间中。由于程序加载地址与预期(ld文件中指出的)通常都不相同,这样relocation过程就是必须的。磁盘交换空间无法使用的,系统执行时如果缺少内存将无法通过磁盘交换来得到改善。
uclinux根(root)文件系统
uCLinux系统采用romfs文件系统,这种文件系统相对于一般的ext2文件系统要求更少的空间。空间的节约来自于两个方面:首先内核支持romfs文件系统比支持ext2文件系统需要更少的代码;其次romfs文件系统相对简单,在建立文件系统超级块(superblock)需要更少的存储空间。Romfs文件系统不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟ram盘/JFFS的方法进行处理(ram盘将采用ext2文件系统)。
uClinux多进程管理
uClinux NOMMU 但支持多进程MMU不是支持多进程的必要条件,只是更好的支持了多进程操作系统的实现。uClinux没有MMU管理存储器,不支持COW的机制,因此fork的优化只有采用vfork这一途径,并且由于不支持虚拟地址空间,简单复制的fork实现也必须修正reloc段。最终,uClinux的fork/vfork都用vfork实现。子进程要么代替父进程执行(此时父进程已经sleep)直到子进程调用exit退出,要么调用exec执行一个新的进程,这个时候将产生可执行文件的加载,即使这个进程只是父进程的拷贝,这个过程也不能避免。当子进程执行exit或exec后,子进程使用wakeup把父进程唤醒,父进程继续往下执行。
uClinux开发环境
应用开发环境由目标系统硬件开发板和宿主PC机所构成。硬件开发板用于操作系统和目标系统应用软件的运行,而操作系统内核的编译、应用软件的开发和调试则需要借助宿主PC机来完成。双方之间一般通过串口建立连接关系。
uCLinux及相关工具集都是开放源码的项目,可从网上下载获得。首先要在宿主机上安装标准Linux发行版.目前有两套编译工具:m68k-coff-gcc和m68k-elf-gcc。编译工具包还包括链接器(ld)、汇编器(as)以及二进制处理工具,包括生成静态库工具(ar、ranlib)、二进制码察看工具(nm、size)、二进制格式转换工具(objcopy)。 |
|