Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解
Linux系统的Makefile和Kconfig及模块简介
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解析
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菜单详解我们在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介绍
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用法与说明
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所示。
Linux教程之Linux内核的Makefile和kconfig解读
成一个 CONFIG_HELLO_MODULE=y的配置.
Linux教程之2、依赖型定义depends on或requires
指此菜单的出现和否依赖于另一个定义 config HELLO_MODULE bool “hello test module” depends on ARCH_PXA 这个例子表明HELLO_MODULE这个
Linux教程
各个子Makefile文件比较简单,指出了该如何编译目 标文件,例如/mm目录下的Makefile片段:
16 obj-$(CONFIG_PROC_PAGE_MONITOR) +=
pagewalk.o
17 obj-$(CONFIG_BOUNCE) += bounce.o
18 obj-$(CONFIG_SWAP) += page_io.o
Linux教程
这个过程是由kbuild系统来完成的,Linux编译 系统会两次扫描Linux的Makefile:首先编译系 统会读取Linux内核顶层的Makefile,然后根据 读到的内容第二次读取Kbuild的Makefile来编译 Linux内核。内核编译系统或者说kbuild,是一种 在编译内核时,可以对内核配置选项进行选择 的机制。2.6内核树中已经更新了这种机制, 新版本的kbuild 不仅高速而且备有更完善的文 档。Kbuild机制完全依赖于源代码的层次结构。
概述
在内核编译中如何将各个目录树中的文件组织起来编译 是一个很重要的问题,并且要根据用户配置来编译特有 的内核。为了解决这个问题,内核使用两种文件, Makefie和Kconfig。分布到各目录的Kconfig构成了一个 分布式的内核配置数据库,每个Kconfig分别描述了所属 目录源文档相关的内核配置菜单,就是我们使用命令 make menuconfig(或者xconfig)后产生的配置菜单, 此菜单包含多层,每个层次都是由各个目录中的Kconfig 产生的。用户根据需求来选择如何编译内核,然后将配 置结果保存到.config中,然后执行Makefile时就会根 据.config的结果来实现内核的编译。
make menuconfig原理
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文件,根据其中的配置选项和依赖关系,生成相应的菜单界面。
Linux编译内核的详细配置说明
现在流行的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内核的主要配置选项
详细解析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简述
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命令。
这时的配置就是在默认配置上稍加修改就可以了。
make menuconfig 规则
一、简介make menuconfig 是一个用于配置 Linux 内核编译选项的命令行工具。
通过 make menuconfig,用户可以在交互式的菜单界面中选择需要的内核配置选项,从而定制和构建适合特定需求的 Linux 内核。
二、使用方法1. 进入内核源码目录在使用 make menuconfig 命令前,首先需要将 Linux 内核源码下载并解压到本地的工作目录中。
通过命令行切换到内核源码目录。
2. 运行 make menuconfig在内核源码目录下,运行以下命令:```make menuconfig```运行该命令后,会出现一个基于文本终端的交互式菜单界面,其中列出了各种可配置的内核选项和功能。
3. 配置内核选项在 make menuconfig 的菜单界面中,用户可以使用方向键和回车键来浏览和选择不同的配置选项。
一般来说,可以按照自己的需求来定制内核选项,比如针对特定的硬件、功能或性能要求进行配置。
4. 保存配置配置完成后,可以使用菜单界面中的保存选项来保存当前的配置信息。
保存后,即可退出 make menuconfig。
5. 生成配置文件保存配置信息后,make menuconfig 会自动生成一个 .config 文件,其中包含了用户所选择的配置选项和参数。
该配置文件将作为编译内核的依据,确保内核编译过程中能够按照用户的需求进行定制。
6. 编译内核在完成配置后,用户可以通过 make 命令来编译内核,并根据生成的 .config 文件进行相应的编译。
三、常见问题1. make menuconfig 菜单界面的操作和功能大部分采用了交互式的方式,需要用户通过键盘来进行选择和操作。
对于初次使用者来说,可能需要一定时间来熟悉和了解菜单界面的操作方法。
2. 在配置内核选项时,需要对 Linux 内核的相关知识有一定了解,才能更好地理解和选择各项配置选项,以及它们对系统的影响和作用。
3. 部分配置选项可能存在依赖关系,如果用户在选择配置选项时不注意,可能会导致后续编译出现问题或者生成的内核无法正常工作。
linux内核模块及内核编译过程
Linux内核模块及内核编译过程一、引言Linux内核是Linux操作系统的核心组件,负责管理系统的硬件和软件资源。
内核模块是一种动态加载到内核中的代码,用于扩展和添加新的功能。
本文将介绍Linux内核模块的概念、编写方法以及内核编译过程。
二、Linux内核模块内核模块是一种动态加载到内核中的代码,用于扩展和添加新的功能。
它是一种轻量级的解决方案,可以在不重新编译整个内核的情况下添加或删除功能。
内核模块可以使用内核提供的API,以实现与内核其他部分的交互。
编写内核模块需要了解内核的内部结构和API。
通常,内核模块是用C语言编写的,因为C语言与汇编语言有良好的交互性,并且内核本身也是用C语言编写的。
编写内核模块的基本步骤如下:1.编写模块的源代码:使用C语言编写模块的源代码,并确保遵循内核的编码风格和约定。
2.编译模块:使用内核提供的工具和方法将源代码编译成模块。
3.加载和卸载模块:使用insmod命令将模块加载到内核中,使用rmmod命令卸载模块。
三、内核编译过程内核编译是将源代码转换成可在计算机上运行的二进制代码的过程。
Linux内核的编译过程可以分为以下几个步骤:1.配置内核:使用make menuconfig或make xconfig等工具,根据需要选择要包含在内核中的功能和选项。
2.生成Makefile:根据配置结果生成Makefile文件,该文件用于指导make命令如何编译内核。
3.编译内核:使用make命令根据Makefile编译内核。
这个过程包括编译源代码、生成目标文件、链接目标文件等步骤。
4.安装内核:将编译好的内核映像安装到系统中,以便在启动时加载。
5.配置引导加载程序:将引导加载程序配置为加载新编译的内核映像。
四、总结本文介绍了Linux内核模块的概念、编写方法以及内核编译过程。
通过了解这些知识,我们可以更好地理解Linux操作系统的内部原理,并根据需要定制和优化系统的功能。
Linux内核配置
Linux内核配置系统1.配置系统的基本结构Linux内核的配置系统由三个部分组成,分别是:1.Makefile:分布在 Linux 内核源代码中的 Makefile,定义 Linux 内核的编译规则;2.配置文件(config.in):给用户提供配置选择的功能;3.配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于Xwindows 图形界面的用户配置界面,各自对应于 Make config、Makemenuconfig 和 make xconfig)。
这些配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码)。
本文并不是对配置系统本身进行分析,而是介绍如何使用配置系统。
所以,除非是配置系统的维护者,一般的内核开发者无须了解它们的原理,只需要知道如何编写 Makefile 和配置文件就可以。
所以,在本文中,我们只对Makefile 和配置文件进行讨论。
另外,凡是涉及到与具体 CPU 体系结构相关的内容,我们都以 ARM 为例,这样不仅可以将讨论的问题明确化,而且对内容本身不产生影响。
2. Makefile2.1 Makefile 概述Makefile 的作用是根据配置的情况,构造出需要编译的源文件列表,然后分别编译,并把目标代码链接到一起,最终形成 Linux 内核二进制文件。
由于 Linux 内核源代码是按照树形结构组织的,所以 Makefile 也被分布在目录树中。
Linux 内核中的 Makefile 以及与 Makefile 直接相关的文件有:1.Makefile:顶层 Makefile,是整个内核配置、编译的总体控制文件。
2..config:内核配置文件,包含由用户选择的配置选项,用来存放内核配置后的结果(如 make config)。
3.arch/*/Makefile:位于各种 CPU 体系目录下的 Makefile,如arch/arm/Makefile,是针对特定平台的 Makefile。
Linux内核体系构建分析
Linux内核体系构建分析这里咱们先澄清一个观念。
很多人认为内核构建系统仅仅是kbuild,其实不然。
你由上面这些目标可以很清楚的看出来,整个内核构建系统实现了不仅build,而且还包括config和install。
那些认为内核构建系统仅仅是 kbuild 的人,可能是受到这个词的中英文翻译的迷惑。
为了帮助大家对后面内容的理解,我们将内核构建系统所支持的所有目标分一下类。
出现在make 命令后面的内容总共有这么几个类别:a) 和 .config 完全无关的目标这些目标既不会产生 .config 文件,也不需要使用 .config 文件。
包括上面列出来的clean,mrproper,distclean,headers_install,kernelrelease,kernelversion等等。
b) 和 .config 相关的目标除了和.config完全无关的那些目标外,其它目标皆是要么会产生.config文件,要么需要使用.config文件。
前者又称之为配置目标(config targets),后者为构建目标(build targets)。
前者主要是:config 和 %config。
百分号是通配符,%config指代了一系列的以config为结尾的目标,包括menuconfig,oldconfig,silentoldconfig,s3c2410_defconfig 等等。
后者主要是:all,vmlinux,modules,zImage,uImage等等。
它们的产生需要以.config文件中的配置结果作为依据。
c) single targets除了上面这几个外,上面列表中还有一类目标没有归纳进来。
那就是dir/,dir/file.[ois],dir/file.ko等目标。
这些目标不同于那些复合集成性的目标,它们以单个文件或目录的形式存在,比方源码树中的某一个小目录,某一个单独的对象文件,某一个外部模块文件等等。
Linux内核编译步骤
由于2.4和2.6内核的编译方法不是完全一样,所以我们分开两种情况讨论编译2.4内核:编译2.6内核第一步:make mrproper -清理内核源代码树(清理垃圾信息)make mrproper 第二步:make menuconfig --配置内核以及内核模块make menuconfig (相关的命令还有make config、make oldconfig、make xconfig)(交互问答式)(通过旧内核生成)(图形界面下编译)我们在这里推荐使用make menuconfig 这种方法操作最方便最直接。
在进入内核配置菜单之后,原则上,自己有把握的可以更改,没有把握的切记不要乱改,否则会导致编译失败。
另外更改的时候,*,表示编译进入内核————随系统启动而启动M,表示编译进入模块————不随系统启动而启动,在需要的时候调用(一些不重要的外部驱动程序就可以作为内核模块编译,这样内核不会过大,也不会影响启动速度)空,表示不编译进入内核也不编译进入模块————放弃这个功能,如果系统不支持这类功能,可以放弃最后退出的时候,提示保存,这里会将刚才的配置保存为一个名称为.config的配置文件,不管我们使用make menuconfig还是make oldconfig、make xconfig、make config,最终都为了生成这个.config文件,以后所有的操作,就会根据这个文件中的内容进行,这个文件,存储的就是我们刚才所做的改动,可以less .config查看一下。
第三步:make dep --生成依赖性关系第四步:make bzImage --生成新内核make (2.6内核中将左边三个步骤简化为make)第五步:make modules --编译内核模块这三个步骤执行的时间比较长,所以,慢慢等吧!刚才这一步是执行时间最长的一步。
第六步:make modules_install --安装内核模块第七步:make install --安装内核(所有的编译步骤最好在字符界面下进行,否则在图形界面下速度会比较慢)另外上面所提到的所有步骤,任何一步完成之后都要检查有没有出错,就是有没有显示error的字样,如果显示任何一步出错都要退回到make mrproper重来。
linux中的Makefile .config kconfig
Linux内核中的Kconfig、Makefile、.config作者:陶毛毛来源:博客园发布时间:2012-01-05 10:50 阅读:477 次原文链接[收藏]本文参考文章地址:/donghaozheng/blog/item/02e1b231f0df64a25fdf0eea.ht ml本文参考友善之臂的MICRO2440用户手册毛毛同学今天学习了驱动程序模块的安装与卸载,在这个过程中毛毛发现,内核的目录中有许多的Kconfig、Makefile文件,但是毛毛不知道为什么需要这些文件,这些文件又是用来做什么的。
下面我们就和陶毛毛同学一起来学习下这些文件的作用是什么。
首先我们来学习什么Makefile,什么是Kconfig ,什么是.configMakefile:一个文本形式的文件,其中包含一些规则告诉make编译哪些文件以及怎样编译这些文件。
Kconfig:一个文本形式的文件,其中主要作用是在内核配置时候,作为配置选项。
.config:文件是在进行内核配置的时候,经过配置后生成的内核编译参考文件。
Kconfig1.先了解一下Kconfig的语法:一个典型的内核配置菜单如下:menu "Network device support"config NETDEVICESbool "Enable Net Devices"depends on NETdefault yhelpThis is help desciption。
...endmenu包含在menu/endmenu中的内容会成为Network device support的子菜单。
每一个子菜单项都是由config来定义的。
congfig下方的那些bool、depends on、default、help 等为config的属性,用于定义该菜单项的类型、依赖项、默认值、帮助信息等。
2. 补充说明一下类型定义部分:每个config菜单项都要有类型定义: bool布尔类型、tristate三态(内建、模块、移除)、string字符串、hex十六进制、integer整型。
make menuconfig原理 -回复
make menuconfig原理-回复make menuconfig是Linux内核编译时使用的配置界面。
对于Linux内核编译,通常会使用make命令来进行编译操作。
而make menuconfig 则是make命令的一个子命令,用于打开一个文本界面,提供给用户一种方便的方式来配置Linux内核的编译选项。
下面,我将一步一步地解释make menuconfig的原理。
第一步:调用kconfig-frontendsmake menuconfig实际上是通过调用kconfig-frontends这个工具来实现的。
kconfig-frontends是一个由Linux内核开发者提供的专门用于解析和处理配置文件的工具。
第二步:解析配置文件kconfig-frontends首先会根据内核的配置文件(一般是.config文件)来解析和读取内核的编译选项。
该配置文件记录了用户之前进行过的配置信息,包括各个模块的开关、功能选项、驱动选项等。
解析配置文件的过程会生成一个内部数据结构,用于存储用户的配置选项。
第三步:构建配置界面根据解析得到的内部数据结构,kconfig-frontends会构建一个文本界面,供用户进行配置。
配置界面通常采用树形结构,将各个模块及其选项进行组织。
用户可以通过光标键或者鼠标来进行选择和修改。
第四步:配置选项的修改与保存当用户选择某个选项后,kconfig-frontends会根据用户的选择来修改内部数据结构中相应的配置选项。
比如,改变某个模块的状态(关闭或打开)、修改某个功能的功能选项等。
用户可以通过界面上的不同操作来进行修改,比如使用空格键来改变选项的状态。
同时,配置界面还提供了搜索、过滤、排序等功能,以方便用户查找和管理配置选项。
用户可以通过这些功能来快速定位和修改所需要的选项。
当用户进行修改后,kconfig-frontends会实时将修改后的配置选项保存到配置文件中。
这样,下一次运行make menuconfig时,就可以恢复上一次的配置。
linux内核设备文档!!!(makemenuconfig)[指南]
Linux内核配置文档(make menuconfig)1.Code maturity level options:代码成熟等级。
1.1.prompt for development and/or incomplete code/drivers.如果要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须把该项选择为Y了;否则可以把它选择为N。
在Linux的世界里,每天都有许多人为它发展支持的driver和加强它的核心。
但是有些driver还没进入稳定的阶段。
但其作者很欢迎其他人去测试这些driver并提出一些bugs。
这个问题是说,有一些drive还在做测试中,问您是否要选择这些drive或支持的程序码。
如果键入Y,往后将会出现一些还在测试中的东西给您做选择。
(像Java的程序码和PCI bridge),台则就键入N。
2.Loadable module support:对模块的支持。
预备知识:模块就像你特意插入核心中的某些东西,如果办公室有一个小网络并且有时想用一下(但并不经常),也许你想把网卡编译成一个模块。
使用这个模块,机器必运行和存取/libs下的模块,意思是驱动程序(IDE,SCSI等但必须是NFS支持的网卡),文件系统(通常是ext2但也可以是nfs)和核心类型(最好是elf)必须编译在内核并且不能是模块,模块只有核心引导时才起作用,驱动程序(来网络)的存取,和文件系统安装。
这些文件必须编译在核心内否则将能安装启动分区。
如果安装启动分区和网络,你需要网络系统文件,和己经编译的网卡。
为什么要使用模块? 模块化使核心变的更简捷,它减少核心释放大量的受保护的空间。
模块的安装和卸载使用的空间是可重复分配利用的。
如果你打开机器有90%以上的时间用到一个模块,编译它。
运用这类模块是浪费内存的,原因是一旦你编译了模块它们同样将占用大量的内存,核心需要一些代码来挂上模块。
记住,核心在保护空间运行,但模块并不是。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printk(KERN_WARNING fmt, ##arg) printk(KERN_DEBUG fmt, ##arg)
/* Module Init & Exit function */ static int __init myModule_init(void) {
/* Module init code */ PRINTK("myModule_init\n"); return 0;
图形
工具
前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍 了模块的一种编译方式——在一个独立的文件夹通过makefile配合内核源码路径完成
那么如何将驱动直接编译进内核呢? 在我们实际内核的移植配置过程中经常听说的内核裁剪又是怎么麽回事呢? 我们在进行linux内核配置的时候经常会执行make menuconfig这个命令,然后屏幕上会出现以下 界面:
首页 业界 移动 云计算 研发 论坛 博客 下载 更多
process的专栏
您还未登录!| 登录 | 注册 | 帮助
个人资料
dianhuiren
访问:71424次 积分:1219分 排名:第8764名 原创:37篇 转载:127篇 译文:0篇 评论:3条
目录视图
摘要视图
订阅
《这些年,我们读过的技术经典图书》主题有奖征文 经理
这些配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码)。本文
/dianhuiren/article/details/6917132
1/5
2012年04月 (6) 2012年03月 (15) 2012年02月 (16)
并不是对配置系统本身进行分析,而是介绍如何使用配置系统。所以,除非是配置系统的维护者,一般 的内核开发者无须了解它们的原理,只需要知道如何编写 Makefile 和配置文件就可以。
最后我们会发现,整个linux内核配置过程中,留给用户的接口其实只有各层Kconfig、 makefile文件以及对应的源文件。
比如我们如果想要给内核增加一个功能,并且通过make menuconfig控制其声称过程 首先需要做的工作是:修改对应目录下的Kconfig文件,按照Kconfig语法增加对应的选项; 其次执行make menuconfig选择编译进内核或者不编译进内核,或者编译为模块,.config文 件和autoconf.h文件会自动生成; 最后修改对应目录下的makefile文件完成编译选项的添加; 最后的最后执行make zImage命令进行编译。 三、具体实例 下面我们以前面做过的模块实验为例,讲解如何通过make menuconfig机制将前面单独编译的模块 编译进内核或编译为模块 假设我已经有了这么一个驱动: modules.c
内核中的源代码就都会包含以上.h文件,跟宏的定义情况进行条件编译。 当我们需要对一个文件整体选择如是否编译时,还需要修改对应的makefile文件,例如:
我们选择是否要编译s3c2410_ts.c这个文件时,makefile会根据 CONFIG_TOUCHSCREEN_S3C2410来决定是编译此文件,此宏是在Kconfig文件中定义,当我们配置 完成后,会出现在.config及autconf中,至此,我们就完成了整个linux内核的编译过程。
* 基于用户的deviantArt推荐系统 (SVD因子分解)
* 使用VBA,20行代码 将Excel数据 导出
3)假设教务处比较“仁慈”,为了怕某些同学做不错试题,还给我们准备了一份参考答案(默认 配置选项),存放在arch/$ARCH/configs下,对于arm科来说就是arch/arm/configs文件夹:
专访李铁军:从医生到金山首席安全专家的转变 独一无二的职位:开源社区
Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解
分类: 工作技巧
2011-10-29 16:29 2023人阅读 评论(0) 收藏 举报
m akefile
linux
linux内核
module
cache和内存的映射方式 (1478)
奥巴马的演讲
(1459)
Linux内核根目录下的的.config文件、arm/$ARCH/下的config文件
工作队列使用方法
(1354)
Linux内核根目录下的 include/generated/autoconf.h文件
评论排行
1)scripts文件夹存放的是跟make menuconfig配置界面的图形绘制相关的文件,我们作为使用
01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 16. 17. 18.
#include <linux/module.h>
/*module_init()*/
#include <linux/kernel.h> /* printk() */
假设教务处留了一个心眼,他提供的参考答案并不完全正确(.config文件与我们的板子并不 是完全匹配),这时我们可以选择直接修改.config文件然后执行make menuconfig命令读取新的 选项
但是一般我们不采取这个方案,我们选择在配置界面中通过空格、esc、回车选择某些选项选 中或者不选中,最后保存退出的时候,Linux内核会把新的选项(正确的参考答案)更新 到.config中,此时我们可以把.config重命名为其它文件保存起来(当你执行make distclean时 系统会把.config文件删除),以后我们再配置内核时就不需要再去arch/arm/configs下考取相 应的文件了,省去了重新配置的麻烦,直接将保存的.config文件复制为.config即可.
/dianhuiren/article/details/6917132
3/5
19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
}
static void __exit myModule_exit(void) {
/dianhuiren/article/details/6917132
2/5
5)经过以上两步,我们可以正确的读取、配置我们需要的界面了 那么他们如何跟makefile文件建立编译关系呢? 当你保存make menuconfig选项时,系统会除了会自动更新.config外,还会将所有的选项以宏的 形式保存在 Linux内核根目录下的 include/generated/autoconf.h文件下
Linux 内核配置机制(m ake (m20e2n3u)config、Kconfig、m akefile)讲解
关于cache line
(1634)
arch/$ARCH/Kconfig文件、各层目录下的Kconfig文件
PCI 总线初始化 buildroot配置过程
(1611) (1597)
Linux内核根目录下的makefile文件、各层目录下的makefile文件
MODULE_LICENSE("GPL");
/*模块许可证明,描述内核模块的许可权限,必须*/
MODULE_DESCRIPTION("A simple Hello World Module"); /*模块说明,可选*/
lm bench的使用方法
者无需关心这个文件夹的内容
(1)
指针+1的含义
(1)
Scs i命令队列转换为ata命令过程(1)
2)当我们执行make menuconfig命令出现上述蓝色配置界面以前,系统帮我们做了以下工作:
smartctl/hdparm对usb 硬盘识别(的0)原因
首先系统会读取arch/$ARCH/目录下的Kconfig文件生成整个配置界面选项(Kconfig是整个
#include <linux/init.h>
/* __init __exit */
#define DEBUG //open debug message
#ifdef DEBUG #define PRINTK(fmt, arg...) #else #define PRINTK(fmt, arg...) #endif
lm bench的使用方法 gml96: 写的很详细。值得称赞!
指针+1的含义 arkzheng: int A={.....};int (*p);p=&A;cout<<(++p);输出多少 呢?
此文件夹中有许多选项,系统会读取哪个呢?内核默认会读取linux内核根目录下.config文 件作为内核的默认选项(试题的参考答案),我们一般会根据开发板的类型从中选取一个与我们 开发板最接近的系列到Linux内核根目录下(选择一个最接近的参考答案) #cp arch/arm/configs/s3c2410_defconfig .config 4).config
(0)
或者通过 make ARCH=arm menuconfig命令来生成配置界面,默认生成的界面是所有参数都是没
推荐文章
* Hbase安装与简介 * 批评“我拒绝接受的几个最佳编 程实践方法”言论
有值的 比如教务处进行考试,考试科数可能有外语、语文、数学等科,这里相当于我们选择了arm科
可进行考试,系统就会读取arm/arm/kconfig文件生成配置选项(选择了arm科的卷子),系统还 提供了x86科、milps科等10几门功课的考试题
* 【Cocos2d-X开发】第17期:动作 类之跟随动作、可调整速度动作以 及动作延时的使用
* 3DShader之法线贴图(normal mapping)