Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

合集下载

Linux系统的Makefile和Kconfig及模块简介

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解析

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菜单详解我们在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介绍

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用法与说明

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解读

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原理

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编译内核的详细配置说明

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 丰富,以至浅尝辄止。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)
相关文档
最新文档