论文部分内容阅读
摘 要:作为开放源码的自由操作系统,Linux系统的应用也日益广泛。本文将从Linux系统的内核结构展开论述,并从配置与裁剪方法上实现对嵌入式系统设计的目标,并就裁剪的目的及具体的系统编译过程进行描述,以彰显Linux操作系统的开放性、稳定性、可修改性等优势。
关键词:Linux 内核 裁剪 交叉编译
Linux系统内核具有非常好的网络适应性和开发自由度,并在嵌入式系统应用中更加深入和广泛。嵌入式Linux系统是对于原Linux操作系统裁剪后的系统,目前常用在媒体播放、移动电话及工业控制等领域。作为对Linux操作系统内核的裁剪,往往是嵌入式系统开发的关键,为此,本文将从Linux系统内核结构着手,就其裁剪原则及编译方法进行阐述,以实现对嵌入式Linux操作系统的优化。
一、Linux系统裁剪研究
从操作系统的应用来看,大部分操作系统都是不支持嵌入式设计,而面对不同领域的具体应用及环境配置需要,改造操作系统以适应软件功能的开发,往往是当前操作系统裁剪的常见应用。对于Linux操作系统来说,其自由开发的源码内核,能够结合特定功能需要来适当裁剪其体积要求,由此带来的软硬件平台及功能的减少,使其规模更加紧凑,代码运行更加精简。对操作系统进行裁剪,需要遵循一般流程:首先获取原操作系统的内核源码,并从具体应用中对源码进行适当的环境配置,对多余的或不用的模块给予摈除,对于特殊的功能需求需要从程序代码的编写上来增加相应驱动程序,以构建其适应于目标平台的新操作系统。对于操作系统的裁剪是整个系统改造的关键环节,也是与整个系统进行交叉编译和稳定链接的重要步骤。对操作系统进行定制,首先需要分析操作系统的内核及版本特点,对于商业化的操作系统,如Windows需要收取软件许可证费用,而对于源码开放的操作系统则可以自由使用。当前Linux操作系统支持内核修改,并且其稳定的性能,丰富的开发工具及模块结构,更易于裁剪嵌入式环境。因此在应用中多以Linux为对象来进行裁剪。作为Linux操作系统,在进行裁剪时需要遵循一定的原则:一是小型化,即对嵌入式系统来说以最小的体积为宜;二是功能适当化,从应用上以满足需求为主,对于多余的应用只需要保留对应的系统支持即可;三是系统结构的稳定性及可靠性,对于裁剪后的操作系统应该满足功能及结构的可靠性和完整性。操作系统的编译及安装是最后阶段,通常在宿主机上构建环境,并从操作系统内核及应用程序的调试上来满足宿主机与目标机的有效连接。如以串口、OCD方式进行连接等。
二、Linux操作系统的内核特点及结构模块
作为稳定性、可修改性较强的Linux内核结构,在进行内核访问时只需通过调试来保障操作系统的基本功能。在Linux系统中,通过模块机制来启动所需要的内核模块,如设备驱动程序、文字子系统等,并可以在动态加载及卸载上确保对系统内核空间资源的有效利用。从结构上来看,Linux系统内核分为五部分,这些子系统在进程调度下实现对CPU的访问,以满足内核各子系统的有序执行。对于内存管理来说,以页式存储机制为主,并结合硬件结构来灵活分配内存组织方式,确保各硬件对系统资源的共享与合理利用;同时,内存管理还支持虚拟内存管理,使得Linux进程拥有更多的内存容量;在逻辑文件系统中,Linux支撑硬件控制器对相关设备的驱动,从而实现对外部设备的有效驱动和管理;进程间通信主要是满足进程的信息交换;网络接口系统以网络协议和网络驱动为主,提供对网络通信服务的支持。源码是Linux系统开发的基础,在Linux系统内核分析上,其源码主要包括以下内容:/arch主要包括与当前处理器的体现结构相关的源代码,如ARM、PowerPC、I386等,另外还包括boot、lib、math-emu等目录,以满足系统裁剪的需要;/init主要包含系统初始化源码,如main.c和version.c等文件;/block主要包含相关的驱动代码;/fs主要包含Linux系统所支持的文件系统;/inchude主要包含系统编译时需要的头文件,如.h文件;/mm主要包含与体系结构无关的内存管理源码;/kemel主要包含内核文件,如进程调度kerel/sched.c,创建进程kernel/fork.c,撤销进程源码kernel/exit.c等;/scripts主要包含系统配置源码,如make menuconfig等配置内核指令源码。
三、对Linux系统内核进行配置与裁剪
Linux系统在内核裁剪上主要有两种方法:一是通过配置工具来实现对配置文件.config和autoconf.h的修改,而对原内核代码不修改;二是直接对配置信息保存到.config和autoconf.h两个配置文件中,编译后自动修配置文件。我们以第一种方法为例来探讨对Linux系统内核进行模块功能配置的过程及裁剪方法。一是利用tar指令来解压内核源码到制定目录,并利用make rmproper指令来清除制定目录下的配置文件及其他中间文件;二是对Linux内核进行配置,利用配置构建来实现对相关指令的执行。如$make old config,对原有内核配置文件进行直接修改;$make config基于文本方式来进行配置;$make xconfig基于窗口方式来进行配置;在make xconfig交互配置中,主要有三种选择,Y表示将该功能编译进内核;N表示不将该功能编译进内核;M表示为将该功能编译成可以在需要时动态插入到内核中的模块。因此在使用配置工具进行内核配置时,对于大多数指令都可以使用缺省值,只有部分指令需要指定参数选择。在具体内涵配置中,对于不需要的功能尽量不要,对于与内核相关的紧密功能代码需要直接编译到内核中;对于与内核核心关系较远且不经常使用的功能代码编译成可加载模块,从而实现对系统内核的有效简化。
以Linux2.4系统来配置PDA嵌入式内核为例来探讨其具体裁剪方法。对于PDA系统内核来说,在无线传输上有红外及蓝牙接口,需要通过Wi-Fi与GPS进行通信,而对于进程调度及文件系统的支持相对单一,因此在配置中需要把握以下几点:一是在网络配置上要支持网络更新功能,即利用[Y]Networking support以满足对网络设备的直接支持;[Y]TCP/IP networking直接对TCP/IP协议的支持;[Y]Bluetooth subsystem support对蓝牙的支持;二是在可执行文件格式配置上,[Y]Kernel support for ELF binaries[Y]Compile as ELF –if your GCC is ELF-GCC可以支持ELF文件系统;[Y]Advanced Power Manager Bios support支持电源管理BIOS;Block devices支持对硬件等设备驱动程序;三是在系统内核的编译上,利用make chean对前面文件进行删除;利用make dep指令读取配置文件,并创建对应的依赖关系树;利用make modules进行模块编译;利用make zImage来实现完全编译内核;四是通过安装新内核来实现对目标平台内核的安装,如利用RS-232接口或USB接口将内核映像传送给目标机器。
参考文献
[1] 石秀民,魏红兴.嵌入式系统原理与应用[M].北京:北京航空航天大学出版社,2007.
[2] 冷玉林,钟将.基于ARM的嵌入式Linux系統构建[J]. 计算机系统应用. 2010(11).
[3] 林继民,吴怡,林萧.基于Linux嵌入式系统开发平台的构建及应用[J]. 现代电子技术. 2010(18).
关键词:Linux 内核 裁剪 交叉编译
Linux系统内核具有非常好的网络适应性和开发自由度,并在嵌入式系统应用中更加深入和广泛。嵌入式Linux系统是对于原Linux操作系统裁剪后的系统,目前常用在媒体播放、移动电话及工业控制等领域。作为对Linux操作系统内核的裁剪,往往是嵌入式系统开发的关键,为此,本文将从Linux系统内核结构着手,就其裁剪原则及编译方法进行阐述,以实现对嵌入式Linux操作系统的优化。
一、Linux系统裁剪研究
从操作系统的应用来看,大部分操作系统都是不支持嵌入式设计,而面对不同领域的具体应用及环境配置需要,改造操作系统以适应软件功能的开发,往往是当前操作系统裁剪的常见应用。对于Linux操作系统来说,其自由开发的源码内核,能够结合特定功能需要来适当裁剪其体积要求,由此带来的软硬件平台及功能的减少,使其规模更加紧凑,代码运行更加精简。对操作系统进行裁剪,需要遵循一般流程:首先获取原操作系统的内核源码,并从具体应用中对源码进行适当的环境配置,对多余的或不用的模块给予摈除,对于特殊的功能需求需要从程序代码的编写上来增加相应驱动程序,以构建其适应于目标平台的新操作系统。对于操作系统的裁剪是整个系统改造的关键环节,也是与整个系统进行交叉编译和稳定链接的重要步骤。对操作系统进行定制,首先需要分析操作系统的内核及版本特点,对于商业化的操作系统,如Windows需要收取软件许可证费用,而对于源码开放的操作系统则可以自由使用。当前Linux操作系统支持内核修改,并且其稳定的性能,丰富的开发工具及模块结构,更易于裁剪嵌入式环境。因此在应用中多以Linux为对象来进行裁剪。作为Linux操作系统,在进行裁剪时需要遵循一定的原则:一是小型化,即对嵌入式系统来说以最小的体积为宜;二是功能适当化,从应用上以满足需求为主,对于多余的应用只需要保留对应的系统支持即可;三是系统结构的稳定性及可靠性,对于裁剪后的操作系统应该满足功能及结构的可靠性和完整性。操作系统的编译及安装是最后阶段,通常在宿主机上构建环境,并从操作系统内核及应用程序的调试上来满足宿主机与目标机的有效连接。如以串口、OCD方式进行连接等。
二、Linux操作系统的内核特点及结构模块
作为稳定性、可修改性较强的Linux内核结构,在进行内核访问时只需通过调试来保障操作系统的基本功能。在Linux系统中,通过模块机制来启动所需要的内核模块,如设备驱动程序、文字子系统等,并可以在动态加载及卸载上确保对系统内核空间资源的有效利用。从结构上来看,Linux系统内核分为五部分,这些子系统在进程调度下实现对CPU的访问,以满足内核各子系统的有序执行。对于内存管理来说,以页式存储机制为主,并结合硬件结构来灵活分配内存组织方式,确保各硬件对系统资源的共享与合理利用;同时,内存管理还支持虚拟内存管理,使得Linux进程拥有更多的内存容量;在逻辑文件系统中,Linux支撑硬件控制器对相关设备的驱动,从而实现对外部设备的有效驱动和管理;进程间通信主要是满足进程的信息交换;网络接口系统以网络协议和网络驱动为主,提供对网络通信服务的支持。源码是Linux系统开发的基础,在Linux系统内核分析上,其源码主要包括以下内容:/arch主要包括与当前处理器的体现结构相关的源代码,如ARM、PowerPC、I386等,另外还包括boot、lib、math-emu等目录,以满足系统裁剪的需要;/init主要包含系统初始化源码,如main.c和version.c等文件;/block主要包含相关的驱动代码;/fs主要包含Linux系统所支持的文件系统;/inchude主要包含系统编译时需要的头文件,如.h文件;/mm主要包含与体系结构无关的内存管理源码;/kemel主要包含内核文件,如进程调度kerel/sched.c,创建进程kernel/fork.c,撤销进程源码kernel/exit.c等;/scripts主要包含系统配置源码,如make menuconfig等配置内核指令源码。
三、对Linux系统内核进行配置与裁剪
Linux系统在内核裁剪上主要有两种方法:一是通过配置工具来实现对配置文件.config和autoconf.h的修改,而对原内核代码不修改;二是直接对配置信息保存到.config和autoconf.h两个配置文件中,编译后自动修配置文件。我们以第一种方法为例来探讨对Linux系统内核进行模块功能配置的过程及裁剪方法。一是利用tar指令来解压内核源码到制定目录,并利用make rmproper指令来清除制定目录下的配置文件及其他中间文件;二是对Linux内核进行配置,利用配置构建来实现对相关指令的执行。如$make old config,对原有内核配置文件进行直接修改;$make config基于文本方式来进行配置;$make xconfig基于窗口方式来进行配置;在make xconfig交互配置中,主要有三种选择,Y表示将该功能编译进内核;N表示不将该功能编译进内核;M表示为将该功能编译成可以在需要时动态插入到内核中的模块。因此在使用配置工具进行内核配置时,对于大多数指令都可以使用缺省值,只有部分指令需要指定参数选择。在具体内涵配置中,对于不需要的功能尽量不要,对于与内核相关的紧密功能代码需要直接编译到内核中;对于与内核核心关系较远且不经常使用的功能代码编译成可加载模块,从而实现对系统内核的有效简化。
以Linux2.4系统来配置PDA嵌入式内核为例来探讨其具体裁剪方法。对于PDA系统内核来说,在无线传输上有红外及蓝牙接口,需要通过Wi-Fi与GPS进行通信,而对于进程调度及文件系统的支持相对单一,因此在配置中需要把握以下几点:一是在网络配置上要支持网络更新功能,即利用[Y]Networking support以满足对网络设备的直接支持;[Y]TCP/IP networking直接对TCP/IP协议的支持;[Y]Bluetooth subsystem support对蓝牙的支持;二是在可执行文件格式配置上,[Y]Kernel support for ELF binaries[Y]Compile as ELF –if your GCC is ELF-GCC可以支持ELF文件系统;[Y]Advanced Power Manager Bios support支持电源管理BIOS;Block devices支持对硬件等设备驱动程序;三是在系统内核的编译上,利用make chean对前面文件进行删除;利用make dep指令读取配置文件,并创建对应的依赖关系树;利用make modules进行模块编译;利用make zImage来实现完全编译内核;四是通过安装新内核来实现对目标平台内核的安装,如利用RS-232接口或USB接口将内核映像传送给目标机器。
参考文献
[1] 石秀民,魏红兴.嵌入式系统原理与应用[M].北京:北京航空航天大学出版社,2007.
[2] 冷玉林,钟将.基于ARM的嵌入式Linux系統构建[J]. 计算机系统应用. 2010(11).
[3] 林继民,吴怡,林萧.基于Linux嵌入式系统开发平台的构建及应用[J]. 现代电子技术. 2010(18).