ucLinux VS uc/os
ucLinux
编译后的可执行文件可以控制在几百K量级
uClinux的内核可以在Flash上直接运行:就是把uClinux的内核的可执行映象烧写到flash上,系统启动时从 Flash的某个地址开始逐句执行;也可以加载到内存中运行:把内核的压缩文件存放在Flash上,系统启动时读取压缩文件在内存里解压,然后开始执行。
采用了romfs文件系统作为root文件系统:这种文件系统相对于一般的ext2文件系统要求更少的空间,首先内核支持romfs文件系统比支持ext2文件系统需要更少的代码,其次romfs文件系统相对简单,建立文件系统superblock需要更少的存储空间。Romfs文件系统不支持动态擦写,对于系统需要动态保存的数据采用RAM盘的方法处理,RAM盘采用ext2文件系统。
对硬件要求如下:
1.SDRAM 8M及以上
2.一个简易的串口
3.Flash 2M及以上
4.一个以太网接口(可选)
SRAM 2M以上。
还需要有片外FLASH或者SDRAM
创建进程其使用vfork()函数,使用其创建的进程相当于线程,所以其任务基本以线程进行
芯片要求:stm32f429及以上
uClinux可以使用Rt-linux的patch,从而增强uClinux的实时性,使得uClinux可以应用于工业控制、进程控制等一些实时要求较高的应用
uClinux重写了应用程序库,相对于越来越大且越来越全的glibc库,uClibc对libc做了精简
可以外扩SDRAM
能支持Compact Flash、SRAM、PSRAM、NOR、 NAND以及现在的SDRAM存储器。
MCU可提供从512MB的双块Flash到2MB的双块Flash
uClinux:开发者可以使用几乎所有的Linux API函数
它具有体积小、稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持
进程调度沿用Linux的时间片轮转方式
uclinux没有mmu管理存储器,所以对内存的访问是直接的,对于任务数量没有限制
uclinux继承了linux网络操作系统的优势,可以很方便的支持网络文件系统且内嵌tcp/ip协议。
关于移植
uClinux是Linux针对嵌入式系统的一种改良,其结构比较复杂;相对uC/OS,uClinux的移植也复杂得多。
uClinux的移植大致可以分为3个层次。
结构层次的移植:如果待移植处理器的结构不同于任何已经支持的处理器结构,则需要修改linux/arch目录下相关处理器结构的文件。虽然uClinux内核代码的大部分是独立于处理器和其体系结构的,但是其最低级的代码也是特定于各个系统的。这主要表现在它们的中断处理上下文、内核映射的维护、任务上下文和初始化过程都是独特的。这些例行程序位于lunux/arch/目录下。由于Linux所支持体系结构的种类繁多,所以对一个新型的体系,其低级例程可以模仿与其相似的体系例程编写。
平台层次的移植:如果待移植处理器是某种uClinux已支持体系的处理器,则需要在相关体系结构目录下建立相应目录并编写相应代码。
板级移植:如果所用处理器已被uClinux支持,就只需要板级移植了。板级移植包括驱动程序的编写和环境变量设置等内容
大部分开发处于板级移植
Uc/os
编译后仅有几十K量级
对于芯片要求低,51也能跑。
实时性操作系统
任务调度方式:剥夺型
最多支持64个任务
uc/os内核是针对实时系统的要求设计实现的,
相对简单,可以满足较高的实时性要求.
没有网络协议,需要自行添加轻量级TCP/IP协议
没有MMU,所以对内存的访问也是直接访问。
Uc/os主要实现了任务管理机制。
系统本身并没有对文件系统的支持,但是具有良好的扩展性能,如果需要的话也可自行加入文件系统的容。
关于移植
要移植uC/OS,目标处理器必须满足以下要求:
处理器的C编译器能产生可重入代码,且用C语言就可以打开和关闭中断;
处理器支持中断,并能产生定时中断;
处理器支持足够的RAM(几KB),作为多任务环境下的任务堆栈;
处理器有将堆栈指针和其它CPU寄存器读出和存储到堆栈或内存中的指令。
总结
通过对uC/OS和uClinux的比较可以看出,这两种操作系统在应用方面各有优劣。uC/OS占用空间少、执行效率高、实时性能优良,且针对新处理器的移植相对简单。UClinux则占用空间相对较大,实时性能一般,针对新处理器的移植相对复杂。但是,uClinux具有对多种文件系统的支持能力、内嵌了TCP/IP协议,可以借鉴Linux丰富的开源资源,对一些复杂的应用,uClinux具有相当优势。操作系统的选择是由嵌入式系统的需求决定的。简单地说就是,小型控制系统可充分利用uC/OS小巧且实时性强的优势;如果开发PDA和互联网连接终端等较和为复杂的系统,则uClinux是不错的选择。