您的位置:首页 > 运维架构 > Linux

Arm Linux交叉编译和连接过程分析(1)

2013-11-04 22:38 357 查看

一、配置内核(Kconfig)

我们配置内核是实质是根据众多目录下面的Kconfig文件中组合成我们需要的一个最佳选择,即最终在根目录下面生成的.config文件,而这个文件会在根目录Makefile下调用的。这一部分我们主要讨论整个SEP4020体系在内核中各个Kconfig文件是怎么组织的。

1、Make menuconfig的编译生成过程:

这部分我们将make menuconfig它是怎末运行,和调用哪些文件来实现图形界面的。

我们先来看下我们键入make menuconfig会出现什么:

[root@localhost linux-v3.3]# make menuconfig

HOSTCC scripts/basic/fixdep

HOSTCC scripts/basic/split-include

HOSTCC scripts/basic/docproc

HOSTCC scripts/kconfig/conf.o

HOSTCC scripts/kconfig/kxgettext.o

HOSTCC scripts/kconfig/mconf.o

HOSTCC scripts/kconfig/zconf.tab.o

HOSTLD scripts/kconfig/mconf

HOSTCC scripts/kconfig/lxdialog/checklist.o

HOSTCC scripts/kconfig/lxdialog/inputbox.o

HOSTCC scripts/kconfig/lxdialog/lxdialog.o

HOSTCC scripts/kconfig/lxdialog/menubox.o

HOSTCC scripts/kconfig/lxdialog/msgbox.o

HOSTCC scripts/kconfig/lxdialog/textbox.o

HOSTCC scripts/kconfig/lxdialog/util.o

HOSTCC scripts/kconfig/lxdialog/yesno.o

HOSTLD scripts/kconfig/lxdialog/lxdialog

scripts/kconfig/mconf arch/arm/Kconfig

fs/Kconfig:767:warning: multi-line strings not supported

drivers/usb/gadget/Kconfig:406:warning: type of 'USB_ZERO_HNPTEST' redefined from 'boolean' to 'tristate'

#

# using defaults found in .config

#

*** End of Linux kernel configuration.

*** Execute 'make' to build the kernel or try 'make help'.

从上面我们看到实际上make menuconfig是一个Makefile编译及运行的过程,他先编译了一大堆文件最后会生成scripts/kconfig/mconf和scripts/kconfig/lxdialog/lxdialog这两个应用程序,其中scripts/kconfig/mconf会调用scripts/kconfig/lxdialog/lxdialog来显示一个对话框的。

然后编译好这两个应用程序后,紧接着运行scripts/kconfig/mconf arch/arm/Kconfig

这个应用程序,这个程序就读入了我们SEP4020的体系架构的Kconfig,然后就显示出了我们见到的那个对话框了。

2、Make menuconfig的Makefile的调用关系;

在这部分我们讲下Makefile是怎样一步步构造出menuconfig这个对话框的:

1.2.1在顶层的Makefile中,可以查找到如下几行定义的规则。





这就是生成内核配置界面的命令规则,它也定义了执行的目标和依赖的前提条件,还有

要执行的命令。

这条规则定义的目标为config %config, 通配符%意味着可以包括config、 xconfig、 gconfig、

menuconfig和oldconfig等。依赖的前提条件是 scripts_basic outputmakefile,这些在 Makefile

也是规则定义,主要用来编译生成配置工具。

那么这条规则执行的命令就是执行scripts/kconfig/Makefile指定的规则。相当于:

make -C scripts/kconfig/
%config(-C表示调用scripts/kconfig/目录下的Makefile)

这行命令是使用配置工具解析 arch/$(ARCH)/Kconfig 文件,生成内核配置菜单。

$(ARCH)变量是 Linux 体系结构定义,对应 arch 目录下子目录的名称。Kconfig 包含了内核配置菜单的内容,那么 arch/$(ARCH)/Kconfig 是配置主菜单的文件,调用管理其他各级

Kconfig。根据配置工具的不同,内核也有不同的配置方式。有命令行方式,还有图形界面方式。

1.2.2这些内核配置方式是在scripts/kconfig/Makefile中通过规则定义的。从这个 Makefile中,可以找到下面一些规则定义。如果把变量或者通配符带进去,就可以明白要执行的操作。



执行命令:scripts/kconfig/mconf arch/arm/Kconfig

使用lxdialog工具,生成光标配置菜单。

(1)由于mconf没有产生根据Makefile的隐规则会推导生成mconf程序



mconf-objs := mconf.o zconf.tab.o这个可以让多个c文件生成最后的可执行文件mconf

(2)因为 mconf调用lxdialog工具,所以需要先编译scripts/kconfig/lxdialog目录。



这会生成相应的目标文件最后生成lxdialog程序。

最后运行

$< arch/$(ARCH)/Kconfig这个程序。

3、SEP4020相关Kconfig的关系:

1.3.1 menuconfig的组织关系图:

General setup ---> /init/kconfig

Loadable module support ---> /init/kconfig

[*] Enable loadable module support /block/kconfig

System Type ---> /arch/arm/kconfig

ARM system type (sep4020) ---> /arch/arm/kconfig

SEP4020 Implementations ---> /arch/arm/kconfig

--- Processor Type
/arch/arm/mm/kconfig

--- Processor Features
/arch/arm/mm/kconfig

Bus support ---> /arch/arm/kconfig

Kernel Features --->
/arch/arm/kconfig

[ ] Dynamic tick timer /kernel/time/kconfig

Memory model (Flat Memory) ---> /mm/kconfig

Boot options ---> /arch/arm/kconfig

Floating point emulation ---> /arch/arm/kconfig


Userspace binary formats ---> /arch/arm/kconfig

/fs/kconfig.binfmt

Power management options ---> /arch/arm/kconfig

/kernel/power/kconfig


Networking ---> /net/kconfig

Device Drivers ---> /driver/kconfig

File systems ---> /fs/kconfig

如果大家想新增一个芯片平台和驱动,大家可以根据这个提示去相应的Kconfig文件去添加相应的内容。等make menuconfig后就会在根目录下生成.config文件这个文件会保存所以已经选择的Kconfig选项。



1.3.2 Kconfig的相关知识;

(1)菜单项

多数选项定义一个配置选项,其他选项起辅助组织作用。举例说明单个的配置选项

的定义。

config MODVERSIONS

bool "Set version information on all module symbols"

depends MODULES

help

Usually, modules have to be recompiled whenever you switch to a new

kernel………

每一行开头用关键字“config”,后面可以跟多行。后面的几行定义这个配置选项的属性。

属性包括配置选项的类型、选择提示、依赖关系、帮助文档和缺省值。同名的选项可以重复

定义多次,但是每次定义只有一个选择提示并且类型不冲突。

(2)菜单属性:




(3)Kconfig语法:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: