61阅读

嵌入式linux内核裁剪-一种面向应用的嵌入式Linux内核混合裁剪方法 000083

发布时间:2017-10-13 所属栏目:linux工作室

一 : 一种面向应用的嵌入式Linux内核混合裁剪方法 000083

61阅读/ www.61k.net

一种面向应用的嵌入式Linux内核混合裁剪方法

霍华,崔欢欢

(河南科技大学电子信息工程学院,河南洛阳471003)

*

摘 要:为满足具体应用需求,针对目前已有嵌入式Linux内核裁剪方法中存在不同程度的粒度偏大问题,提出了一种新的嵌入式Linux内核裁剪方法,即面向应用的混合裁剪方法。对RFID手持读写器应用过程中使用到的嵌入式Linux内核进行裁剪,实验表明混合的裁剪方法在裁剪率上有一定程度的提高,具有一定的研究和应用价值。

关键词:内核裁剪;嵌入式Linux;面向应用;手持读写器;裁剪率 中图法分类号: TP316.89 文献标识码: A

A kind of application-oriented embedded Linux kernel mixed tailoring

methods

Huo Hua, Cui Huan-huan

(Electronic Information Engineering College, Uni. of Sci. & Tech. Henan, Luoyang 471003)

Abstract: To meet specific application requirements, and in view of the present method for the embedded Linux tailoring have the varying degree problem of granularity is too large, a new tailoring method for embedded Linux kernel is proposed, that is application-oriented mixed tailoring method. The embedded Linux kernel which uses for the handheld RFID reader in application process is tailored. The experiment indicated that the mixed tailoring method has the certain extent enhancement in tailoring rate, it has certain research and the application value. Key words: Kernel tailoring; Embedded Linux; Application-oriented; Handheld reader; Tailoring rate

0 引言

近年来,Linux以其源码开放、性能稳定、可

裁剪等优势成为嵌入式操作系统的首选。可作为一种通用的操作系统,Linux应用于资源受限的、针对具体应用而设计的专用系统——嵌入式系统之前,需对内核中不同的功能模块进行裁剪,根据软硬件的实际情况定制Linux内核[1][2]。

Linux的模块化设计、源代码公开和Linux内核重编译功能使得Linux内核具有可裁剪性,可庞大的内核源代码结构使得分析和裁剪内核有一定的难度[3]。目前对于Linux内核的裁剪常用的方法有[4][5]:配置裁剪方法、基于代码分析的裁剪方法和基于调用图的裁剪方法。

1.2 基于代码分析的裁剪方法

通过对内核源代码的分析,使用条件编译或修改源码、直接删除冗余代码(文件、实现函数、相关数据结构等)的方法实现Linux内核源代码级的裁剪。优点是可以得到比配置更小粒度的内核,缺点是:内核中过多条件编译语句的使用损害了源代码的可读性和可维护性,并导致了调试和测试的复杂性,降低了裁剪率;内核源码的复杂性和软件的不可见性,使对内核及各子模块结构间的关系的分析变得困难,增加了裁剪的难度。 1.3 基于调用图的裁剪方法

通过分析库函数、系统调用和内核函数的调用关系,建立基于函数间调用关系的调用图,删除内核中未调用到的函数。它是目前最常用的裁剪方法,裁剪率有所提升,可以得到比前两种裁剪方法更小体积的内核,但裁剪粒度还有提升的空间。

构建调用图的思路为:定义有向图C=(E,P),其中E表示图中所有结点的集合,每个结点代表程序的一个函数调用;P表示函数之间调用关系的集合,即P={(p1,p2)|p1,p2∈E且p1调用p2一次

1 已有裁剪方法分析

1.1 配置裁剪方法

根据Linux本身所提供的配置工具(make menuconfig)裁剪配置内核,并将信息保存在.config和include/linux/autoconf.h文件中供内核编译使用。优点是简单,缺点是裁剪的最小单元为整个功能模块粒度过大,而且缺少与应用程序具体需求的结

合,造成目标代码中存在一定量的冗余代码。 以上}。

基金项目:国家自然科学基金资助项目(60743008),河南省科技攻关计划项目(072102210010)。

作者简介:霍华(1968-),男,河南兰考人,副教授,博士后,研究方向为智能信息处理、光纤通道技术、嵌入式系统等。崔欢欢(1985-),女,河南洛阳人,硕士,研究方向为嵌入式系统。

下面用一段简化的应用程序代码来说明: Main(){a();b();c()} a(){…} b(){e();} c(){e();} d(){f();} e(){…} f(){…}

得到调用图如图1:

元(主存储器SDRAM+辅助存储器Nand Flash)用于存储数据;LCD和键盘作为人机交互工作的接口;RFID读写模块用于收发射频信息; JTAG调试模块和用于通讯的串口和以太网接口。

图2 RFID手持读写器硬件结构

2.3 软件系统分析

图3对RFID手持读写器的软件系统进行了层次性的描述,其中软件层中列出了组成Linux内核的五个部分:进程管理(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC)

图1 简单应用程序调用图

定义S(main)={R∣R∈E从顶点main()到顶点R存在一条路径},显然S(main) ∈E。因此,如果存在一个函数Q不属于S(main),那么Q就是此应用程序不需要的函数,应该将此函数从该程序中删除。从图1可以看出,d()和f()是可以删除的函数。

2 RFID手持读写器的应用

2.1 RFID手持读写器简介

RFID[6][7](Radio Frequency Identification) 是90年代兴起的一种非接触式的自动无线识别和数据获取技术。一个最基本的RFID系统由标签(Tag)、读写模块(Reader)和天线(Antenna)组成,其中标签由耦合元件及芯片组成,内置天线用于和射频天线进行通信;读写模块通常通过串口与上位机相连,作为RFID系统的核心部分,RFID读写器具有的很重要的技术意义和市场前景。而设计开发一款既具有专用性又具有通用性的RFID手持读写器是当今的难题。这里针对这个问题将RFID技术和嵌入式技术相结合,使用ARM公司专为手持设备及其应用而设计的S3C2410芯片,在对Linux内核源代码分析的基础上,根据需求裁剪定制内核,剔除不需要的服务功能、文件系统和设备驱动,得到适用于RFID手持读写器的内核映像。 2.2 硬件结构分析

图2描述了RFID手持读写器的相关硬件模块:

图3 RFID手持读写器软件系统

3 面向应用的裁剪

3.1可裁剪项分析

嵌入式Linux的裁剪是指在开放源码、性能稳定的Linux源代码的基础上,根据特定应用和硬件平台(x86,ARM等),适当的优化删减代码的过程。裁剪后的代码符合嵌入式应用的要求:应用功能有所减少,规模更为精简,体系结构更为紧凑,可配置性有所提高。

通过对Linux内核源码及组成内核的五个部1)系统多余的进程。Linux内核中的一些模块分的分析,得到内核模块中可以裁剪的部分[8-10]: 对于嵌入式系统并不适用,可以剔除内核对这些进程的创建和调度机制,如:虚存管理模块,同时删除与此相关的进程。 2

主控制器是三星公司的嵌入式ARM芯片S3C2410,其内部有4K SRAM用于Nand Flash启动;存储器单

2)平台无关代码和多余硬件相关代码。根据

使用Nand Flash闪存芯片来存储应用程序、数据信息等,这里使用Cramfs+Yaffs2联合作为嵌入式文件系统。其中内核空间使用高压缩、只读的Cramfs作为根文件系统,用于节省存储空间和保护根文件系统;用户空间使用可读写的Yaffs2文件系统,作为系统启动、普通文件被挂载后数据的存储。Yaffs文件系统专为Nand Flash而设计,Yaffs2在读/写/删除/垃圾回收操作及内存消耗上都优于Yaffs。

裁剪流程图如图4所示:

硬件平台裁剪掉内核arch目录下与该平台无关的处理器支持代码;另外,Linux内核支持很多硬件及其周边设备,如硬盘、鼠标等,并不是所有嵌入式系统都需要,可以根据实际情况删除那些无用的硬件驱动程序的相关代码。

3)异常处理函数。Linux内核提供的一些异常处理函数是嵌入式系统所不需要的,如:debug、 divide_error、nmi、overflow、bounds等,可以根据具体情况删除不需要的函数代码。

4)内存管理。Linux的内存管理采用的是基到系统的可确定性和响应时间,在嵌入式系统中并不适用可以剔除。

5)文件系统。Linux内核支持ext2、vfat、jffs、yaffs等多种文件系统,可嵌入式系统一般只需要里面的几种,可以裁剪掉不需要的文件系统来节省存储空间。

6)网络协议栈。嵌入式系统可根据需求定制网络协议栈,如TCP/IP协议栈,而剔除系统中无需支持的网络协议。 3.2 混合裁剪方法

根据上面对已有裁剪方法的分析,这里借助以上三种裁剪方法的思想,使用一种混合的裁剪方小粒度的内核。

此混合裁剪方法的思路为:将裁剪分两步进行,第一步将配置裁剪方法和基于代码分析的裁剪方法相结合,第二步将基于调用图的裁剪方法和基于代码分析的裁剪方法相结合。

根据上面分析的嵌入式Linux内核的可裁剪项,下面以文件系统的裁剪为例对混合的裁剪方法的两步裁剪思路,进行详细的介绍。 3.3 文件系统的裁剪 3.3.1 文件系统的概述

Linux系统中文件系统用来组织文件和设备,文件系统的存在使得数据和设备得到有效而透明的存取访问,Linux程序、库、系统文件和用户文件都在其里面包含,它构成了Linux系统上所有数据的基础,是Linux系统中庞大复杂而又最为基本和重要的资源。

文件系统的裁剪是嵌入式Linux裁剪中最重要的部分,需要进行简化数据结构、优化系统调用等工作。手持读写器硬件结构分析中,

3.3.2 第一步裁剪

图4 文件系统裁剪流程图

先用配置裁剪方法,在文件系统选项中保留对

需要文件系统的支持。再用基于代码分析的裁剪方法,使用直接删除、修改源码的思想,删除fs目录下其它文件系统的子目录,并在相应数据结构中删除其类型支持、修改相应系统调用。 3.3.3 第二步裁剪

系统调用是连接用户程序和内核的接口,Linux内核中与文件系统相关的有70多个。对其裁剪不仅要考虑其是否需要还要考虑此系统功能上下文间的调用关系,所以保留最基本的系统调用,对其它可以裁剪的系统调用使用基于调用图的裁剪方法。

必须保留的文件系统调用:对文件 (关闭、创建、打开、读写)、对目录 (创建、删除、改变)和对文件系统 (安装、卸载、创建节点、删除链接) 等的基本操作。

采用自上而下的思想,分析可能需要的文件系统调用。从应用程序到库函数再到系统功能调用,分析每个系统调用函数间的关系,找出可移除的系统调用和子函数。图5以文件读写系统的调用关系为例,介绍了基于调用图的裁剪方法:

3

库函数系统调用子函数

net/net.o

328704 9526 400384

145408 7084 301568

55.8% 25.6% 24.7%

lib/lib.a zImage

5 结束语

通过对已有裁剪方法优缺点的分析,本文提出一种面向应用的混合裁剪方法,并以面向RFID

手持读写器的具体应用为例,对嵌入式Linux内核

“量体裁衣”,得出可裁剪项,以文件系统的裁剪为例,详细介绍混合裁剪方法的裁剪思路。并就裁剪结果与配置裁剪方法进行了对比,实验结果表明此裁剪方法有着更小粒度、更高精度的裁剪度,得到了更小体积的内核映像。

图5 文件读写系统调用关系图

从上图得出,因为嵌入式系统中不需要支持文件多块数据的传输,所以在库函数中可以删除函数readv和writev,及对应的系统调用sys_readv、sys_writev和仅支持此两个系统调用的子函数do_read_write,而也被其它系统调用调用的函数fget和fput不能删除。

找出可能需要的系统调用后,可利用基于代

参考文献

[1]

严义, 左鼎. 基于关系矩阵的嵌入式组件裁剪方法[J] .计算机工程与应用, 2009, 45(24) : 77-79. [2]

Karim Yaghmour. Building embedded linux system[M]. New York: O'Reilly, 2008. [3]

顾咏枫, 陈章龙. 嵌入式Linux裁剪方法[J]. 小型微型计算机系统, 2003, 24 (9) : 1697-1770. [4]

成月良, 方寿海. 面向应用的嵌入式Linux裁剪方法研究与实现[J]. 计算机工程与设计, 2009, 30(11) : 2684-2686. [5]

张云蓉, 王培东. 基于调用图的嵌入式Linux裁剪技术研究[J]. 哈尔滨理工大学学报, 2004, 9(2) : 60-62. [6]

魏登峰, 田华. 基于ARM的嵌入式RFID读写器设计[J]. 微计算机信息, 2009, 25(14): 190-191. [7]

胡伟. 基于S3C44BOX的RFID以太网读卡器设计[J] .计算机工程与应用, 2009, 45(8) : 68-71. [8]

俞勤丰, 孙 涌. μC/OS-Ⅱ中内存管理方法的分析及改进[J]. 计算机工程, 2009, 35(11). 280-282. [9]

雷必成. 嵌入式系统中TCP/IP协议的精简与实现[J]. 微计算机信息. 2006, 22(17). 107-109.

码分析的裁剪方法,使用条件编译语句对这些系统调用的相关代码进行修改。如在内核代码中的系统调用及相关函数代码、unistd.h中的系统调用编号和call.S中的系统调用表中添加条件编译#ifdef(CONFIG_XXX_SYS_CALL)和#endif。

4 内核裁剪结果的分析

根据软硬件分析实现了RFID手持读写器嵌入式Linux内核的定制,对可裁剪项使用一种混合的裁剪方法进行裁剪,并就裁剪结果与配置裁剪的方法进行了对比,两种情况下裁剪率对比如表1所示。本文方法与配置裁剪方法相比,无论在内核整体还是内存管理、文件系统、网络等方面,裁剪率均有一定程度的提高。得到294.5k的内核映像,比配置裁剪方法减少了24.7%,比原始映像减少了38.6%,得到了一个更细粒度的内核。

表1 内核裁剪度结果分析

Linux内核

配置裁剪方法

arch/arm/kernel/kernel.o

init/main.o kernel/kernel.o mm/mm.o fs/fs.o

40278 8909 65536 83968 185344

混合裁剪方法 31744 7066 50176 68053 123193

裁剪率 21.2% 20.7% 23.4% 18.9% 33.5%

[10] 何克右, 周彩贞. 基于uClinux的文件系统裁剪技术的

研究与实现[J]. 武汉理工大学学报, 2008, 32(4) : 641-644.

4

二 : 在menuconfig中配置Linux内核裁剪的具体步骤

在menuconfig中配置Linux内核裁剪的具体步骤

在menUConfig中配置,可以对进行Linux内核配置选项及删改。[www.61k.com]本文介绍详细配置方法。 第一部分:全部删除

Code maturity level options ---> 代码成熟等级选项

[ ]Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.不选。

第二部分 :除以下选项,其它全部删除

General setup—〉

System V IPC (IPC:Inter Process Communication)是组系统调用及函数库,它能让程序彼此间同步进行交换信息。某些程序以及DOS模拟环境都需要它。为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。

第三部分:除以下选项,其它全部删除

Loadable module support ---> 可引导模块支持 建议作为模块加入内核

[ ] Enable loadable module support 这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了,否在无法启动系统。

[ ]Automatic kernel module loading 一般情况下,如果我们的内核在某些任务中要使用一些被编译为模块的驱动或特性时,我们要先使用modprobe命令来加载它,内核才能使用。不过,如果你选择了这个选项,在内核需要一些模块时它可以自动调用modprobe命令来加载需要的模块,这是个很棒的特性,当然要选Y喽。

第四部分:全部删除

Block layer-----〉块设备

第五部分:除以下选项,其它全部删除

Processor type and features ---> 处理器类型

Subarchitecture Type (PC-compatible) ---> 这选项的主要的目的,是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构(pc/at)。这个选项可以让你选择一些其它架构。我们一般选择PC-compatible就可以了。

Processor family(386) : 它会对每种CPU做最佳化,让它跑的好又快,一般来说,你是什么型号的就选什么型号的就好。我选的是386,这样内核会省下不少空间

第六部分:除以下选项,其它全部删除

Power management options (ACPI, APM) ---> 电源管理选项

[ ] Power Management Debug Support 电源管理的调试信息支持,如果不是要调试内核有关电源管理部份,请不要选择这项。

ACPI Support ---〉高级电源接口配置支持,如果BIOS支持,建议选上这项

[ ]Button 这个选项用于注册基于电源按钮的事件,比如power, sleep等,当你按下按钮时事件将发生,一个守护程序将读取/proc/acpi/event,并执行用户在这些事件上定义的动作比如让系统关机。可以不选择,根据自己的需求。

第七部分:除以下选项,其它全部删除

menuconfig 在menuconfig中配置Linux内核裁剪的具体步骤

Bus options (PCI, PCMCIA, EISA, MCA, ISA) ---> 总线选项

[ ]PCI support

PCI Access mode (Any) ---> PCI外围设备配置,强列建议选Any,系统将优先使用MMConfig,然后使用BIOS,最后使用Direct检测PCI设备。(www.61k.com)

第八部分:除以下选项,其它全部删除

Executable file formats --->

Kernel support for ELF binaries ELF是开放平台下最常用的二进制文件,它支持不同的硬件平台。一定要选。

<>

第九部分:除以下选项,其它全部删除

Networking

Networking options --->

[ ]Unix domain sockets

[ ]TCP/IP networking

第十部分:除以下选项,其它全部删除

Device Drivers --->设备驱动

Block devices-------〉

[ ]Compaq SMART2 support

[ ] Compaq Smart Array 5xxx support

[ ]Loopback device support 大部分的人这一个选项都选N,因为没有必要。但是如果你要mount iso文件的话,你得选上Y。这个选项的意思是说,可以将一个文件挂成一个文件系统。如果要烧光盘片的,那么您很有可能在把一个文件烧进去之前,看看这个文件是否符合IS09660的文件系统的内容,是否符合您的需求。而且,可以对这个文件系统加以保护。不过,如果您想做到这点的话,您必须有最新的mount程序,版本是在2.5X版以上的。而且如果您希望对这个文件系统加上保护,则您必须有des.1.tar.gz 这个程序。注意:此处与网络无关。建议编译成模块

[ ] RAM disk support

SCSI device support ---> 里面有关于USB支持的,要选择

[ ]SCSI device support USB要用,必须选择

[ ]legacy /proc/scsi/ support USB要用,必须选择

[ ]SCSI disk support USB要用,必须选择

SCSI Low-level drivers

[ ]Serial ATA(SATA) support

[ ]Intel PIIX/ICH SATA support 这个必须选择,否则无法产生引导文件

[ ]Via SATA support

Networking device support ---> 这个下面是选网卡驱动,一定要选

我的电脑是千兆网卡所以就选这个? Ethernet(1000mbit)-

[ ]broadcom Tigon3support

Input device support ---> 这个里面要设置你的鼠标键盘什么的

[ ]Provide legacy /dev/psaux device

Graphics support --->

[ ]Support for frame buffer devices 支持Frame buffer的,一定要选择

USB support --->

[ ]USB device filesystem 这个好象是用U盘必须的

menuconfig 在menuconfig中配置Linux内核裁剪的具体步骤

[ ]EHCI HCD (USB 2.0) support 有usb2.0就选上把,编译成模块

[ ]OHCI HCD support 必须选择,编译成模块

[ ]UHCI HCD (most Intel and VIA) support 必须选择,编译成模块

[ ]USB Mass Storage support 用U盘必须选择

USB Human Interface Device (full HID) support 里面选择usb鼠标和usb键盘,如果你有一定选上这个必需选

HID input layer support 应该选择

/dev/hiddev raw HID device support如果这里有USB键盘和鼠标选项,一定要选择 第十一部分:除以下选项,其它全部删除

file systems --->文件系统

Second extended fs support

Ext2 extended attributes

Ext2 POSIX Access Control Lists

Ext2 Security Labels

Ext3 journalling file system support

Ext3 extended attributes

Ext3 POSIX Access Control Lists

Ext3 Security Labels 以上这些肯定是要选择的,linux的标准文件系统

Kernel automounter support 内核自动挂载的,当然要选

Kernel automounter version 4 support (also supports v3) 当然要选

DOS/FAT/NT Filesystems --->

DOS FAT fs support

MSDOS fs support

VFAT (Windows-95) fs support

NTFS file system support

语言支持,这里就支持英语和汉语就行了,不多说了? Native language support <>

[ ]NLS ISO 8859-1 必须选择,这个是关于U盘挂载的。(www.61k.com)

CD-ROM/DVD Filesystems ---> 这个是关于挂载ISO文件的,用的话就选。 ISO 9660 CDROM file system support

第十二部分: 全部删除

Instrumentation support

第十三部分:全部删除

Kernel hacking --->破解核心?可不是当骸客啦,不选

第十四部分:全部删除

Security options --->

第十五部分:全部删除

Cryptographic options --->这是核心支持加密的选项

第十六部分:全部删除

Library routines --->

附:内核配置

内核配置的方法很多,make config、make xconfig、make menuconfig、make oldconfig等等,它们的功能都是一样的,区别应该从名字上就能看出来,只有make oldconfig是指用系统当前的设置(./.config)作为缺省值。这里用的是make menuconfig。

menuconfig 在menuconfig中配置Linux内核裁剪的具体步骤

需要牢记:不必要的驱动越多,内核就越大,不仅运行速度慢、占用内存多,在少数情况下、还会引发其他问题。(www.61k.com)具体步骤如下:

首先确定shell是bash。

然后

$make menuconfig

有一些默认的符号其含义如下:

y:加载

n:不加载

m:作为模块加载

可以配置的选项有以下一些:

1)code maturity level option 代码成熟度

prompt for development and/or incomplete code/drivers [N/y/?]

如果有兴趣测试一下内核中尚未最终完成的某些模块,就选y,否则选N,想知道更详细的信息选?会看到联机帮助(以下?的含义相同),N大写表示缺省值。

2)processor type and features 处理器类型及特性

Processor family(386,486/Cx486,586/K5/5x86/6x86,Pentium/K6/TSC, PPro/6x86MX)

[PPro/6x86MX]

[ ]内的是缺省值,我们可以根据前面介绍的uname 命令执行的结果选择。此项如果高于386,那么生成的内核在386机器上将不能启动。

Math emulation(CONFIG_MATH_EMULATION)[N/y/?]

需要进行协处理器模拟吗?一般的机器都回n。如果机器已经有硬件的协处理器,那么内核仍将使用硬件,而忽略软件的math-emulation,这将使内核变大变慢。

MTRR(Memory Type Range Register)support(CONFIG_MTRR)[N/y/?]

在Pentium、Pro/Pentium II类的系统中可以提高图像写入速度。

Symmetric multi-processing support(CONFIG_SMP)[Y/n/?]

如果您的机器有多个处理器,就选y。此时要选中下面的Enhanced Real Time Clock Support

3)loadable model support 可加载模块支持

Enable loadable module support(CONFIG_MODULES)[Y/n/?]

最好选y,不然许多仅供动态加载的模块就不能用了。

Set version information on all symbols for modules(CONFIG_MODVERSIONS)[N/y/?] 选N

Kernel module loader(CONFIG_KMOD)[N/y/?]

4)general setup 一般设置

Networking support(CONFIG_NET)[Y/n/?]

选y吧,现在还有几台计算机不用上网呢?

PCI support (CONFIG_PCI)[Y/n/?]

PCI 总线和设备总该有吧。

PCI access mode(BIOS,Direct,Any)[Any]

缺省值比较保险,但如果您对您的主板很有信心,就选BIOS。

PCI quirks (CONFIG_PCI_QUIRKS)[Y/n/?]

用于修补BIOS中对PCI有影响的BUG,同样,如果您对主板很有信心,就选n。 Backward-compatible /proc/pci〉(CONFIG_PCI_OLD_PROC)[Y/n/?]

<>

menuconfig 在menuconfig中配置Linux内核裁剪的具体步骤

以前的内核使用/proc/pci,新版内核使用/proc/bus/pci,要保持兼容性就选y。(www.61k.com]

MCA support(CONFIG_MCA)[N/y/?]

查看帮助吧。

SGI Visual Workstation support(CONFIG_VISWS)[N/y/?]

您的机器是SGI的吗?是就选y。

System V IPC(CONFIG_SYSVIPC)[Y/n/?]

进程间通信函数和系统调用。Linux内核的五大组成部分之一,一定要选。 BSD Process Accounting(CONFIG_BSD_PROCESS_ACCT)[N/y/?]

用于启动由内核将进程信息写入文件的用户级系统调用。就看您想不想用它了。 Sysctl support(CONFIG_SYSCTL)[Y/n/?]

在内核正在运行的时候修改内核。用8KB空间换取某种方便。别选吧,除非你真的想试试。

Kernel support for a.out binaries(CONFIG_BINFMT_AOUT)[Y/m/n/?]

为了能使用以前编译的程序,选y。

Kernel support for ELF binaries(CONFIG_BINFMT_ELF)[Y/m/n/?]

为了能使用现在编译的程序,选y。

Kernel support for MISC binaries(CONFIG_BINFMT_MISC)[Y/m/n/?]

一般选y,用于支持Java等代码的自动执行。

Parallel port support(CONFIG_PARPORT)[N/y/m/?]

并口设备,如打印机。

5)plug and play support 即插即用设备支持

Plug and Play support (CONFIG_PNP)[N/y/?]

选y吧。

6)block devices 块设备

Normal PC floppy disk support(CONFIG_BLK_DEV_FD)[Y/m/n/?]

一般的软驱。选y。

Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support(CONFIG_BLK_DEV_IDE)

[Y/m/n/?]

这几种接口的硬盘、光驱、磁带、软驱。选y。

Include IDE/ATAPI CDROM support(CONFIG_BLK_DEV_IDECD)[Y/m/n/?]

CDROM。选y。

7)networking options 网络选项

Packet socket (CONFIG_PACHET)[Y/m/n/?]

按照目前网络发展的状况,选y比较好。当然也可以选其它的。

Kernel/User netlink socke(CONFIG_NETLINK)[N/y/?]

内核与用户进程双向通信。选y。

Network firewalls(CONFIG_FIREWALL)[N/Y/?]

如果真的需要用防火墙,就选y。

UNIX domain sockets(confgi_unix)[Y/m/n/?]

socket 的用处太多了。选y。

TCP/IP networking(CONFIG_INET)[Y/n/?]

选y,理由如上一条。

The IPX protocol (CONFIG_IPX)[N/y/m/?]

其实并没有那么多人真的需要使用或者学习IPX,所以一般选N。

menuconfig 在menuconfig中配置Linux内核裁剪的具体步骤

Appletalk DDP(CONFIG_ATALK)[N/y/m/?]

选N,理由同上。[www.61k.com)

8)SCSI support SCSI支持,SCSI low-level drives SCSI低级驱动

根据系统中SCSI设备的实际情况选择。

9)Networking device support 网络设备支持

如果用LAN上网,就选择网卡;

如果用MODEM拨号上网,就要看ISP提供那种服务了,一般都是PPP。

10)Amateur Radio support 业余收音机支持

这是什么我不太清楚,所以选N。

11)ISDN subsystem ISDN子系统

好像已经有支持ISDN的MODEM了,所以最好先看看自己的MODEM是不是这种,再做选择。

12)Old CD-ROM dfivers (not SCSI, not IDE) 老式光驱驱动

一般选N,因为这种设备实在很少见。

13)Character devices 字符设备

Virtual terminal(CONFIG_VT)[Y/n/?]

Linux上一般可以用Alt+F1/F2/F3/F4来切换不同的任务终端,即使在一台计算机上也可以充分使用Linux的多任务能力,一些需要以命令行方式安装合适用的软件如果有虚拟终端的支持就会更方便,因此选y。

<>

Support for console on virtual terminal(CONFIG_VT_CONSOLE)[Y/n/?]

选y将支持一个虚拟终端作为控制台。一般为Alt+F1。

Support for console on serial port(CONFIG_SERIAL)[Y/m/n/?]

除非真的需要一个串口控制台,否则选n。

Extended dumb serial driver options(CONFIG_SERIAL_EXTENDED)[N/y/?] 如果希望使用"dumb"的非标准特性(如HUB6支持),选y,一般选N。

Non-standard serial port support(CONFIG_SERIAL_NONSTANDARD)[N/y/?] 非标准串口。一般选N。

UNIX98 PTY support(CONFIG_UNIX98_PTYS)[Y/n/?]

PTY指伪终端,一般用户就选n。但如果想用telnet或者xterms作为终端访问主机,并且已经安装了glibc2.1,就可以选y。

Maximum number of UNIX98 PTYs in use(0-2048)(CONFIG_UNIX98_PTY_COUNT)

[256]

缺省值就可以了。

Mouse Support(not serial mice)(CONFIG_MOUSE)[Y/n/?]

PS/2等非串口鼠标选y,否则选N。

14)Mice 鼠标

根据自己的鼠标类型选择。

15)Video for Linux Linux视频

根据系统中的音/视频捕捉设备选择。

16)Joystick support 操纵杆

根据系统中的游戏杆设备选择

17)Ftape,the floopy tape device driver Ftape设备驱动

Ftape (QIC-80/Travan)support(CONFIG_FTAPE)[N/y/m/?]

menuconfig 在menuconfig中配置Linux内核裁剪的具体步骤

如果系统中有磁带机,选y。(www.61k.com)

18)Filesystems 文件系统

文件系统的选择要比较仔细,因为其中的一些给某些系统功能提供支持。而且除了proc、ext2等文件系统之外,其它的文件系统(包括下面的网络文件系统)都可以选择为m方式,从而减小内核启动时的体积。

Quota support(CONFIG_QUOTA)[N/y/?]

用于给用户划分定量的磁盘空间。如不用此功能就选N。

DOS FAT fs support(CONFIG_FAT_FS)[N/y/m/?]

为内核提供FAT支持,多数用户有可能从Linux访问同一系统中的WINDOWS硬盘空间,因此最好选y。

ISO 9660 CDROM filesystem support(CONFIG_ISO9660_FS)[Y/m/n/?]

有标准光驱的系统应该选Y。

Minix fs support(CONFIG_MINIX_FS)[N/y/m/?]

用于创建启动盘的文件系统,多数应该选y或者m。

/proc filesystem support(CONFIG_PROC_FS)[Y/n/?]

虚拟文件系统,必须选Y。

Second extended fs support(CONFIG_EXT2_FS)[Y/m/n/?]

Linux标准文件系统,都应该选Y。

19)Network file systems 网络文件系统

Coda filesystem support (advanced network fs)(CONFIG_CODA_FS)[N/y/m/?] 先看帮助再选。

NFS filesystem support(CONFIG_NFS_FS)[Y/m/n/?]

选Y或n,能够访问远程NFS文件系统。

SMB filesystem support(to mount WfW shares etc.)(CONFIG_SMB_FS)[N/y/m/?] 要访问WINDOWS系统中的共享资源选y。

NCP filesystem support(to mout NetWare volumes)(CONFIG_NCP_FS)[N/y/m/?] 如果真的需要访问NetWare文件系统,就选y或者m。

20)Partion Types 分区类型

一般用不上;要用请参看帮助。

21)Console drivers 控制台驱动

VGA text console(CONFIG_VGA_CONSOLE)[Y/n/?]

用VGA模式下用文本方式操作Linux,一般选y。

Video mode selection support(CONFIG_VIDEO_SELECT)[N/y/?]

大多数系统都不需要这项功能。

22)Sound 声音

Sound card support(CONFIG_SOUND)[N/y/m/?]

如果系统中安装了声卡,就选y(或者m),然后查看帮助。

23)Kernel hacking 内核监视

kernel hacking往往会生成非常大或者非常慢(甚至又大又慢)的内核,甚至会引起内核工作不稳定。如果一定要选,那么也最好不要选其中的"development"、"eXPerimental"、"debugging

三 : linux2web工作室 | linux内核裁剪、设备驱动、串口、网络

最新博文

arm支持java swt库

发表于 30 十一月 2014 under linux其他应用

我的硬件平台:ti am335x swt的源码和binary在这里:http://archive.eclips […]

admin读全文暂无评论arm ubuntu 12.04 安装lxde

发表于 27 十一月 2014 under linux内核驱动开发. Tags: am335x

1.首先关闭ubuntu默认的桌面管理器lightdm: 修改文件:/etc/init/lightdm.con […]

admin读全文暂无评论ubuntu sources.list文件格式分析

发表于 25 十一月 2014 under linux其他应用. Tags: apt-get, sources.list, ubuntu

sources.list文件的格式为: <type of repository> <loca […]

admin读全文暂无评论linux下常用解压命令

发表于 21 十一月 2014 under linux其他应用. Tags: deb, gpio, rpm

1.以.a为扩展名的文件: #tar xv file.a 2.以.z为扩展名的文件: #unco […]

admin读全文暂无评论XWindows, xlib, xorg, kde, gt, gnome, gtk区别和联系

发表于 21 十一月 2014 under linux其他应用. Tags: gnome, gtk, kde, qt, X windows, xorg

虽然做了这么多年的linux,但是对于X windos,xlib,xorg,kde和gnome的关系,一直有点 […]

admin读全文暂无评论Android 系统移植问题汇总

发表于 18 十一月 2014 under Android底层开发. Tags: android移植, android解锁, 虚拟菜单

1.ndk导入第三方c库的方法,比如需要导入libts.so,libts.so在/opt/lib目录下,那么可 […]

admin读全文暂无评论android AudioPolicyService启动失败问题解决

发表于 14 十一月 2014 under Android底层开发. Tags: android, audio, AudioPolicyService

android文件系统编译好后,系统启动,在出现Android logo后,无法进入桌面系统,console可 […]

admin读全文暂无评论android jni操作gpio

发表于 12 十一月 2014 under Android底层开发. Tags: android, gpio, jni

开发环境:fedora 15 目标板环境:am335x android 4.2.2 一.在fedora 15下 […]

admin读全文暂无评论嵌入式linux web开发案例

发表于 30 十月 2014 under linux web开发, 项目展示. Tags: appweb, linux web开发

用户需要在arm linux嵌入式系统上运行一套web server,来给最终用户提供一些操作接口,要求是这样 […]

admin读全文暂无评论android 4 移动鼠标ui反应很慢的调试过程(已解决)

发表于 29 十月 2014 under Android底层开发. Tags: am335x, android显示, surfaceflinger

我们的cpu型号:TI Sitara AM3352 使用的android版本:TI_Android_JB_4_ […]

admin读全文暂无评论? Older Entries
本文标题:嵌入式linux内核裁剪-一种面向应用的嵌入式Linux内核混合裁剪方法 000083
本文地址: http://www.61k.com/1077187.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1