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,一经查实,立即删除!

相关文章

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

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

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

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

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…

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

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

$_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;很多人没有网银或者没有…

网络编程常用接口的内核实现----sys_listen()

listen()函数仅在TCP服务器端调用&#xff0c;它做两个事情&#xff1a;将套接字转换到LISTEN状态和设置套接上的最大连接队列。listen()对应的内核实现为sys_listen()&#xff0c;下面开始对其实现作具体的分析。 一、sys_listen()函数 sys_listen()的源码实现及分析如下所示…

linux查看启动配置文件内容,Linux开机启动项的查看和设置方法总结

一、查看开机自启项1.Centos7自启项查看方式从Centos6的chkconfig改为&#xff1a;systemctl list-unit-files2.用grep过滤查看&#xff0c;比如&#xff1a;查看启动项&#xff1a;systemctl list-unit-files | grep enable查看sshd服务自启动情况&#xff1a;systemctl list-…

XP Embedded:不同的用户使用不同的外壳程序

摘要&#xff1a; 能够使应用程序成为外壳程序是 Windows XP Embedded 的关键功能之一。设备可以在自定义外壳程序而不是 Explorer 外壳程序中启动&#xff0c;这提供了两个好处。第一个好处是系统能够更快地启动。Explorer 外壳程序需要花费大量的时间来加载所有支持库和文件…

linux系统中 库分为静态库和,Linux系统中“动态库”和“静态库”那点事儿-【经典好文】...

今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻。在这之前&#xff0c;我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情。在linux操作系统中&#xff0c;普遍使用ELF格式作为可执行程序或者程序生成过程中的中间格式。ELF(Exec…

linux上的壁纸软件下载,Ubuntu 17.10上安装开源壁纸工具Wallch 4.0

在Ubuntu 17.04上安装WallchWallch是一款免费的开源通用壁纸更换器&#xff0c;用户可以在设置的时间更改桌面背景图片。它会在桌面上更改并显示随机图片或维基百科的当天图片。它还具有一个实时地球Living Earth壁纸&#xff0c;每30分钟更换桌面背景&#xff0c;以显示阳光和…

linux find显示文件的基本信息,命令find搜索文件,命令stat查看文件的详细信息

命令stat命令语法stat(选项)(参数)命令描述命令stat用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。命令选项-L&#xff1a;支持符号连接&#xff1b;-f&#xff1a;显示文件系统状态而非文件状态&#xff1b;-t&#xff1a;以简洁方式输出信息&#…

Linux rpm 命令参数使用详解[介绍和应用]

RPM是RedHat Package Manager&#xff08;RedHat软件包管理工具&#xff09;类似Windows里面的“添加/删除程序” rpm 执行安装包 二进制包&#xff08;Binary&#xff09;以及源代码包&#xff08;Source&#xff09;两种。二进制包可以直接安装在计算机中&#xff0c;而源代…

Ubuntu10.10的网络配置

有一阵子着实对Ubuntu的网络配置很迷惑&#xff0c;耐下心来仔细上网找了找&#xff0c;有点小心得&#xff0c;总结一下。 先说下大概的配置过程&#xff0c;再去细究一些情况。 一、配置大概分三类&#xff1a;通过配置文件配置、通过命令配置、通过图形化的网络连接菜单配置…

DllMain详解

1 DLL的进入/退出函数 1.1 DllMain简介 跟exe有个main或者WinMain入口函数一样&#xff0c;DLL也有一个入口函数&#xff0c;就是DllMain。以“DllMain”为关键字&#xff0c;来看看MSDN帮助文档怎么介绍这个函数的。 The DllMain function is an optional method of entr…

linux安装tensorflow教程,真正从零开始,TensorFlow详细安装入门图文教程!

在正式开始之前我想说&#xff1a;一定要注意窗口给出的提示(英文)。在实际操作中可能会碰到各种各样的问题&#xff0c;但常见的问题其实都可以根据它的报错信息找到原因&#xff0c;只要上网搜一搜相应的信息就能解决&#xff0c;甚至它自己就会给出解决的建议。如果你发现你…

引路蜂地图API:Gis.Navigation包定义

本包提供了路口到路口实时导航API&#xff0c;从地图服务器返回的路径信息含有文字和路径的地理坐标信息&#xff0c;类NavigationEngine根据路径和当前坐标实现实时导航。它内部含用三个工作线程&#xff1a; Location Monitor 实时监视当前位置坐标是否偏离路径&#xff0c;如…

有些垃圾网站转载都不会

有时会看到我的文章被转载&#xff0c;只要保留作者信息和原文链接&#xff0c;并且忠实于原文都是很欢迎的。这里的忠实原文应该是最基本的了吧&#xff0c;转载嘛&#xff0c;最简单的也就是拷贝粘贴吧&#xff0c;可发现有些垃圾网站&#xff0c;连拷贝粘贴都做不好&#xf…

Linux部署动态网页,linux构建动态WEB服务器安装篇

linux构建动态WEB服务器安装篇发布时间&#xff1a;2008-09-18 08:50:01 作者&#xff1a;佚名 我要评论基本配置安装web服务器:httpd-2.X.X先优化吧根据CPU设置变量#export CFLAGS”-O2 -marchpentium4 -pipe” && CXXFLAGS$CFLAGS“-march”选项表示为特定的cpu…

sip事务与对话

一个事务通常由一个请求开始&#xff0c;由一个响应码&#xff08;a response code&#xff09;结束。VIA头域中的branch参数用来标识一个事务。 对话可以是开始于一个INVITE事务&#xff0c;结束于一个BYE事务。一个对话由FROM&#xff0c;TO和CALL&#xff0d;ID头域的结合所…