Linux内核编译 —— 配置文件
1 开发环境
宿主机:Ubuntu16.04
开发板:Mini2440
内核版本:2.6.34.7
2 下载与解压
下载linux-2.6.34.7.tar.bz2并解压:
tar -axvf linux-2.6.34.7.tar.bz2
3 默认配置
进入内核源码顶级目录执行:
make defconfig
输出如下:
liyihai@ubuntu:~/Mini2440/Kernels/linux-2.6.34.7$ make defconfigHOSTCC scripts/basic/fixdepHOSTCC scripts/basic/docprocHOSTCC scripts/basic/hashHOSTCC scripts/kconfig/conf.o
scripts/kconfig/conf.c: In function ‘conf_sym’:
scripts/kconfig/conf.c:159:6: warning: variable ‘type’ set but not used [-Wunused-but-set-variable]int type;^
scripts/kconfig/conf.c: In function ‘conf_choice’:
scripts/kconfig/conf.c:231:6: warning: variable ‘type’ set but not used [-Wunused-but-set-variable]int type;^
scripts/kconfig/conf.c:307:9: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]fgets(line, 128, stdin);^
scripts/kconfig/conf.c: In function ‘conf_askvalue’:
scripts/kconfig/conf.c:105:8: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]fgets(line, 128, stdin);^HOSTCC scripts/kconfig/kxgettext.oSHIPPED scripts/kconfig/zconf.tab.cSHIPPED scripts/kconfig/lex.zconf.cSHIPPED scripts/kconfig/zconf.hash.cHOSTCC scripts/kconfig/zconf.tab.oHOSTLD scripts/kconfig/conf
*** Default configuration is based on 'i386_defconfig'
#
# configuration written to .config
#
根据上述输出信息倒数第倒数4行可知,默认情况下内核的配置是针对x86架构的,并且根据i386_defconfig生成了.config(源码中本没有此文件,是配置时才创建的)。通过find命令查找i386_deconfig:
使用vim打开分别打开.config和i386_defconfig,发现它们的内容基本一样,通过diff命令对它们进行比较:
由上图可见,.config与i386_defconfig是不完全同的,make defconfig并非简单的将arch/x86/configs/i386_defconfig复制到.config。
3.1 默认架构
上述默认配置是针对x86构架的,那么怎么启动ARM构架的默认配置呢?答案是指定顶级Makefile的ARCH变量值,同时指定交叉编译工具链前缀:
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
这时候再执行make defconfig时,针对的就是ARM架构了:
liyihai@ubuntu:~/Mini2440/Kernels/linux-2.6.34.7$ make defconfigHOSTCC scripts/basic/fixdepHOSTCC scripts/basic/docprocHOSTCC scripts/basic/hashHOSTCC scripts/kconfig/conf.o
scripts/kconfig/conf.c: In function ‘conf_sym’:
scripts/kconfig/conf.c:159:6: warning: variable ‘type’ set but not used [-Wunused-but-set-variable]int type;^
scripts/kconfig/conf.c: In function ‘conf_choice’:
scripts/kconfig/conf.c:231:6: warning: variable ‘type’ set but not used [-Wunused-but-set-variable]int type;^
scripts/kconfig/conf.c:307:9: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]fgets(line, 128, stdin);^
scripts/kconfig/conf.c: In function ‘conf_askvalue’:
scripts/kconfig/conf.c:105:8: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]fgets(line, 128, stdin);^HOSTCC scripts/kconfig/kxgettext.oSHIPPED scripts/kconfig/zconf.tab.cSHIPPED scripts/kconfig/lex.zconf.cSHIPPED scripts/kconfig/zconf.hash.cHOSTCC scripts/kconfig/zconf.tab.oHOSTLD scripts/kconfig/conf
*** Default configuration is based on 'versatile_defconfig'
#
# configuration written to .config
#
由上述信息可知,此时根据versatile_defconfig进行默认配置生成.config,使用find查找versatile_defconfig:
使用diff比较versatile_defconfig与.config:
由上图可见,versatile_defconfig与.config还是不完全同的。
3.2 配置文件.config
由上可见,配置信息主要保存于内核源码顶级目录的.config文件中,ARM构架的.config最开始部分的内容如下所示:
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.34.7
# Tue May 10 11:30:25 2016
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_GENERIC_TIME=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_HAVE_PROC_CPU=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_CONSTRUCTORS=y
根据上述信息第2行的说明可知,.config文件的内容是由make config自动生成的(其实i386_defconfig也是的第2行也是这么写),不要手动修改。
第6行指定了使用ARM架构,此外,其余所有的配置项都以CONFIG_为前缀。
3.3 其它默认配置文件
根据参考资料[1]的提示,在内核源码arch目录中有alpha、x86、arm等子目录,分别对应相应的架构:
其中arm目录包含boot、common、configs、include以及内核已支持的ARM芯片子目录:
上图configs目录包含了各个ARM芯片的默认配置文件(包括3.1小节的versatile_defconfig):
根据参考资料[1] 的提示,若要使用这些平台的配置文件,只能将其复制到顶级目录并且重命名为.config:
cd linux-2.6.34.7
cp arch/arm/configs/mini2440_defconfig .config
4 交互配置
进入内核源码顶级目录执行:
make config
输出如下:
liyihai@ubuntu:~/Mini2440/Kernels/linux-2.6.34.7$ make configHOSTCC scripts/basic/fixdepHOSTCC scripts/basic/docprocHOSTCC scripts/basic/hashHOSTCC scripts/kconfig/conf.o
scripts/kconfig/conf.c: In function ‘conf_sym’:
scripts/kconfig/conf.c:159:6: warning: variable ‘type’ set but not used [-Wunused-but-set-variable]int type;^
scripts/kconfig/conf.c: In function ‘conf_choice’:
scripts/kconfig/conf.c:231:6: warning: variable ‘type’ set but not used [-Wunused-but-set-variable]int type;^
scripts/kconfig/conf.c:307:9: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]fgets(line, 128, stdin);^
scripts/kconfig/conf.c: In function ‘conf_askvalue’:
scripts/kconfig/conf.c:105:8: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]fgets(line, 128, stdin);^HOSTCC scripts/kconfig/kxgettext.oSHIPPED scripts/kconfig/zconf.tab.cSHIPPED scripts/kconfig/lex.zconf.cSHIPPED scripts/kconfig/zconf.hash.cHOSTCC scripts/kconfig/zconf.tab.oHOSTLD scripts/kconfig/conf
scripts/kconfig/conf arch/x86/Kconfig
#
# using defaults found in /boot/config-3.16.0-30-generic
#
/boot/config-3.16.0-30-generic:1264:warning: symbol value 'm' invalid for NET_DSA
/boot/config-3.16.0-30-generic:1680:warning: symbol value 'm' invalid for MTD_CMDLINE_PARTS
/boot/config-3.16.0-30-generic:2418:warning: symbol value 'm' invalid for NET_DSA_MV88E6XXX
/boot/config-3.16.0-30-generic:2419:warning: symbol value 'm' invalid for NET_DSA_MV88E6060
/boot/config-3.16.0-30-generic:2421:warning: symbol value 'm' invalid for NET_DSA_MV88E6131
/boot/config-3.16.0-30-generic:2422:warning: symbol value 'm' invalid for NET_DSA_MV88E6123_61_65
/boot/config-3.16.0-30-generic:2861:warning: symbol value 'm' invalid for IWL4965
/boot/config-3.16.0-30-generic:3783:warning: symbol value 'm' invalid for GPIO_UCB1400
/boot/config-3.16.0-30-generic:4259:warning: symbol value 'm' invalid for REGULATOR_88PM8607
/boot/config-3.16.0-30-generic:4318:warning: symbol value 'm' invalid for REGULATOR_TWL4030
/boot/config-3.16.0-30-generic:5396:warning: symbol value 'm' invalid for SND_HDA_CODEC_REALTEK
/boot/config-3.16.0-30-generic:5397:warning: symbol value 'm' invalid for SND_HDA_CODEC_ANALOG
/boot/config-3.16.0-30-generic:5398:warning: symbol value 'm' invalid for SND_HDA_CODEC_SIGMATEL
/boot/config-3.16.0-30-generic:5399:warning: symbol value 'm' invalid for SND_HDA_CODEC_VIA
/boot/config-3.16.0-30-generic:5402:warning: symbol value 'm' invalid for SND_HDA_CODEC_CIRRUS
/boot/config-3.16.0-30-generic:5403:warning: symbol value 'm' invalid for SND_HDA_CODEC_CONEXANT
/boot/config-3.16.0-30-generic:5404:warning: symbol value 'm' invalid for SND_HDA_CODEC_CA0110
/boot/config-3.16.0-30-generic:5407:warning: symbol value 'm' invalid for SND_HDA_CODEC_CMEDIA
/boot/config-3.16.0-30-generic:5408:warning: symbol value 'm' invalid for SND_HDA_CODEC_SI3054
/boot/config-3.16.0-30-generic:5409:warning: symbol value 'm' invalid for SND_HDA_GENERIC
/boot/config-3.16.0-30-generic:7288:warning: symbol value 'm' invalid for NFS_V3
/boot/config-3.16.0-30-generic:7290:warning: symbol value 'm' invalid for NFS_V4
*
* Linux Kernel Configuration
*
*
* General setup
*
Prompt for development and/or incomplete code/drivers (EXPERIMENTAL) [N/y/?] (NEW)
由上述最后1行可知,需要用户确认是否Prompt for development and/or incomplete code/drivers (EXPERIMENTAL),因此可知这是交互式的配置,需要用户对内核非常了解,操作比较繁琐。
5 菜单配置
make menuconfig
6 清空配置
若要删除上述的配置值,执行:
make mrproper
注:make distcean不能替代上述命令!
参考资料
[1]交叉编译 Linux 内核 for ARM
Linux内核编译 —— 配置文件相关推荐
- 2.4基于虚拟机的Linux内核编译
今天把linux的内核重新编译了一下,周折颇多. 我是用vmware虚拟机,linux是redhat9.0. 编译的是自带内核2.4.28-8.主要是想把模块加载的选中. 再就是体验下linux内核编 ...
- Android Linux内核编译调试
对于在Windows上写代码写习惯的人,调试是必不可少的手段,但是转到Android以后,发现调试手段异常简陋,跟Windows简直不是一个级别,特别是Android的内核调试,网上资料也相对较少,不 ...
- linux内核编译如何选择cpu类型,Ubuntu内核编译和CPU Hot-Plug特性配置全过程及遇到问题记录...
最近编译Palacios需要linux的内核支持cpu Hot-Plug(内存热插拔)特性,无奈我机器上安装的Ubuntu10.04系统默认不支持内存热插拔特性,所以需要修改配置文件并重新编译linu ...
- 运行在TQ2440开发板上以及X86平台上的linux内核编译
一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的"linux-2.6.30.4_20100531.tar.bz2"源码包. 解压(天嵌默 ...
- linux内核编译步骤
linux内核编译步骤 对于linux新手来说,编译内核相对有一些难度,甚至不知道如何入手,我通过在网上收集这方面的资料,最终编译成功.现在 我归纳了一下,写出这一篇还算比较详细的步骤,希望 ...
- Linux内核编译与安装[转]
Linux内核介绍 Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机 制.Linux内核的一大特点就是采 ...
- Liunx树莓派(ARM)开发篇—第十四章、树莓派Linux内核编译步骤(超详细、图文结合)
对树莓派内核源码进行配置后,下一步要进行树莓派Linux内核编译 以下步骤均在PC端虚拟机上完成 准备材料:PC端虚拟机.树莓派交叉编译工具.树莓派内核(交叉编译工具.内核下载步骤见树莓派内核源码) ...
- 树莓派-linux内核编译
树莓派-linux内核编译 装虚拟机[^1] 配置共享文件夹 配置交叉编译工具 下载树莓派linux系统内核[^3] 树莓派等芯片带操作系统的启动过程 树莓派linux源码目录树 树莓派linux源码 ...
- LINUX内核编译(ZT)
LINUX内核编译(ZT) 在这里转贴一些关于内核编译的文章,绝非笔者原创,也无意注明出处.有些内容有重复之处,请原谅. ==================================== 一. ...
- Linux内核编译基础
2.6 Linux内核编译基础 当完成对Linux内核的配置以后,此时仍然以源代码的方式存在,不能直接下载到嵌入式系统中运行,因此,需要对内核进行编译,生成最终可以在嵌入式系统上运行的可执行代码. ...
最新文章
- php正则表达式2,php正则表达式(2)
- linux c 错误 'for' loop initial declaration used outside C99 mode
- ylbtech-LanguageSamples-UserConversions(用户定义的转换)
- 2015年第六届蓝桥杯 - 省赛 - C/C++大学A组 - C.奇妙的数字
- 182. 查找重复的电子邮箱
- 手机连接电脑wifi
- 判断端口是否能用_扫描器篇(八)之python+scapy构造TCP协议包扫描主机端口
- 【安全】This base cannot be created with PLA.
- PLL与PHY的连接:通道绑定或者不绑定
- java 调用tomcat api,tomcat处理http请求-下
- ES6的新特性(9)——对象的扩展
- Word高效指南 - WORD的自带模板
- 测试人如何快速晋升为月薪过万的软件测试工程师?
- 山东省枣庄高新区益洋花园地块场地环境初步调查信息公示
- 在CAD里怎么测量面积?
- vxe-input vue 日期选择组件带农历节日、小圆点提醒
- 以考代评职称需要聘任嘛_如何以正确的方式聘用:工程师对技术招聘的看法
- 教你 IntelliJ IDEA 永久激活,建议收藏!(转)
- Python基本元素:数字、字符串和变量
- 运维工程师的发展前景如何?
热门文章
- 记一次VS2015安装/卸载以及编译给定程序
- word2013+endnotex8参考文献导入
- Scala下载安装和环境变量配置
- 计算机键盘无法使用 怎么办,电脑键盘失灵怎么办?4个小技巧解决电脑键盘失灵问题...
- KETTLE 下载网址
- 深度贝叶斯神经网络(Deep Bayesian Neural Networks)实现方法
- DB2 SQLCODE 异常大全编辑(四)
- Win7连接共享打印机时,报 0x00000bcb 错误
- 使用 PyQT5 来做一个简易版库存管理系统(二)
- KETTLE使用教程(包含几个小示例)