Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解
- 格式:pdf
- 大小:1.66 MB
- 文档页数:5
Linux系统的Makefile、Kconfig和模块1Makefile1.1Makefile组织层次Linux的Make体系由如下几部分组成:Ø顶层Makefile顶层Makefile通过读取配置文件,递归编译内核代码树的相关目录,从而产生两个重要的目标文件:vmlinux和模块。
Ø内核相关Makefile位于arch/$(ARCH) 目录下,为顶层Makefile提供与具体硬件体系结构相关的信息。
Ø公共编译规则定义文件。
包括Makefile.build 、Makefile.clean、Makefile.lib、Makefile.host等文件组成。
这些文件位于scripts目录中,定义了编译需要的公共的规则和定义。
Ø内核配置文件 .config通过调用make menuconfig或者make xconfig命令,用户可以选择需要的配置来生成期望的目标文件。
Ø其他Makefile主要为整个Makefile体系提供各自模块的目标文件定义,上层Makefile根据它所定义的目标来完成各自模块的编译。
1.2Makefile的使用在编译内核之前,用户必须首先完成必要的配置。
Linux内核提供了数不胜数的功能,支持众多的硬件体系结构,这就需要用户对将要生成的内核进行裁减。
内核提供了多种不同的工具来简化内核的配置。
make config,字符界面下命令行工具,这个工具会依次遍历内核所有的配置项,要求用户进行逐项的选择配置。
这个工具会耗费用户太多时间,除非万不得以(你的编译主机不支持其他配置工具)一般不建议使用。
make menuconfig,基于ncurse库编制的图形界面工具,一般台式机使用该工具。
make xconfig,基于X11的图形配置工具,一般用于工作站环境。
当用户完成配置后,配置工具会自动生成.config文件,它被保存在内核代码树的根目录下。
make menuconfig/.config/Kconfig解析在对linux进行编译,常用的命令是make menuconfig,使用图形界面来对整个系统进行裁剪。
当然,除了这条指令,还包括很多配置命令,比如make defconfig, make oldconfig和make xconfig等。
这里主要就make menuconfig的执行过程进行解析。
一.准备工作包括(交叉)编译环境的建立,linux源码的下载与解压等。
二.初步介绍跟make menuconfig这个命令相关的文件,包括三类,包括.config,Kconfig,Makefile。
为什么不说三个,而说三类呢?因为Kconfig和Makefile是配合使用的,在很多的子目录都存在,而.config只存在于根目录中。
这三个文件的作用分别是:·Kconfig:定义了配置项·.config:对配置项进行赋值·Makefile:建立配置项的生成法则看到这里,可能有人就头疼了,到底什么是配置项,什么是生成法则。
比如,我编写了mytest.c的文件,这里不关心mytest.c的内容。
如果想把mytest.c编译到内核中,需要按照以下的步骤来完成。
1) 将mytest.c放到任何一个目录中,但前提是这个目录必须包含Kconfig和Makefile 文件,比如源码根目录/arch/arm/目录中。
2) 在这个目录的Kconfig中添加如下内容:config MY_TESTbool “My Test”//表示用的是二态3) 在Makefile中添加如下内容:obj-$(CONFIG_MY_TEST) = mytest.o4) 在.config中可以添加如下内容:CONFIG_MY_TEST=y或者是在执行make menuconfig时,找到显示名为My Test的选项,使用空格选中。
总而言之,就是如果需要向系统内核中添加一个功能,那么首先要在Kconfig文件中定义一个配置项。
LINUX内核配置MAKE MENUCONFIG菜单详解我们在linux内核裁剪过程中,进入内核所在目录,键入 make menuconfig 就会看到一堆的配置菜单,它们具体代表什么含义呢?我们该如何取舍呢?这里把近期收集到的一些信息做一个总结。
1、General setup代码成熟度选项,它又有子项:1.1、prompt for development and/or incomplete code/drivers该选项是对那些还在测试阶段的代码,驱动模块等的支持。
一般应该选这个选项,除非你只是想使用 LINUX 中已经完全稳定的东西。
但这样有时对系统性能影响挺大。
1.2、Cross-compiler tool prefix交叉编译工具前缀,例如:Cross-compiler tool prefix值为: (arm-linux-)1.3、Local version - append to kernel release内核显示的版本信息,填入 64字符以内的字符串,你在这里填上的字符口串可以用uname -a 命令看到。
1.4、Automatically append version information to the version string自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持1.5、Kernel compression mode (Gzip) --->有四个选项,这个选项是说内核镜像要用的压缩模式,回车一下,可以看到gzip,bzip2,lzma,lxo,一般可以按默认的gzip,如果要用bzip2,lzma,lxo要先装上支持1.6、Support for paging of anonymous memory (swap)使用交换分区或交换文件来做为虚拟内存,一定要选上。
1.7、System V IPC表示系统的进程间通信Inter Process Communication,它用于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来,必选。
Linux内核编译menuconfig介绍menuconfigmenuconfig是常用的配制工具,不用特意安装,好像是和GCC 一起装上的。
注:menuconfig要用到ncurses的库,所以要安装它。
下面的命令可以安装。
apt-get install libncurses*选择相应的配置时,有三种选择,它们分别代表的含义如下:“Y”- 将该功能编译进内核“N”- 不将该功能编译进内核“M”- 将该功能编译成可以在需要时动态插入到内核中的模块。
将与核心其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响。
许多功能都可以这样处理,例如像上面提到的网卡的支持、对FAT等文件系统的支持。
make menuconfig,则需要使用空格键进行选取。
你会发现在每一个选项前都有个括号, 但有的是中括号有的是尖括号,还有一种圆括号。
用空格键选择时可以发现,中括号里要么是空,要么是"*",而尖括号里可以是空,"*"和"M"这表示前者对应的项要么不要,要么编译到内核里;后者则多一样选择,可以编译成模块。
而圆括号的内容是要你在所提供的几个选项中选择一项。
中括号:要么是空,要么是"*",代表要么不要,要么编译到内核里。
尖括号:可以是空,"*"和"M",多一样选择,可以编译成模块。
圆括号:所提供的几个选项中选择一项。
menuconfig相关命令:$sudo make menuconfig配置用到的键只有几个,esc退出菜单;空格改变选项状态;光标键上下左右移动,回车选定。
选项意义:M是编译成可以随时加入的模块,*是编译进入内核,空就是不要。
Linux内核中的Kconfig文件本节不对内核的Kconfig文件进行深入展开,更多Kconfig语法和说明请阅读<Documentation/kbuild/kconfig-language.txt>和<Documentation/kbuild/kconfig.txt>。
内核源码树每个目录下都还包含一个Kconfig文件,用于描述所在目录源代码相关的内核配置菜单,各个目录的Kconfig文件构成了一个分布式的内核配置数据库。
通过make menuconfig(make xconfig或者make gconfig)命令配置内核的时候,从Kconfig文件读取菜单,配置完毕保存到文件名为.config的内核配置文件中,供Makefile文件在编译内核时使用。
1.1.1 Kconfig基本语法如程序清单0.1所示代码摘自<drivers/char/Kconfig>文件,是一个比较典型的Kconfig文件片段,包含了Kconfig的基本语法。
程序清单0.1drivers/char/Kconfig片段menu "Character devices"source "drivers/tty/Kconfig"config DEVKMEMbool "/dev/kmem virtual device support"default yhelpSay Y here if you want to support the /dev/kmem device. The/dev/kmem device is rarely used, but can be used for certainkind of kernel debugging operations.When in doubt, say "N".……endmenu1.子菜单通过menu和endmenu来定义一个子菜单,程序清单0.1所示代码定义了一个“Character devices”子菜单,子菜单在界面中用“--->”表示,如图0.1所示。
Make menuconfig是一个用于配置Linux内核的工具,主要用于选择内核的各种配置选项,以定制化地构建适合特定需求的内核。
本文将通过对Make menuconfig的原理进行深入探讨,帮助读者更好地理解和使用该工具。
1. Make menuconfig的概述Make menuconfig是Linux内核源码中提供的一个配置工具,其主要作用是为用户提供一个用户友好的菜单界面,用于选择内核的各种配置选项。
通过Make menuconfig,用户可以定制化地配置内核,包括选择需要编译进内核的驱动程序、文件系统、网络协议等,还可以对内核进行调试和优化。
2. Make menuconfig的使用方法对于使用Linux内核进行开发的用户来说,掌握Make menuconfig的使用方法是非常重要的。
以下是使用Make menuconfig的基本步骤:- 进入内核源码目录:首先需要将Linux内核源码下载到本地,然后通过终端进入内核源码的根目录。
- 启动Make menuconfig:在终端中输入命令“makemenu config”,然后按回车键,即可启动Make menuconfig工具。
- 在菜单界面中进行配置:Make menuconfig启动后,会显示一个菜单界面,用户可以通过方向键和回车键来选择和配置内核的各种选项。
- 保存配置并退出:配置完成后,可以选择“保存并退出”选项,然后按照提示进行保存,即可退出Make menuconfig工具。
3. Make menuconfig的原理Make menuconfig的实现原理涉及到Linux内核的配置系统和Kconfig工具链。
Kconfig是Linux内核中的一套配置系统,用于管理内核各项配置选项,Make menuconfig就是基于Kconfig系统实现的。
Make menuconfig的菜单界面是通过Kconfig系统生成的,Kconfig 系统会解析内核源码树中的Kconfig文件,根据其中的配置选项和依赖关系,生成相应的菜单界面。
现在流行的ODL(only disk linux)中做内核部分,那些文章不介绍此点内容。
我正在做,完工后整理资料。
BY THE WAY ,想成为LINUX高手吗?你需要熟练掌握KERNEL COMPILE 、XCONFIGRATER 、LINUXCONFIG、SAMBA四大利器,你随时可以找到后三者的大量相关资料,但内核编译就只好啃为数不多的英文了。
笔者耗时3月,搜集并整理大量资料,在儿童节前连续工作18个小时后,给小企鹅送了这份礼物。
笔者自信是目前为止KERNEL编译方面最完备的中文资料(将不断翻译补充),这可是毕业论文哪!为什么要放网上呢?首先找这方面资料太难了,文章对各位LINUX爱好者会有所帮助。
其次,取之于网用之于网。
欢迎使用这篇文章,请随便引用,这才符合LINUX自由软件的精神嘛,不过别忘了提提我的名字,就算为我的辛苦付了点稿酬。
介于内核方面资料较少,欢迎在这篇文章中添加和修改内容,但不要过多删除,笔者列表要加入你的名字,让我们为把它变成数百页的资料而努力。
OK,交个朋友吧,我是玉玉安,email :ziboyuyuan@ <ZIBOyuyuan@>目录序言第一章内核编译的基础第一节内核简介第二节内核版本第三节编译原因第四节准备工作第二章内核编译的流程第一节编译开始第二节配置内核{核心内容}1.代码成熟等级2..处理器类型和特色3.对模块的支持4.基本的选择5.即插即用支持6.块设备支持7.网络选项8.电话支持9.SCSI设备的支持10.I2O接口适配器11.网络设备支持12.配置业余无线广播13.红外支持14.ISDN的文件系统15.旧型光驱类型(非IDE界面的光驱)16.字符设备B支持18.文件系统19.控制台驱动20.声卡驱动21.Kernel hacking第三节编译内核第四节启用内核附录:LILO分析第三章内核编译的应用第一节嵌入式Linux技术第二节你的Linux有多大(及实践结果)结束语参考文献序言近几年,linux大行其道,令不满windows蓝屏的使用者跃跃欲试,结果发现linux安装不及windows方便,界面不及windows友好,配置不及windows容易,软件不及windows 丰富,以至浅尝辄止。
详细解析Linux内核的主要配置选项配置内核的命令是:# make config 文本配置方式# make menuconfig 菜单配置方式# make xconfig 图形界面配置方式我们可以采用任何一个命令配置内核,一般推荐使用make menuconfig来配置内核。
一.代码成熟度选项在内核中包含了一些不成熟的代码和功能,如果我们想使用这些功能,想打开相关的配置选项,就必需打开这一选项。
二.通用设置选项Local version - append to kernel release:这里填入的是64字符以内的字符串,你在这里填上的字符口串可以用uname -a命令看到。
Support for paging of anonymous memory (swap):这是使用交换分区或者交换文件来做为虚拟内存的,当然要选上了。
System V IPC:表示系统5的Inter Process Communication,它用于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来的。
POSIX Message Queues:这是POSIX的消息队列,它同样是一种IPC。
建议你最好将它选上。
BSD Process Accounting:这是充许用户进程访问内核将账户信息写入文件中的。
这通常被认为是个好主意,建议你最好将它选上。
Sysctl support:这个选项能不重新编译内核修改内核的某些参数和变量,如果你也选择了支持/proc,将能从/proc/sys存取可以影响内核的参数或变量。
建议你最好将它选上。
Auditing support:审记支持,用于和内核的某些子模块同时工作,例如SELinux。
只有选择此项及它的子项,才能调用有关审记的系统调用。
Support for hot-pluggable devices:是否支持热插拔的选项,肯定要选上。
不然USB、PCMCIA等这些设备都用不了。
Linux内核配置、编译及Makefile简述Hi,大家好!我是CrazyCatJack。
最近在学习Linux内核的配置、编译及Makefile文件。
今天总结一下学习成果,分享给大家^_^1.解压缩打补丁首先是解压缩你获取到的Linux内核。
这里我用到的是linux.2.22.6版本的内核。
在Linux下命令行通过tar xjf linux.2.22.6.tar.bz2解压内核。
然后,如果你需要对这个内核打补丁的话,用patch命令:patch -px <../linux.2.22.6.patch。
这里的px指的是忽略掉补丁文件中描述的第几个斜杠。
也就是忽略前x个目录。
--- linux-2.6.22.6/arch/arm/configs/s3c2410_defconfig+++ linux-2.6.22.6_jz2440/arch/arm/configs/s3c2410_defconfig如果你此刻就在内核的根目录下,即linux-2.6.22.6下,也就是说打补丁需要忽略掉一个斜杠的目录。
那么打补丁的命令就是patch -p1 <../linux.2.22.6.patch。
2.配置内核现在补丁已经打好了,接下来就是配置内核了。
这里配置有3种方法:1>直接进行make menuconfig。
这是最麻烦的一种方法,所有的配置都需要你来操作。
2>在默认配置上自己修改,也就是修改defconfig文件。
使用find -name "*defconfig*"查找你的架构对应的默认配置文件。
我是在arch/arm/configs找到自己板子的默认配置文件。
执行defconfig文件:make XXX_defconfig。
XXX是你具体使用的板子型号。
执行这一操作后,结果保存在.config文件。
然后再执行make menuconfig命令。
这时的配置就是在默认配置上稍加修改就可以了。