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、

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这个程序。

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)菜单属性:

(3)Kconfig语法:

 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

struts2标签_select获取action传过来的值

<s:select list"#session.userlist" //从Action传过来的键(属性)的名称headerKey"请选择" //默认选中项的值headerValue"请选择" //默认选中项显示的信息listKey"project_id" …

3500 yuan to php,350 CNY to PHP Currency Converter - 人民币 菲律宾比索 汇率兑换

Exchange350 CNY2612.29 PHPExchange 350 人民币2612.29 菲律宾比索Exchange1750 CNY13061.46 PHPExchange 1750 人民币13061.46 菲律宾比索Exchange3500 CNY26122.92 PHPExchange 3500 人民币26122.92 菲律宾比索Exchange17500 CNY130614.62 PHPExchange 17500 人民币130614.6…

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

二、编译内核镜像过程 1、编译过程中涉及到到文件&#xff1a; /Makefile 编译产生顶层vmlinux镜像文件/scripts/Kbuild.include make过程中到一些基本定义 /scripts/Makefile.lib 编译内核时用到到函数库文件 /scripts/Makefile.build 内核编译到相关命令文件…

sipxecs简介

SipX和SipExchange的代码于2007年合并成SipXecs&#xff0c;北电和NTT等大公司参与构建SipXecs架构。SipXecs是电信级的&#xff0c;针对统一通信UC和呼叫中心Call Center应用&#xff0c;另外&#xff0c;支持设备批量升级&#xff0c;批量配置管理等应用&#xff0c;网管支持…

ASP.NET数据格式的Format-- DataFormatString

我们在呈现数据的时候&#xff0c;不要将未经修饰过的数据呈现给使用者。例如金额一万元&#xff0c;如果我们直接显示「10000」&#xff0c;可能会导致使用者看成一千或十万&#xff0c;造成使用者阅读数据上的困扰。若我们将一万元润饰后输出为「NT$10,000」&#xff0c;不但…

fortran转换 matlab代码,将Fortran77代码转换为Matlab代码以查找特征值/向量

我将Fortran 77中的书面代码转换为Matlab代码。该函数使用QL算法计算矩阵的特征值和特征向量。由于某些原因&#xff0c;我不能在matlab中使用eig函数的结果。这种方法得到的特征值与eig函数得到的特征值不一样&#xff0c;有些相同但有些不同。我不知道问题在哪里。感谢您的任…

linux内核中分配4M以上大内存的方法

在内核中, kmalloc能够分配的最大连续内存为2的(MAX_ORDER-1)次方个page(参见alloc_pages函数, "if (unlikely(order > MAX_ORDER)) return NULL;"), page的大小一般是4K bytes,MAX_ORDER缺省定义为11, 所以如果不修改内核, kmalloc能够分配的最大连续…

sql server 2008学习3 表组织和索引组织

表组织 表包含在一个或多个分区中&#xff0c;每个分区在一个堆或一个聚集索引结构包含数据行。堆页或聚集索引页在一个或多个分配单元中进行管理&#xff0c;具体的分配单元数取决于数据行中的列类型。 聚集表、堆和索引 SQL Server 表使用下列两种方法之一来组织其分区中的数…

BootLoader与Linux内核的参数传递

在嵌入式系统中&#xff0c;BootLoader 是用来初始化硬件&#xff0c;加载内核&#xff0c;传递参数。因为嵌入式系统的硬件环境各不相同&#xff0c;所以嵌入式系统的BootLoader 也各不相同&#xff0c;其中比较通用的是U-Boot&#xff0c;它支持不同的体系结构&#xff0c;如…

怎么跟踪php代码,第九节 PHP 跟踪调试代码 XDebug

>[success] # PHP 跟踪调试代码 XDebug- [下载XDebug扩展](https://xdebug.org/download.php)- 下载对应PHP版本的Xdebug![](https://box.kancloud.cn/c17f1f1e965522c2fe1411e1759e4447_870x524.png)- 线程安全(TS)和非线程安全(NTS)![](https://box.kancloud.cn/24efc18d4…

oracle经纬度换算成xy坐标,经纬度换算成xy坐标(经纬度转换xy坐标算法)

经纬度怎么转换成平面xy坐标&#xff1f;这里面的经纬度转换成xy坐标是多少&#xff1f;求解你把角度的单位设成度分秒制输入不久可以了。具体输入units命令&#xff0c;对话框中会有一个角度的单位制选择&#xff0c;包括度分秒制。例如绘制一条与当前点距离为100&#xff0c;…

Linux内核参数传递Tag

在2.4&#xff08;具体哪个版本记不清了&#xff09;以后的Linux内核中引入了一种新的向内核传递参数的方法tag标记。内核参数通过一个静态的tag链表在启动的时候传递到内核。每个tag的结构为 ----------- tag_header ----------- tag_xxx ----------- 其中tag_header为tag头&a…

ns学习资料

&#xff08;一&#xff09;. NS常用基本网站   1. Maillist个人觉得是寻求问题答案最好的地方。   http://mailman.isi.edu/pipermail/ns-users/   2. 柯老师的网站&#xff0c;包含很多非常实用资源&#xff1a;安装&#xff0c;trace文件分析&#xff0c;源代码分析&a…

Oracle备份standby,Oracle 11g 利用泠备份恢复standby库

Oracle 11g 利用泠备份恢复standby库1 开始在备库上进行泠备份先查好控制文件、redo、undo文件、数据文件的路径1.1 先关闭主库的归档日志传输SQL> ALTER system SETlog_archive_dest_state_2 DEFER;System altered.SQL>1.2 先关闭standby库SQL> shutdown immediate;D…

Linux内核参数的介绍

sysctl -a 可以列出当前所有的Linux内核参数。 /proc/sys/目录下的东西&#xff0c;对应着sysctl -a列出来的。 man 5 proc syscall 在 /arch/i386/kernel/entry.S里面列出来&#xff0c;这个看起来可能更方便

matlab单位阶跃响应与单位脉冲响应,python 已知响应函数求单位阶跃响应或脉冲响应...

最近学习自动控制原理&#xff0c;关于控制系统的一些&#xff0c;老师用布置了一些作业说要用matlab画&#xff0c;我试试python首先介绍一下所使用的库&#xff1a;control matplotlib sympy1.control库&#xff1a;用来计算脉冲响应与阶跃响应Paste_Image.png2.sympy&#x…

SQL SERVER 的SQL语句优化方式小结

SQL SERVER 的SQL语句优化方式小结详细出处参考&#xff1a;http://www.jb51.net/article/19547.htm 1、SQL SERVER 2005的性能工具中有SQL Server Profiler和数据库引擎优化顾问&#xff0c;极好的东东&#xff0c;必须熟练使用。 2、查询SQL语句时打开“显示估计的执行计划”…

u-boot向linux内核传递启动参数

U-BOOT 在启动内核时,会向内核传递一些参数.而这些参数是通过 structtag来传递的。 U-boot 把要传递给 kernel 的东西保存在 struct tag数据结构中&#xff0c;启动 kernel 时&#xff0c;把这个结构体的物理地址传给 kernel&#xff1b;Linux kernel通过这个地址分析出u-boot传…

$_server['php_self'] 漏洞,Discuz! $_SERVER['PHP_SELF'] XSS Vulnerability

在common.inc.php文件的69行&#xff1a;$PHP_SELF $_SERVER[PHP_SELF] ? $_SERVER[PHP_SELF] : $_SERVER[SCRIPT_NAME];$SCRIPT_FILENAME str_replace(\\\\, /, (isset($_SERVER[PATH_TRANSLATED]) ? $_SERVER[PATH_TRANSLATED] : $_SERVER[SCRIPT_FILENAME]));$boardurl …

【前端破解系列之一】一分钟教你破解下载虾米音乐

虾米音乐网站上有很多高品质的音乐和精心组织的精选集&#xff0c;但普通用户只能试听&#xff0c;不能下载&#xff0c;下载的话需要使用“米”&#xff0c;这个“米”除了极少数的新手任务可以获得之外&#xff0c;基本上都要靠付费来购买&#xff0c;很多人没有网银或者没有…