LinuxGod

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

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

2023年1月23日 260点热度

首先看书上第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内核源码/内存/文件系统/进程管理/设备 TeXLive和MiKTeX两大主要发行版的镜像配置方法 安全增强式Linux(SELinuxLinux)内核修改和用户空间工具 Ubuntu系统下安装字体和切换默认字体的方法系统 896MB如何转换为物理空间(Linux地址映射的分析) 比较流行的Linux系统图形界面环境-Linux社区创作挑战赛 如何查看Linux硬盘的大小、类型和硬件信息?方法 Linux内核中的虚拟服务器集合:ipvsadm命令 FreeBSD9.0正式版FreeBSD8.0支持amd-64、i386编译器 如何在Ubuntu中创建应用的快捷方式? 如何在linux上安装搜狗输入法进行解释,别忘了关注本站 用集群技术构建网络服务器的发展趋势提出了 搜狗输入法forlinux版本安装指南: Linux中常用的4种虚拟化方法以及它们相应的优缺点 如何在linux下安装搜狗输入法后怎么用的那些神秘传说? Linux虚拟服务器LVS自动化运维方法及运维系统介绍 时间戳和时区1Unix(/)接收的两个推测 安装Linux和Windows双系统的硬盘分区是什么意思? linux怎么安装输入法Linux系统可以通过以下步骤步骤安装 (Unix)Unix时间戳转换公式及Unix操作成时间公式
快速实例学习:修改某个目录下的所有文件的权限bin是什么格式的文件怎么打开bin文件打开方法?科林·沃森:Ubuntu默认是关闭root帐户的,这样做(知识点)chmod系统控制用户对文件权限的命令如何在UbuntuLinux中启用和禁用root用户登录系统?Linux系统chmod命令使用数字修改文件权限的方式有哪些?关于Ubuntu修改密码及密码复杂度策略设置的文章!Ubuntu本地提权漏洞CVE-2017-16995程序员不输入密码进入Linux系统,孩子们永远不知道下一个bugchmod系统变更文件或目录的权限变更的详细资料介绍Linux常用服务器构建-ftp和scp介绍云海天教程:Ubuntu修改密码及密码复杂度策略设置Linux内核更新包配置Ubuntu环境配置环境Android官方网站:OpenHandsetAlliance源码模式:开发源码内核linux中makefile文件 cdeveloper的第21篇原创技术文章建议横屏Makefile简介Fedora17新特色特色说明桌面环境28bata集成了GNOMELinux嵌入式系统智能手机系统的硬件设计Unix或者类Unix文件系统中的每个文件(或者目录)打开U盘什么文件都看不到小编总结了基于嵌入式Linux的智能手机系统软件的设计与实现
学习嵌入式linux编程开发应该要必备什么条件?(一) Linux文件路径查询方法,轻松获取文件位置 【指南】Linux中网络接口卡的10种方法使用 linux ssh 远程登陆 安全外壳协议SecureShellProtocol Linux中已经安装好了mysql命令 关于“管理或人力资源”中“管理学资料”的参考范文 Linux上向普通用户授予sudo权限通常使用adduser命令验证用户 Unix或者类Unix文件系统中的每个文件(或者目录) Linux下的硬件驱动--USB设备(usb-skeleton) 3.3.mmap完成物理地址映射到用户虚拟地址空间上文件对应硬件外设 Linux档案的权限和详细说明与群组的详细介绍 Linux系统中的批量管理进程的工具 虚拟机linux系统下载 什么是linuxLinux(/托瓦兹)的Linux内核 UNIX网络编程卷1:套接字联网API第3版pdf百度网盘下载地址 AMDCPU微码更新可能会执行每个线程的微码更新 VMwareUbuntuserver系统安装教程系统镜像下载地址—> 用集群技术构建网络服务器的发展趋势提出了 Linux下安装Redis服务的方法 问在线客服扫码选项配置选项选项 usb转串口万能驱动UT-810USB2.0TORS232
标签聚合
电脑 sudo 命令 linux系统 linux脚本 虚拟机 linux服务器 软件 文件目录 命令模式
书籍
课程
技术群
技术干货大合集↓
  • 2023年6月 / 4篇
  • 2023年5月 / 93篇
  • 2023年4月 / 90篇
  • 2023年3月 / 129篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.