微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Linux内核配置系统详解

Linux内核配置系统详解

时间:05-07 来源:IBM 点击:

有一个缺省配置。在向内核代码增加了新的功能后,如果新功能对于这个 ARCH 是必需的,就要修改此 ARCH 的缺省配置。修改方法如下(在 Linux 内核根目录下):

  备份 .config 文件

  cp arch/arm/deconfig .config

  修改 .config

  cp .config arch/arm/deconfig

  恢复 .config

  如果新增的功能适用于许多的 ARCH,只要针对具体的 ARCH,重复上面的步骤就可以了。

  3.4 help file

  大家都有这样的经验,在配置 Linux 内核时,遇到不懂含义的配置选项,可以查看它的帮助,从中可得到选择的建议。下面我们就看看如何给给一个配置选项增加帮助信息。

  所有配置选项的帮助信息都在 Documentation/Configure.help 中,它的格式为:

<description>
<variable name>
<help file>

  <description> 给出本配置选项的名称,<variable name> 对应配置变量,<help file> 对应配置帮助信息。在帮助信息中,首先简单描述此功能,其次说明选择了此功能后会有什么效果,不选择又有什么效果,最后,不要忘了写上"如果不清楚,选择 N(或者)Y",给不知所措的用户以提示。

  
4. 实例

  对于一个开发者来说,将自己开发的内核代码加入到 Linux 内核中,需要有三个步骤。首先确定把自己开发代码放入到内核的位置;其次,把自己开发的功能增加到 Linux 内核的配置选项中,使用户能够选择此功能;最后,构建子目录 Makefile,根据用户的选择,将相应的代码编译到最终生成的 Linux 内核中去。下面,我们就通过一个简单的例子--test driver,结合前面学到的知识,来说明如何向 Linux 内核中增加新的功能。

  4.1 目录结构

  test driver 放置在 drivers/test/ 目录下:

$cd drivers/test
$tree
.
|-- Config.in
|-- Makefile
|-- cpu
|  |-- Makefile
|  `-- cpu.c
|-- test.c
|-- test_client.c
|-- test_ioctl.c
|-- test_proc.c
|-- test_queue.c
`-- test
  |-- Makefile
  `-- test.c

  4.2 配置文件

  1) drivers/test/Config.in

#
# TEST driver configuration
#
mainmenu_option next_comment
comment 'TEST Driver'
bool 'TEST support' CONFIG_TEST
if [ "$CONFIG_TEST" = "y" ]; then
 tristate 'TEST user-space interface' CONFIG_TEST_USER
 bool 'TEST CPU ' CONFIG_TEST_CPU
fi
endmenu

  由于 test driver 对于内核来说是新的功能,所以首先创建一个菜单 TEST Driver。然后,显示 "TEST support",等待用户选择;接下来判断用户是否选择了 TEST Driver,如果是(CONFIG_TEST=y),则进一步显示子功能:用户接口与 CPU 功能支持;由于用户接口功能可以被编译成内核模块,所以这里的询问语句使用了 tristate(因为 tristate 的取值范围包括 y、n 和 m,m 就是对应着模块)。

  2) arch/arm/config.in

  在文件的最后加入:source drivers/test/Config.in,将 TEST Driver 子功能的配置纳入到 Linux 内核的配置中。

  4.3 Makefile

  1)drivers/test/Makefile

#    drivers/test/Makefile
#
#    Makefile for the TEST.
#
SUB_DIRS   :=
MOD_SUB_DIRS := $(SUB_DIRS)
ALL_SUB_DIRS := $(SUB_DIRS) cpu
L_TARGET := test.a
export-objs := test.o test_client.o
obj-$(CONFIG_TEST)       += test.o test_queue.o test_client.o
obj-$(CONFIG_TEST_USER)     += test_ioctl.o
obj-$(CONFIG_PROC_FS)      += test_proc.o
subdir-$(CONFIG_TEST_CPU)    += cpu
include $(TOPDIR)/Rules.make
clean:
    for dir in $(ALL_SUB_DIRS); do make -C $$dir clean; done
    rm -f *.[oa] .*.flags

  drivers/test 目录下最终生成的目标文件是 test.a。在 test.c 和 test-client.c 中使用了 EXPORT_SYMBOL 输出符号,所以 test.o 和 test-client.o 位于 export-objs 列表中。然后,根据用户的选择(具体来说,就是配置变量的取值),构建各自对应的 obj-* 列表。由于 TEST Driver 中包一个子目录 cpu,当 CONFIG_TEST_CPU=y(即用户选择了此功能)时,需要将 cpu 目录加入到 subdir-y 列表中。

  2)drivers/test/cpu/Makefile

#    drivers/test/test/Makefile
#
#    Makefile for the TEST CPU
#
SUB_DIRS   :=
MOD_SUB_DIRS := $(SUB_DIRS)
ALL_SUB_DIRS := $(SUB_DIRS)
L_TARGET := test_cpu.a
obj-$(CONFIG_test_CPU)    += cpu.o
include $(TOPDIR)/Rules.make
clean:
    rm -f *.[oa] .*.flags

  3)drivers/Makefile

……
subdir-$(CONFIG_TEST)    += test
……
include $(TOPDIR)/Rules.make

在 drivers/Makefi

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top