《Linux操作系统内核裁剪的分析.pdf》由会员分享,可在线阅读,更多相关《Linux操作系统内核裁剪的分析.pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、May.2010 中 国 民 航 飞 行 学 院 学 报 Vol.21No.3 Journal of Civil Aviation Flight University of China 59 Linux 操作系统内核裁剪的分析 黄义文(广州民航职业技术学院招生办公室 广东广州 510403)摘 要:通过对 Linux 操作系统进行裁剪,使嵌入式系统和 Linux 操作系统有机结合起来,成为嵌入式 Linux 操作系统。本文对操作系统裁剪的目的和裁剪的重要环节进行了描述,并描述了具体实现内核配置与编译的过程。操作系统裁剪是嵌入式系统开发的重要环节。关 键 词:Linux 内核 裁剪 交叉编译 L
2、inux 操作系统内核具备源代码开放、稳定性高、可修改性强、支持多种体系结构、具有非常好的网络性能、丰富的开发工具等优点,使得它适合于嵌入式开发和应用。嵌入式 linux 是将Linux 操作系统进行裁剪修改,使之能在嵌入式系统上运行的操作系统。目前嵌入式 Linux操作系统在移动电话、个人数字助理(PDA)、媒体播放器、工业控制以及航空航天等领域有着广泛的应用。Linux 操作系统内核的裁剪是嵌入式系统开发的重要环节,对嵌入式系统的开发具有重要意义。一、操作系统裁剪概述 大部分操作系统都不是专为嵌入式系统设计的,应用于嵌入式环境时需要对操作系统进行改造,改造的目的是一方面简化已有操作系统的功
3、能与结构,以满足嵌入式系统对体积的要求;另一方面是开发它的实时性能。对标准的操作系统裁剪就是将功能齐全的源代码,派生出适合于具体软硬件平台、功能减少(针对某种应用)、体系结构更紧凑、规模更精简的代码过程。具体需要裁剪的功能对象主要是:引导及初始化程序、操作系统的内核、设备驱动程序等。其一般操作过程是:获取某一款的操作系统内核源码,根据我们的具体目标平台对这源码进行配置,去掉内核多余的模块,编写引导程序及添加一些外设的驱动程序,打造成适合于目标平台的新操作系统,对该系统进行交叉编译和链接,然后生成一个内核映象文件,最后把该映象文件安装到目标平台中。裁剪过程中的重要环节如下。1 如何定制操作系统
4、目前市场上的操作系统有很多,选择操作系统时首先考虑操作系统内核类型的选择及内核版本的选择这两个因素。大多数的商业操作系统,如Windows、Windows CE对每套操作系统收取一定的许可证费用,相对的,源码开放的操作系统只要不违反GPL协议,就可以自由使用。为了节省开资,操作系统内核类型应选择源码开放的操作系统。其次选取的操作系统还要有高的稳定性、好的网络功能、丰富的开发工具、良好的模块结构,易于进行裁剪等特性。目前Linux操作系统具有较强的优势。当确定了内核类型后,针对此类型操作系统有很多版本,这些版本性能、功能都不一样。以Linux操作系统为例,Linux2.0是第一个支持SMP体系的
5、内核版本;Linux2.2极大地提升了SMP系统性能,同时支持更多的硬件;Linux2.4进一步提升了SMP的扩展性,同时集成了很多用于支持桌面系统的特性,如即插即用支持;Linux2.6与以前系统相比有了很大改进,特别是在超线程、内核互动性和响应性方面。在选择内核版本时,是不是版本越高越好?不是,应根据不同的需要选择,有时,高版本的内核,造成资源浪费,甚至性能变低。例如,在简单的掌上设备中使用Linux2.4其性能要优于使用Linux2.6。2 裁剪配置内核基本原则 对选定的内核进行裁剪、配置要遵循的原则是:首先是小型化,即将标准的操作系统裁剪得尽可能小,以满足许多嵌入式系统对体积的要求;其
6、次是适当功能,标准的操作系统很多功能56May.2010 中 国 民 航 飞 行 学 院 学 报 Vol.21No.3 Journal of Civil Aviation Flight University of China 57 在某一具体应用中是多余的,裁剪时只需保留对嵌入式系统应用程序提供对应的系统支持的功能;最后是完整性和可靠性,裁剪后的操作系统在结构和功能上要具有完整性和可靠性。3编译安装内核 编译及安装操作系统内核和应用程序的方式一般是:在宿主机(开发系统的计算机)建立开发环境,进行操作系统内核配置、应用程序编码和交叉编译,然后在宿主机和目标机(待开发的嵌入式系统)之间建立连接,将
7、操作系统内核及应用程序下载到目标机上进行交叉调试。经调试,最后将操作系统内核及应用程序固化到目标机中。宿主机与目标机的物理连接方式有:串口、以太网接口和 OCD(on chip debug)方式(如 JTAG、BDM)等。宿主机与目标机的逻辑连接方式(按通信协议建立的通信连接)有:文件传输协议 TFTP 等。二、Linux 操作系统的内核结构 Linux系统采用单一的内核结构,操作系统中的基本部分封装在内核中,程序只有通过系统调用访问内核。Linux采用了模块机制(Modules)Linux内核只留有启动系统时所必需的代码,其他所需代码设计成内核模块(如设备驱动程序、文件子系统、网络等),内核
8、模块可按需要动态加载并入内核,也可以卸载释放所占有的资源。这样的设计方式可以灵活、动态地分配内核空间资源,更有利于内核的裁剪。Linux内核主要由5个子系统组成,这5个子系统是相互依赖的关系,如图1所示。进程调度是控制进程对CPU的访问,使各进程能公平合理地访问CPU,同时保证内核能及时执行硬件操作;内存管理采用页式存储管理机制,Linux根据不同的硬件结构,采用不同的内存组织形式,确保每种硬件体系的所有进程安全共享机器内存。内存管理还支持虚拟内存管理方式,使Linux的进程可以使用比实际内存更多的内存容量;Linux采用了虚拟文件系统(VFS),VFS允许用户安装多个不同的文件系统。逻辑文件
9、系统是指Linux所支持的文件系统,硬件驱动程序指为每一种硬件控制器所编写的设备驱动程序模块,因此文件系统是用于支持对外部设备的驱动和存储;进程间通信用于支持多种进程间的信息交换方式;网络接口包括网络协议和网络驱动程序,提供对各种网络通信标准的访问及对各种网络硬件的支持。Linux的内核源代码位于系统的usrsrclinux目录下,在Linux2.6的内核里主要包含有以下目录:图 1内存管理硬件无关硬件有关虚拟文件系逻辑文件系硬件驱动程网络接口 网络协议 硬件驱动程进程调度 进程间通信 May.2010 中 国 民 航 飞 行 学 院 学 报 Vol.21No.3 Journal of Civ
10、il Aviation Flight University of China 59 arch 主要是和体系结构相关的代码,里面几乎包含了目前流行的多数处理器体系结构,ARM、MIPS、PowerPC、Alpha、1386、M68K等。对于任何平台,都包含 boot、kernel、lib、mm、math-emu 目录,arch 目录在系统裁剪过程中是需要重点修改的部分。init 内核的初始化代码,有 main.c 和version.c 两个文件。block 主要是块设备的驱动程序。drivers 字符设备以及 Linux 支持的外围设备的驱动程序。fs 文件系统相关代码,Linux 支持的所有文
11、件系统在 fs 目录下都有一个对应的子目录。include 主要包含编译内核时所需要的大部分头文件(包含(.h)的文件)。incLinu 进程通信机制相关代码。mm 包含了与体系结构无关的内存管理代码。kemel 通用的内核文件,包含内核基本功能部分的实现,如进程调度(kernel/sched.c)、创建和撤消进程代码(kernel/fork.c 和 kernel/exit.c)等。net 包含了 Linux 应用的网络协议代码,例如 AppleTalk、TCP/IP、IPX 等。/scripts 包含了用来配置内核的脚本。当运行make menuconfig 或 make xconfig 等
12、配置内核命令时,用户就是和位于这个目录下的脚本进行交互的。三、Linux 操作系统内核配置与裁剪 目前 Linux 操作系统内核裁剪的方法主要有两个:(1)在不修改内核原代码的基础上,通过配置工具逐个定制裁剪生成配置文件.config 和autoconf.h;(2)在内核裁剪配置中,将配置的功能选项信息保存在.config 和 autoconf.h 配置文件中,然 后 提 供 给 内 核 编 译,编 译 时 自 动 修改.config 和 autoconf.h 配置文件,达到对内核自动裁剪和配置。第一种方法比较简单,只需在配置工具上对内核需要的功能模块进行选择,便能生成配置文件。下面介绍第一种
13、内核裁剪方法的具体步骤。1用 tar 命令解压内核源代码到/usr/src/目录下。2.使用 make rmproper 命令清除目录下所有的配置文件和先前生成核心时所产生的中间文件。3配置内核 Linux 内核提供了几个基于字符和 XWindowr 的配置工具,这几个工具实现的功能类似,只是与用户的交互界面不同。运行如下的命令便启动相应的工具:$make old config(在原有内核配置的基础上进行修改)$make config(基于文本的配置方式)$make menuconfig(基于文本菜单的配置方式)$make xconfig(基于图形窗口模式的配置方式)make xconfig
14、的交互界面最好,其次是 make menuconfig。在进行选项选择时,有三种选择,它们分别代表的含义如下:Y 为将该功能编译进内核;N 为不将该功能编译进内核;M 为将该功能编译成可以在需要时动态插入到内核中的模块。使用配置工具进行配置时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同需要选择。选择的原则是不需要的功能就不要;与内核核心部分紧密且经常使用的部分功能代码直接编译到内核中;与内核核心部分关系较远且不经常使用的功能代码编译成为可加载模块,以减小内核的长度,减小内核消耗的内存。下面以用Linux2.4 配置 PDA(Personal Digital Assistant)的内
15、核为例简述配置要点。PDA 通常采用存储卡作为外部存储介质。在无线传输方面,大多数 PDA 具有红外和蓝牙接口,具备 Wi-Fi 连接以及 GPS 全球卫星定位系统。因此 PDA 系统要求系统稳定,内核小而且效率高,常常需要一些特殊的硬件支持及网络的支持。另外,PDA 系统对进程调度、文件系统要求单一,有些就是单进程系统。因此PDA 内核配置的要点是:1)配置网络(Networking)58May.2010 中 国 民 航 飞 行 学 院 学 报 Vol.21No.3 Journal of Civil Aviation Flight University of China 59 YNetwor
16、king support(PDA 支持上网更新功能)Networking options:YPacket socket (这 种 Socket 可 以 让 应 用 程 序,比 如tcpdump,iptables 直接与网络设备,如网卡通讯,而不通过内核中的其它中介协议)YTCP/IP networking (支持 TCP/IP 协议)YBluetooth subsystem support (支持蓝牙)Y Generic IEEE 802.11 Networking Stack (通用无线局域网(IEEE 802.11 系列协议)支持)2)配置可执行文件格式(Executable file f
17、ormats)YKernel support for ELF binaries YCompile as ELF if your GCC is ELF-GCC(这两个设置使系统的执行文件都为 ELF)3)配置电源管理选项(Power management op-tions)YAdvanced Power Manager Bios support (高级电源管理 BIOS 支持)4)配置设备驱动程序(Device Drivers)Block devices(根据需要加入对硬件特殊的支持模块)5)配置文件系统(FileSystem)YSecond extended fs support(标准的Lin
18、ux文件系统)4.编译内核 内核配置完成后就会在当前目录下产生一个.config的配置文件,执行如下命令实现内核的编译:$make clean$make dep$make modules$make zImage 或“make bzImage”第一个命令“make clean”完成删除前面步骤留下的文件,以避免出现一些错误;第二命令“make dep”通过读取上一步配置过程生成的配置文件,创建对应于配置的依赖关系树,从而决定哪些需要编译而哪些不需要;第三命令“make modules”编译在配置时选择为模块的,即选项前为M的模块;第四命令“make zImage”或“make bzImage”实
19、现完全编译内核。如果生成的内核映像小(1M 以下)就用 make zImage 命令,如果生成的内核映像大(1M 以上)就用 make bzImage 命令。5.安装新内核 内核映像分为压缩的内核映像和未压缩的内核映像,压缩的内核映像通常名为 zImage,位于archarmboot 目录中。而未压缩的内核映像通常名为 vmlinux,位于源码树的根目录中。通过RS-232 连接线或以太网、USB 把内核映像从主机平 台 传 到 目 标 平 台,然 后 通 过 目 标 板 上 的BootLoader(引导程序)完成内核安装。结束语 Linux可以支持广泛的计算机硬件,包括X86、Alpha、Sparc、MIPS、PPC、ARM、NEC、MOTOROLA等现有的大部分芯片。Linux的程序源码全部公开,是开放源代码的,任何人都可以根据自己的需要裁剪内核,以适应自己的系统。参考文献 1 魏洪兴,谌卫军,康一梅,陈友东嵌入式系统设计师教程M.北京:清华大学出版社,2006 2 郭荣佐,王霖.嵌入式系统原理M.北京:北京航空航天大学出版社,2008 3 石秀民,魏红兴.嵌入式系统原理与应用M.北京:北京航空航天大学出版社,2007 4 李庆诚,刘嘉欣,张金嵌入式系统原理M.北京:北京航空航天大学出版社,2007
限制150内