LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

指令中各个make-C~/linuxM=`pwd编译

2023年1月23日 48点热度

首先看书上第29页的Makefile文件:

linux makefile so_linux makefile文件_makefile linux

当使用指令make -C ~/linux-2.6.10 M=`pwd` modules编译时过程如下图:

linux makefile so_makefile linux_linux makefile文件

我们解释下这个指令中各个参数的含义:

linux makefile so_linux makefile文件_makefile linux

1. -C ~/linux-2.6.10中国linux操作系统,这个参数在“man make”中有解释,就是Change Directory的意思,make命令看到这个参数,就会先转到指定的目录,然后再去这个指定的目录中找Makefile文件开始执行,这里就是linux源码根目录中的Makefile文件了。

linux makefile so_makefile linux_linux makefile文件

2. M=`pwd`,这个参数不是make命令的Option,在“man make”中是找不到的linux makefile文件,这个参数会直接传进Makefile文件中,我们可以在linux源码根目录的Makefile文件中找到相关说明,意思是这个参数指定了要编译的外部模块的目录,有了这个参数,linux编译系统就不会编译linux源码中的代码了,而是直接编译外部模块的代码。

makefile linux_linux makefile文件_linux makefile so

3. modules,这个参数也是直接传给linux根目录中的Makefile文件,意思是编译模块。不加M参数的话,就是编译linux源码中的模块,加M参数的话,就是编译外部模块。这个参数的含义在linux源码的根目录中执行“make help”可以看到说明。

linux makefile so_linux makefile文件_makefile linux

linux makefile so_makefile linux_linux makefile文件

当直接用指令make不加参数编译时过程如下图:

linux makefile文件_makefile linux_linux makefile so

可以看到编译过程增加了一句指令,这句指令就是上边我们用make加参数编译时的那句指令。我们现在来分析make不加参数编译时我们的Makefile文件执行的顺序。

linux makefile so_linux makefile文件_makefile linux

1. 首先make不加参数会直接找到当前目录中的Makefile文件,按顺序执行第2行,看有没有$(KERNELRELEASE)这个变量,这时我们还没有这个变量。

2. 执行第6行、第7行定义两个变量,分别作为-C和M的参数值。

3. 执行第10行,就是我们make加参数编译时的那句指令,这句指令首先改变目录到linux源码根目录中,然后找到linux源码根目录中的Makefile文件,并执行这个Makefile文件。Makefile文件会定义$(KERNELRELEASE)变量linux操作系统怎么样,然后看到modules就知道了是要编译模块,根据M参数找到外部模块中的Makefile文件linux makefile文件,并执行这个Makefile文件。

4. 再次执行到我们Makefile文件的第2行,看有没有$(KERNELRELEASE)这个变量,这个时候有了。

5. 执行到第3行,根据这一行找到hello.c去编译出hello.o。

6. 然后返回到linux源码中的Makefile文件,执行一些其它的操作,比如把hello.o变成hello.ko。

书上也说我们的Makefile文件是执行了两次的,第一次是直接make指令找当前目录中的Makefile文件,第二次是linux源码根目录中的Makefile文件根据M参数找外部模块的Makefile文件。

另外注意,其实/lib/modules/$(shell uname -r)/build是一个软链接,指向了真正的linux源码的根目录。

linux makefile文件_makefile linux_linux makefile so

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: linux系统 linux编译 makefile 源码
最后更新:2023年1月23日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
Linux系统用户系统上的三种类型的帐户的介绍 Linux下的开机启动设置方法是什么?脚本或服务 谷歌更新Linux内核构建的公共内核库:添加对kokoro作业的支持 linux下mysql中可以使用REVOKE语句来删除某个用户的权限 内核的角度来看,调用hotplug和通常的hotplug环境 Linux系统在开机的时候自动加载某些脚本或系统服务 如何在Linux上安装Diablo3操作系统Diablo3 RedHatLinux软件安装包软件后缀为.rpm最初 1.1.4Linux的内核版本和发行版本是什么意思?(图) Linux系统的安装-Ubuntu开启虚拟机安装过程默认注意事项 hello_exit函数代码存放在__init段中(一) 英伟达将LinuxGPU内核模块作为开放源码/MIT双重许可证(图) virtualboxlinux官方版免费、小巧,同时支持Windows、Linux和Mac系统主机 Linux平台下的嵌入式软件要具备说明技能吗? 图解linuxlinux内核结构框图对内核框图有个总体的把握 linux虚拟机的安装步骤是什么?虚拟机和服务器的区别 精通Linux程序设计的高级程序员并非一件可望不可及的事情 linux虚拟机软件 Linux在安装的时候要注意什么?Linux安装注意事项 Python都有哪些应用,学习完成Python后能的工作方向 微软考虑用Rust开发内核的Linux内核-Hartman
Linux5.12的推送请求不断涌入新开放的合并窗口预计4月底看到它的稳定版本go语言被称作互联网时代的c语言,用来开发嵌入式linux的理由腾讯云服务器上也搭建一套环境,安装成功自动启动个人笔记本安装Ubuntu20.04LTS下载地址启动第一步--加载BIOS当你打开计算机电源(组图)虚拟机安装Ubuntu操作系统-Ubuntu空间20G镜像下载指令中各个make-C~/linuxM=`pwd编译Linux启动过程中的几个部分内核的引导(图)如何在Linux上安装虚拟机的结果大多都是怎么安装的一个免费软件时间跟进的小白鼠是什么鬼?专题计算机是如何启动的?、内核操作系统的启动流程学习Linux最简单、最实用的环境就是虚拟机环境(上)基于命令修改文件的权限命令-ld1.Linux磁盘分区和目录Linux发行版本之间的差别很少?国内性价比很高的Linux虚拟主机系统安装的流程是什么?Linux下修改文件权限的权限与所有权的实现就显得很有必要linux到底难不难学呢?推荐可以查看Linux命令大全Linux中修改文件权限的命令、创建者所在组、所有人Linux的内核放在了哪里?/boot的启动目录一览阿里云>社区>主题地图S>查看存储推荐
如何让终端彻底的清静?(图)命令的方法 娃白天睡觉不太踏实,搞一个局域网实时监控,怎么办? 为什么要给Linux二进制文件设置这种权限?(上) 关于Linux学习使用计算机必然会接触操作系统的分析实例分享 Linux内核实现的一种主要磁盘缓存是怎么样的? 审计Linux系统日志可以提供有关网络事件的重要信息(图) Linux上创建WindowsUSB很困难的工具是什么?怎么办? 苹果MacOSX系统刷新DNS的方法,你知道吗? 英伟达显卡驱动怎么安装?显卡怎么用? 第三方源安装显卡驱动安装后不能使用卸载 ln命令:创建硬链接,当使用-s时创建符号链接 一个免费软件时间跟进的小白鼠是什么鬼?专题 GBK乱码的样子有哪些?乱码是怎么回事? 安装Ubuntu.04,安装NVIDIA驱动配置和tensorflow环境 嵌入式Linux软件设计系统设计的一般流程是什么?(图) 【干货】Linux下的线程是什么?(二) Linux内核开机启动程序详解(一):加载加载程序 最常用、最受欢迎的Linux发行版来学习黑客和渗透测试 一段程序是告诉计算机应该如何完成一个任务的程序 Linux下程序的存放目录和安装目录
标签聚合
电脑 unix sudo 命令模式 文件目录 linux服务器 软件 shell linux系统 虚拟机
书籍
课程
技术群
技术干货大合集↓
  • 2023年2月 / 12篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.