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打开分别打开.configi386_defconfig,发现它们的内容基本一样,通过diff命令对它们进行比较:

由上图可见,.configi386_defconfig是不完全同的,make defconfig并非简单的将arch/x86/configs/i386_defconfig复制到.config

3.1 默认架构

上述默认配置是针对x86构架的,那么怎么启动ARM构架的默认配置呢?答案是指定顶级MakefileARCH变量值,同时指定交叉编译工具链前缀

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目录中有alphax86arm等子目录,分别对应相应的架构:

其中arm目录包含bootcommonconfigsinclude以及内核已支持的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内核编译 —— 配置文件相关推荐

  1. 2.4基于虚拟机的Linux内核编译

    今天把linux的内核重新编译了一下,周折颇多. 我是用vmware虚拟机,linux是redhat9.0. 编译的是自带内核2.4.28-8.主要是想把模块加载的选中. 再就是体验下linux内核编 ...

  2. Android Linux内核编译调试

    对于在Windows上写代码写习惯的人,调试是必不可少的手段,但是转到Android以后,发现调试手段异常简陋,跟Windows简直不是一个级别,特别是Android的内核调试,网上资料也相对较少,不 ...

  3. linux内核编译如何选择cpu类型,Ubuntu内核编译和CPU Hot-Plug特性配置全过程及遇到问题记录...

    最近编译Palacios需要linux的内核支持cpu Hot-Plug(内存热插拔)特性,无奈我机器上安装的Ubuntu10.04系统默认不支持内存热插拔特性,所以需要修改配置文件并重新编译linu ...

  4. 运行在TQ2440开发板上以及X86平台上的linux内核编译

    一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的"linux-2.6.30.4_20100531.tar.bz2"源码包. 解压(天嵌默 ...

  5. linux内核编译步骤

    linux内核编译步骤      对于linux新手来说,编译内核相对有一些难度,甚至不知道如何入手,我通过在网上收集这方面的资料,最终编译成功.现在 我归纳了一下,写出这一篇还算比较详细的步骤,希望 ...

  6. Linux内核编译与安装[转]

    Linux内核介绍 Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机 制.Linux内核的一大特点就是采 ...

  7. Liunx树莓派(ARM)开发篇—第十四章、树莓派Linux内核编译步骤(超详细、图文结合)

    对树莓派内核源码进行配置后,下一步要进行树莓派Linux内核编译 以下步骤均在PC端虚拟机上完成 准备材料:PC端虚拟机.树莓派交叉编译工具.树莓派内核(交叉编译工具.内核下载步骤见树莓派内核源码) ...

  8. 树莓派-linux内核编译

    树莓派-linux内核编译 装虚拟机[^1] 配置共享文件夹 配置交叉编译工具 下载树莓派linux系统内核[^3] 树莓派等芯片带操作系统的启动过程 树莓派linux源码目录树 树莓派linux源码 ...

  9. LINUX内核编译(ZT)

    LINUX内核编译(ZT) 在这里转贴一些关于内核编译的文章,绝非笔者原创,也无意注明出处.有些内容有重复之处,请原谅. ==================================== 一. ...

  10. Linux内核编译基础

    2.6  Linux内核编译基础 当完成对Linux内核的配置以后,此时仍然以源代码的方式存在,不能直接下载到嵌入式系统中运行,因此,需要对内核进行编译,生成最终可以在嵌入式系统上运行的可执行代码. ...

最新文章

  1. php正则表达式2,php正则表达式(2)
  2. linux c 错误 'for' loop initial declaration used outside C99 mode
  3. ylbtech-LanguageSamples-UserConversions(用户定义的转换)
  4. 2015年第六届蓝桥杯 - 省赛 - C/C++大学A组 - C.奇妙的数字
  5. 182. 查找重复的电子邮箱
  6. 手机连接电脑wifi
  7. 判断端口是否能用_扫描器篇(八)之python+scapy构造TCP协议包扫描主机端口
  8. 【安全】This base cannot be created with PLA.
  9. PLL与PHY的连接:通道绑定或者不绑定
  10. java 调用tomcat api,tomcat处理http请求-下
  11. ES6的新特性(9)——对象的扩展
  12. Word高效指南 - WORD的自带模板
  13. 测试人如何快速晋升为月薪过万的软件测试工程师?
  14. 山东省枣庄高新区益洋花园地块场地环境初步调查信息公示
  15. 在CAD里怎么测量面积?
  16. vxe-input vue 日期选择组件带农历节日、小圆点提醒
  17. 以考代评职称需要聘任嘛_如何以正确的方式聘用:工程师对技术招聘的看法
  18. 教你 IntelliJ IDEA 永久激活,建议收藏!(转)
  19. Python基本元素:数字、字符串和变量
  20. 运维工程师的发展前景如何?

热门文章

  1. 记一次VS2015安装/卸载以及编译给定程序
  2. word2013+endnotex8参考文献导入
  3. Scala下载安装和环境变量配置
  4. 计算机键盘无法使用 怎么办,电脑键盘失灵怎么办?4个小技巧解决电脑键盘失灵问题...
  5. KETTLE 下载网址
  6. 深度贝叶斯神经网络(Deep Bayesian Neural Networks)实现方法
  7. DB2 SQLCODE 异常大全编辑(四)
  8. Win7连接共享打印机时,报 0x00000bcb 错误
  9. 使用 PyQT5 来做一个简易版库存管理系统(二)
  10. KETTLE使用教程(包含几个小示例)