分享

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

 danydany_ok 2010-12-05
Arm Linux交叉编译和连接过程分析(1)

一、配置内核(Kconfig

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

1Make 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/mconfscripts/kconfig/lxdialog/lxdialog这两个应用程序,其中scripts/kconfig/mconf会调用scripts/kconfig/lxdialog/lxdialog来显示一个对话框的。

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

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

2Make menuconfigMakefile的调用关系;

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

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

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

要执行的命令。

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

menuconfigoldconfig等。依赖的前提条件是 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这个程序。

3SEP4020相关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)菜单属性:

3Kconfig语法:

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多