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

输出如下:

[email protected]:~/Mini2440/Kernels/linux-2.6.34.7$ make defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/basic/docproc
  HOSTCC  scripts/basic/hash
  HOSTCC  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.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/lex.zconf.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  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架构了:

[email protected]:~/Mini2440/Kernels/linux-2.6.34.7$ make defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/basic/docproc
  HOSTCC  scripts/basic/hash
  HOSTCC  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.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/lex.zconf.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  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

输出如下:

[email protected]:~/Mini2440/Kernels/linux-2.6.34.7$ make config
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/basic/docproc
  HOSTCC  scripts/basic/hash
  HOSTCC  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.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/lex.zconf.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  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

时间: 2024-09-30 20:40:34

Linux内核配置的相关文章

linux内核配置 kbuild

Linux 内核配置机制 http://blog.csdn.net/dianhuiren/article/details/6917132 linux kbuild文档 http://blog.chinaunix.net/uid-10221131-id-2943265.html

Linux内核配置浅析

1.Linux Kernel Kconfig系统的基本结构 Linux内核的配置系统由三个部分组成,分别是: 1>.Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则: 2>.Kconfig:分布在 Linux 内核源代码根目录及各层目录中,给用户提供配置选择的功能: 3>..config:保存了配置选项结果: 4>.配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面.基于 Ncurs

Tiny4412 Linux 内核配置流程

1.配置交叉编译器 默认情况下,内核构建的是与宿主机相同的体系架构镜像.如果要交叉编译,需要设置两个变量ARCH和CORSS_COMPILE. ①ARCH:指明目标体系架构,如x86.arm.mips等. ②CROSS_COMPILE:指定使用的交叉编译器的前缀.例如arm-linux-.在内核顶层的Makefile中,可以看到工具链中的编译器.链接器等都是以$(CROSS_COMPILE)作为前缀. AS = $(CROSS_COMPILE)as LD = $(CROSS_COMPILE)ld

[国嵌攻略][099][Linux内核配置与编译]

为什么要配置内核 基于硬件和软件的需求选出需要的功能,去掉不要的功能. 内核配置的方法 make config:基于文本交互的配置. make menuconfig:基于图形菜单的配置. make menuconfig配置方法 1.菜单项的分类 processor type and features   处理器类型 networking support            网络协议支持 device drivers                设备驱动支持 file systems     

LINUX内核配置与编译

移植LINUX内核,就是为了让LINUX系统在自己的硬件平台上运行起来,能正常工作.其中最重要的还是驱动的移植,只有驱动程序能驱动硬件设备,上层的应用程序才能正常运行. 目前,LINUX支持内核的系列主要有以下,解压linux-3.5-20131028.tgz文件,进入到文件夹里面, 除了arch文件夹里面,都是大多数平台相同的文件: 在kernel文件夹里面,包含着一些内核的文件: 在arch文件里面是支持的各种平台文件,里面是一些芯片公司支持的一些驱动程序: 一般来说,LINUX系统剪裁都分

linux 内核配置参考

对于每一个配置选项,用户可以回答"y"."m"或"n".其中"y"表示将相应特性的支持或设备驱动程序编译进内核:"m"表示将相应特性的支持或设备驱动程序编译成可加载模块,在需要时,可由系统或用户自行加入到内核中去:"n"表示内核不提供相应特性或驱动程序的支持.只有<>才能选择M 1. General setup(通用选项) [*]Prompt for development 

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指的是忽略掉补丁文件中描述的

Linux内核配置---menuconfig

1. 示例 config SGI_NEWPORT_CONSOLE tristate "SGI Newport Console support" depends on SGI_IP22 select FONT_SUPPORT help Say Y here if you want the console on the Newport aka XL graphics card of your Indy. Most people say Y here. config DUMMY_CONSOL

Linux 内核配置和编译

一.配置内核 (1). 为什么要配置内核 1. 硬件需求 2. 软件需求 选出需要的,去掉不要的 (2). 如何配置内核 1. make  config 基于文本模式的交互式配置 2. make  menuconfig 基于文本模式的菜单式配置  优点:直观,简单,高效 <  > 不选择该功能  <m> 内核模块 不是随时随刻要使用的  B.o文件存到硬盘中,需要才添加到内存里面.节省内存  <*>B.O文件存到内存中,随时随地可使用的. (3). 内核配置结果 ls