uCLinux和Linux虽然在名字上有一些类似,但实际上,区别是很大的。
硬件层
linux在嵌入式中的使用,几乎都是运行在arm的MPU上,需要有MPU+DDR+Flash(TF,eMMC,NAND...),而大部分的MPU都是BGA封装的,在硬件上的设计、生产成本相对于MCU那种LQFP或是QFN封装的芯片就要高不少,而且DDR与Flash都是必不可少的,总体成本也就更高了。
uCLinux是micro-Control linux的缩写,是针对单片机(MCU)的“linux”系统。最小情况下,只用一片MCU就可以了。成本要低很多。
而为什么是这样的硬件架构,是由于Linux的运行需要有内存管理单元(MMU )而决定的。MMU用于虚拟内存管理,来提高内存的使用效率,在一定程度上也会增强系统的稳定性。
MMU是这两个系统最基本的不同点,uclinux在单片机上运行时,直接访问物理内存地址,所有的进程都是使用的这一块物理地址,这样,如果程序中调用了一个无效的指针,将导致整个系统的崩溃。
软件层
一、功能
uCLinux相对于完整的Linux系统,也会少很多函数,比如brk()函数,所以,只能mmap()来进行内存分配。
但相对于RTOS来说,其开发复杂度也比较高,uCLinux的开发流程是与Linux类似的,需要有bootloader,比如常使用的u-boot,而且uclinux的编译配置也要比RTOS要复杂,不如RTOS的工程简洁方便。
uCLinux的调度与Linux是一样的,是非抢占的,这就决定的其实时性的不足。
二、资源
uCLinux占用的资源是比较大的,相对于裸机或是RTOS,都占用更多的RAM与ROM,这就导致项目使用的MCU的性能不能太低,资源不能太少,这样硬件成本就会高。
系统本身占用更多的资源,那应用程序就占用比较少,而且实时性也不够了。
三、移植
移植的难易程序上,uclinux目前也没有优势,比如FreeRTOS的移植,可以直接使用ST的CubeMX生成可用的工程,直接编译运行,而uclinux则不行,需要u-boot来引导内核启动,而且要分析RAM的使用情况,大多数还要外扩一片SRAM才能运行起来。这还只是移植了个内核,再写应用程序时,还可能有各种问题。
综上,uCLinux目前的处境是很尴尬的,尤其是目前国产的RTOS系统的崛起,如RT-Thread ,djyos,Huawei LiteOS ,Alios Things等等,在功能上,特性上都要比uCLinux更适合MCU上的应用。
|