linux内核makefile编译生成内核目标文件的过程,内核Makefile编译的过程的学习之 Makefile...-程序员宅基地

技术标签: linux内核makefile编译生成内核目标文件的过程  

1. make menuconfig

该命令完成的工作 : 生成 .condig 文件

将menuconfg'的配置项全部列在该文件中

2. make

该命令完成的工作 :生成/include/config/auto.conf

将.config中的配置为编进内核或模块的选项定义在这里

如  CONFIG_SMDK2440_CPU2440=y

该文件被包含于 顶层Makefile中

生成/include/linux/autoconf.h

将.config中的配置为编进内核或模块的选项宏定义在这里

如  #define CONFIG_SMDK2440_CPU2440 1

3. 顶层Makefile

顶层Makefile决定哪些子目录被编译进vmlinux镜像

# Objects we will link into vmlinux / subdirs we need to visit

init-y          := init/

drivers-y       := drivers/ sound/

net-y           := net/

libs-y          := lib/

core-y          := usr/

562 core-y          += kernel/ mm/ fs/ ipc/ security/ crypto/ block/

同时顶层Makefile中包含arch/arm/Makefile所以该目录也被编译进内核

理解时可以将该目录看成顶层目录看待 Makefile 也看成顶层Makefile

arch/arm/Makefile  内容如下

94 head-y   := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o

core-y                          += arch/arm/kernel/ arch/arm/mm/ arch/arm/common/

172 core-y                          += $(MACHINE)

173 core-$(CONFIG_ARCH_S3C2410)     += arch/arm/mach-s3c2400/

174 core-$(CONFIG_ARCH_S3C2410)     += arch/arm/mach-s3c2412/

175 core-$(CONFIG_ARCH_S3C2410)     += arch/arm/mach-s3c2440/

176 core-$(CONFIG_ARCH_S3C2410)     += arch/arm/mach-s3c2442/

177 core-$(CONFIG_ARCH_S3C2410)     += arch/arm/mach-s3c2443/

libs-y                          := arch/arm/lib/ $(libs-y)

这里的 CONFIG_ARCH_S3C2410 就是在/include/config/auto.conf 中定义

编译内核时 将依次进入 init——y core——y libs——y driver——y net——y所列的目录中执行

他们的Makefile 每个子目录生成 built-in.o(lib-y 目录中可能生成lib.a)

最后 head-y 所表示的文件和这些 built-in.o lib.a 一起 链接成 vmlinux

4. 子目录下的Makefile

各子目录下的 Makefile 决定该目录下的哪些文件编译进内核或模块 进入哪些子目录的

内容如下 以/net/Makefile为例

obj-y   := nonet.o

obj-$(CONFIG_NET)               := socket.o core/

tmp-$(CONFIG_COMPAT)            := compat.o

obj-$(CONFIG_NET)               += $(tmp-y)

这里的CONFIG_NET 也是在auto.conf里定义

可知 obj -y和 lib-y 同时决定编译哪些文件 进入哪些子目录

5.总结

.config 中定义了一系列的变量  Makefile 根据这些变量  决定哪些

文件被编译进内核 哪些文件被编译成模块 涉及哪些子目录

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39842955/article/details/116608394

智能推荐

windows terminal配置_在 windows terminal 中设置 powershell 的 startingdirect-程序员宅基地

文章浏览阅读244次。Windows 终端是一个面向命令行工具和 shell(如命令提示符、PowerShell 和适用于 Linux 的 Windows 子系统 (WSL))用户的新式终端应用程序。 它的主要功能包括多个选项卡、窗格、Unicode 和 UTF-8 字符支持、GPU 加速文本呈现引擎,还可以用于创建你自己的主题并自定义文本、颜色、背景和快捷键绑定。安装 从 windows store中安装,搜索terminal 有两个,一个microsoft terminal一个windows terminal prev_在 windows terminal 中设置 powershell 的 startingdirectory 值为 null

Java处理post请求中的csv文件(判断文件编码)_java如何判断上传csv文件内部编码格式-程序员宅基地

文章浏览阅读1.6k次。今天在工作中遇到了一个需求,需要用Java处理post请求中的csv文件,由于之前没处理过,遇到了很多问题,特此记录。由于具体的业务会有区别,本文主要介绍了处理逻辑的代码,如需要请结合具体业务与注释做出修改即可。pom坐标<!--GetByteEncode,用来判断二进制字节流的编码--> <dependency> <groupId>com.googlecode.juniversalchardet</groupId>_java如何判断上传csv文件内部编码格式

SFTP服务命令行可以连接成功编辑器插件却连接失败_命令行sftp 可以连,但程序sftp连不行-程序员宅基地

文章浏览阅读1.1k次。最近用phpstorm编辑器的远程内置功能连接远程服务器时,一直报连接失败。 查看系统日志也只是说,连接被拒绝。 在网上找问题时,看到这种情况: 本机网络dns变化也会导致xshell自动断开连接,这种情况通过修改ssh配置文件将其中“UseDNS yes”去掉注释并改成no即可,过程如下vim /etc/ssh/sshd_config ... #ClientAliveInter..._命令行sftp 可以连,但程序sftp连不行

Electron安装配置_electron配置-程序员宅基地

文章浏览阅读747次。Electron把Chromium和HTMLWeb页面整合到了一起,最终成为一个GUI桌面应用,还有其他很强大的功能,如访问硬件、通信等。_electron配置

垃圾模块清理工具小程序功能模块0.33_模块碎片清理模块-程序员宅基地

文章浏览阅读162次。简介:是一款可以帮你快速删除模块本身删除后中数据库残留的模块信息,能够让你快速重新安装相关模块。用途:1.把自己觉得实在用不到的模块从网站目录及数据库中删除2.有的朋友站内装了很多模块,过了段时间发现很多又用不上,浪费了网站空间资源,影响运行速度,想想删除,可除了模块文件夹外,又不知道哪里应该删除。使用方法:模块会列出站内所有除了系统功能之外的模块,删除时将删除模块对应的数据库及模块目录。注意事项:1.模块只能是站长身份才可以使用,其它人没办法使用。2.删除模块后,想在恢复只需要重新_模块碎片清理模块

HTTP文档-程序员宅基地

文章浏览阅读1.4k次。http是客户端与服务端传输文本的一种协议标准http协议是无状态的http协议默认端口是80hrrps协议(加密传输)端口443一、请求方法get(获取信息页面)post(上传,修改,添加,服务端信息)put(修改)delete(删除)head(只返回头信息)trace(回显服务器收到的请求,主要用于测试或诊断)connect(HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器)options(客户端查看服务器性能)二、请求报文建立TCP连接在HT_http文档

随便推点

Android JNI开发-程序员宅基地

文章浏览阅读586次。AndroidStudio进行JNI开发:第一种方法使用Android.mk以及Application.mk生成不同内核下的.文件。1.要将AndroidStudio配置支持ndk开发配置的方法如下: 只要在Android NDK location这个位置配置上ndk的路径,之后就可以使用AndroidStudio进行ndk开发.JNI开发的步骤:1、将使用的方法进行定义,之后使用javac..._android jni开发

vmware下fedora与宿主机windows的FTP通信实验_fedora 虚拟机访问宿主-程序员宅基地

文章浏览阅读646次。闲来无聊,做了个小小的FTP通信实验,也学到了一些专业外的东西。实验目的:利用虚拟机下fedora系统架设FTP服务器,利用宿主机windows系统访问FTP。实验设置:1.fedora下:ip:192.168.0.20 掩码:255.255.255.0 网关:192.168.0.1 与宿主机连接方式位桥接。2.windows下:ip: 192.168.0.1 掩码:255.255.255.0(显然与fedora在同一网段内,形成局域网)。实验软件:1.fedora下服务器软件:vsftpd2.window_fedora 虚拟机访问宿主

Qt界面篇:用Qt制作一个简单的属性页对话框_qt 设计属性窗口-程序员宅基地

文章浏览阅读1k次。Qt界面篇:用Qt制作一个简单的属性页对话框_qt 设计属性窗口

信息项目管理师项目管理领域理论知识_信息管理工程师10大-程序员宅基地

文章浏览阅读499次。一、项目管理分为五大过程组(47个过程),10大知识领域,如下图:典型生命周期模型如下:二、管理过程1. 项目整体管理说明:项目整体管理包括隶属于项目管理过程组的各种过程和项目管理活动进行识别、定义、组合、统一和协调的过程。在项目管理中,整合兼具统一、合并、沟通和建立联系的性质,这些行动应该贯穿项目始终。作用:通过项目整合管理,我们完成了资源分配,平衡竞争性需求,研究各..._信息管理工程师10大

MySQL学习好书推荐-程序员宅基地

文章浏览阅读68次。5、《深入浅出MySQL+数据库开发、优化与管理维护+第2版+唐汉明》1、《MySQL技术内幕 InnoDB存储引擎》4、《千金良方:MySQL性能优化金字塔法则》3、《MySQL是怎样运行的》2、《MySQL排错指南》6、《MySQL大智小技》

改良规则引擎_规则引擎分布式改造-程序员宅基地

文章浏览阅读1.7k次。 规则引擎在国内有过一段时期的热潮,特别是JBoss收购了Drools之后,很多人开始关注规则引擎究竟是什么东西。 通过一定程度的了解,大家知道,规则引擎是一个业务逻辑的配置实现。业务逻辑层的代码一般我们通过程序代码实现,但是程序代码不能直观的体现逻辑,而且修改必须由程序员进行。因此我们希望提供一种实现,能够直观的体现逻辑,并且最好可以由业务人员直接修改。 因此从这个角度来说,需要有一个可供业务人_规则引擎分布式改造

推荐文章

热门文章

相关标签