引子
引子
随着大规模集成电路技术的不断发展,微控制器单元MCU(Micro Controller Unit)的功能越来越强,片上设备的集成度越来越高,MCU逐渐演变成功能更加强大、体积更小、功耗更低的片上系统SOC(System On AChip)。随着硬件规模的扩大,应用程序的规模也越来越大。原始的在MCU上的“裸奔”的程序已经不能适应用户需求了,所以引入管理硬件与软件资源的系统软件就显得是非常迫切的需求了。
为为什么在嵌入式系统中使用Linux操作系统
Linux(发音:哩呐克斯)操作系统在诞生之初,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux以其旺盛的生命力,在嵌入式系统当中得到了广泛的应用。
嵌入式Linux是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。嵌入式Linux既继承了Internet上无限的开放源代码资源,又具有嵌入式操作系统的特性。
下面主要介绍一下,构建嵌入式Linux系统,最主要的工作内容。
BootLoader
在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行的一种软件。它可以简单的初始化硬件设备、建立内存空间映射图,从而将目标系统的软硬件环境带到一个合适状态,以便为最终加载并引导操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS(基本输入输出系统:Basic In And Output System)那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在嵌入式系统中常用的Boot Loader为U-Boot,它是一种开源免费的支持目标系统非常多的系统引导程序。后面同大家讨论这个问题。
Linux Kernel
Linux支持的目标系统平台非常多,因此,不是所有的内核代码都对目标系统有效。选择合适的目标系统分支确定CPU架构是最主要的配置内容,这样内核就会只保留与目标系统相关的代码。其次,由于Linux内核实现了完整的操作系统功能,但对于特定的嵌入式系统来说,很多功能是不需要的,所以,在内核配置阶段还要去掉不使用的多余的功能。裁剪后的内核能够刚好适合目标系统,达到内核代码的体积最小、功能最优、运行效率最高的效果。Linux内核是C语言程序设计的,裁剪并编译后的Linux内核映像非常小。通常来讲只有几兆字节。这么小的内核,几乎一般的片上系统都可以运行。当你真正的配置并使用过Linux内核之后,你就会真正的明白它的好、正真的爱上它、用心的赞美它。
Device Drivers
嵌入式系统的最大特点就是软件与硬件的可裁剪性。根据项目要求,去除不需要的硬件电路,并保留必须的硬件设备,添加定制硬件设备。由于硬件的定制性,操作系统内核也需要根据要求进行调整。引入了Linux操作系统,在系统软件方面,开发者只需要根据要求定制相应设备的驱动程序就可以了。Linux下的设备被分成块设备、字符设备、套接字设备,构建平台的时候,开发者更多的是定制字符类设备驱动程序。
Root File System
Linux操作系统内核与根文件系统是完全独立的两个部分。Linux使用的根文件系统是以“/”作为根目录的倒树型的目录结构,这个目录结构中有很多系统定义的特有目录,如etc、home、sys、dev、proc、bin、sbin、mnt、lib等等。定制根文件系统,要求开发者根据需要创建目录文件、各种脚本文件、设备文件、库文件、指令解释执行文件等内容。根文件存放在指定的存储器内,内核启动后,会先驱动存储设备,然后在根据预先设定的方式挂载并使用根文件系统。开源的世界总会给我们不一样的惊喜,虽然根文件系统内容很多,但开发者现在可以使用BusyBox工具集,只需通过简单的菜单配置,就可以轻松的定制Linux根文件系统了。
结束语
构建嵌入式Linux系统平台,需要开发者硬件功底非常扎实,能熟练使用Linux进行开发,同时对Linux操作系统结构有一个比较清晰的认识,还有其它方面的要求。
本帖最后由 太白金星 于 2017-9-8 13:38 编辑