make -C $(LINUX_KERNEL_PATH) M=$(PWD) modules中的M选项

2023-11-13

新的内核模块编程中的make命令里有个M选项,如下: 
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
M=$(PWD) 意思是返回到当前目录继续读入、执行当前的Makefile。 
请参考:
从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响

这个M是kbuild的东西呢,还是make本来自己就有的东西呢? 
按理说,它是make的一个参数,应该是make的东西,但是make的doc里又找不到, 
如果是kbuild里的东西,它应该怎样来实现呢?

经查证这个M是内核根目录下的Makefile中使用的变量。 
M是makefile脚本中的一个变量(variable) 


# Use make M=dir to specify directory of external module to build
# Old syntax make ... SUBDIRS=$PWD is still supported
# Setting the environment variable KBUILD_EXTMOD take precedence
ifdef SUBDIRS
KBUILD_EXTMOD ?= $(SUBDIRS)
endif
ifdef M //如果没有定义或赋值M,此处M未定义(undefined)

ifeq ("$(origin M)", "command line") //如果定义了,此句用来判断M是否从命令行来

KBUILD_EXTMOD := $(M)
endif
endif


补充一点,"$(MAKE) -C $(KDIR) M=$(PWD)"与"$(MAKE) -C $(KDIR) SUBDIRS =$(PWD)"的作用是等效的,后者是较老的使用方法。推荐使用M而不是SUBDIRS,前者更明确。

通过以上比较可以看到,从Makefile编写来看,在2.6内核下,内核模块编译不必定义复杂的CFLAGS,而且模块中各文件依赖关系的表示简洁清晰。


http://tscsh.blog.163.com/blog/static/2003201032013151544087/


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

make -C $(LINUX_KERNEL_PATH) M=$(PWD) modules中的M选项 的相关文章

  • KVM内核代码结构

    KVM内核代码结构 因为KVM的源代码已经包含在了Linux的内核树中 因此我们只需直接从www kernel org下载代码即可 内核源码包打开较大 解开后目录结构大概是这个样子 涉及KVM的主要有两个目录 virt和arch x86 k
  • linux内存管理

    原文链接 https blog csdn net wwwlyj123321 article details 128241134 一 内存管理简述 在Linux内核中 RAM会将其中一部分永远分配给内核 用来存放Linux内核源码以及一些静态
  • linux-arm电源管理

    一文搞懂ARM SoC功耗控制架构
  • linux kerne新版本编号?

    今天看到linux内核版本号都到3 4了 心中非常惊讶 为什么现在版本飞这么快了 于是一番google 终于找到了两篇文章 大家可以看看 Linux kernel version bumped up to 3 0 as 20th birth
  • BIOS和BootLoader uboot

    BIOS BIOS是英文 Basic Input Output System 的缩略语 直译过来后中文名称就是 基本输入输出系统 其实 它是一组固化到计算机内主板上一个ROM芯片上的程序 它保存着计算机最重要的基本输入输出的程序 系统设置信
  • netpoll浅析

    netpoll只是一种框架和一些接口 只有依赖这个框架和接口实现的netpoll实例 netpoll才能发挥它的功能 类似于kernel中的vfs vfs本身并不会去做具体的文件操作 只是为不同的文件系统提供了一个框架 netpoll不依赖
  • Linux内核同步之RCU机制基础

    Why RCU 1 中断与抢占 当一个进程被时钟中断打断后 kernel运行tick中断处理程序 一般是top half 中断处理程序运行结束后 有两种情况 之前的进程获得CPU继续运行 另一个进程获得了CPU开始运行 而之前的进程则被抢占
  • 第十四章 netlink机制--基于Linux3.10

    Netlink基于网络的消息机制 能够让用户和内核空间进行通信 12 3节提到的ifconfig是使用ioctl方法和内核通信的 而ip命令则是使用netlink和内核通信的 该机制初衷是为网络服务的 但是现在起应用范围已经大大扩展 14
  • sd卡详细资料

    1 简介 SD卡是基于flash的存储卡 SD卡和MMC卡的区别在于初始化过程不同 SD卡的通信协议包括SD总线和SPI两类 SD卡使用卡内智能控制模块进行FLASH操作控制 包括协议 安全算法 数据存取 ECC算法 缺陷处理和分析 电源管
  • Fedora12 Linux启动过程

    1 加载BIOS BIOS Basic Input Output System 是固化到计算机内主板上一个ROM芯片上的程序 保存CPU相关信息 设备启动顺序信息 硬盘信息 内存信息等等 打开计算机电源第一项工作即加载BIOS 进行POST
  • kvm内存管理

    qemu kvm 进程很像一个普通的linux程序 它通过通常的malloc和mmap调用来申请内存 如果一个客户系统想使用1G物理内存 qemu kvm将会做一个malloc 1 lt lt 30 调用 在主机上申请1G的虚拟地址 然而
  • linux设备驱动归纳总结(四):3.抢占和上下文切换

    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 上一节介绍了进程调度的一些基本概念 并简单介绍了在没有抢占的情况下
  • MPC8314 (e300核) uboot 调试

    历经2个多月 完成了MPC8314最小系统 uboot 及Linux内核和根文件系统的调试 这是我第一次从头开始做小系统和内核的移植工作 虽然调试的比较辛苦 但是收获还是很多的 下面就介绍一下调试的过程和一些原理性的东西 1 MPC8314
  • brk和sbrk及内存分配函数相关

    brk和sbrk主要的工作是实现虚拟内存到内存的映射 在GNUC中 内存分配是这样的 每个进程可访问的虚拟内存空间为3G 但在程序编译时 不可能也没必要为程序分配这么大的空间 只分配并不大的数据段空间 程序中动态分配的空间就是从这 一块分配
  • 第九章 tcp拥塞控制--基于Linux3.10

    下载地址 http download csdn net detail shichaog 8620701 Linux提供丰富的拥塞控制算法 这些算法包括Vegas Reno HSCTP High Speed TCP Westwood BIC
  • Linux slab 分配器剖析

    http www ibm com developerworks cn linux l linux slab allocator 了解 Linux 内存管理的方式 良好的操作系统性能部分依赖于操作系统有效管理资源的能力 在过去 堆内存管理器是
  • 多线程(1):互斥锁

    leetcode 1114题 按序打印 给你一个类 public class Foo public void first print first public void second print second public void thi
  • 【RK3399】I3399烧写Android系统详解

    00 目录 文章目录 00 目录 01 驱动安装 02 Android镜像文件烧写 03 问题讨论 04 附录 01 驱动安装 1 1 没有安装驱动的时候 显示感叹号 1 2 解压DriverAssitant v5 1 1 zip 1 3
  • linux内核-软中断与Bottom Half

    中断服务一般都是在将中断请求关闭的条件下执行的 以避免嵌套而使控制复杂化 可是 如果关中断的时间持续太长就可能因为CPU不能及时响应其他的中断请求而使中断 请求 丢失 为此 内核允许在将具体的中断服务程序挂入中断请求队列时将SA INTER
  • linux内核学习(7)粗略走走kbuild Makefile编译流程

    今天看Makefile文件 我头大了 此Makefile非彼Makefile 里面多了很多内置命令 比如origin patsubst等等啦 这些都没听说过 更可恶的是 连网上都没有 可见 这是一件多么伤人的事情 分析这样的 真是让人折寿啊

随机推荐

  • Yii Framework 开发教程(30) Zii组件-ListView 示例

    CListView可以用来显示列表 CListView支持使用自定义的View模板显示列表的的记录 因此可以非常灵活的显示数据的表 这点有点像Android的ListView CListView 支持分页和排序 分页和排序支持使用AJAX实
  • vue项目部署到服务器打不开,Vue 项目部署到服务器的问题解决方法_盂希_前端开发者...

    相信很多小伙伴在用开发的时候 在 如何打包 基于 如何部署 将打包出来的 但有时候 我们会直接将dist文件扔到服务端 出现的问题 打包到服务器后 出现 打包到服务器后 出现空白页的问题 打包到服务器后 出现引入的 打包到服务器后 出现路由
  • MD5,SHA1,SHA256,NTLM,LM等Hash在线破解网站收集

    MD5 http hashchecker de find html http paste2 org p 441222 http r0ot podzemlje net x md5 http hashkiller com index php a
  • i春秋 从0到1CTFer成长之路-CTF中的SQL-1注入

    这是本萌新第一次写博客 作为对前面的学习的总结 如有错误 欢迎各位师傅们指正 如何判断注入类型我就不做过多的解释 不知道同学请移步去学习 手动狗头 CTF中的SQL注入 我采用的是手注 根据经验判断是字符型注入 接下来就来查看有几列 ord
  • 区块链学习7:超级账本项目Hyperledger与Fabric以及二者的关系

    前往老猿Python博文目录 一 超级账本 hyperledger 超级账本 hyperledger 是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目 成员包括金融 银行 物联网 供应链 制造和科技行业的领头羊 h
  • GBDT和随机森林的区别

    GBDT和随机森林的相同点 1 都是由多棵树组成 2 最终的结果都是由多棵树一起决定 GBDT和随机森林的不同点 1 组成随机森林的树可以是分类树 也可以是回归树 而GBDT只由回归树组成 2 组成随机森林的树可以并行生成 而GBDT只能是
  • 关注物联网、关注NB-IoT

    概述 关注物联网 关注NB IoT 跟紧时代步伐 让更多人深入理解5G用意 在当下情况下 今天就来来聊一聊NB IoT 特意整理了一些NB IoT的入门级问题 问 NB IoT的优势是什么 答 支持单小区50K用户连接 做上传用低功耗优势明
  • 【SpringBoot深入浅出系列】SpringBoot集成Eureka及Feign

    目录 前言 一 Eureka 是什么 二 Feign 是什么 三 集成步骤 1 创建 Eureka 服务注册中心 1 添加依赖 2 添加配置 3 启动类添加注解 4 启动服务 2 创建 SpringBoot 项目 provider 1 添加
  • MySQL图书管理系统设计

    目录 一 项目简介 二 项目分析 1 需求分析 图书管理功能 书籍的借出 归还 信息操作功能 人员管理功能 2 需求表信息分析 图书管理需求表分析 信息操作表信息分析 人员信息表 三 项目实施 1 创建图书信息表 2 创建人员信息表 3 创
  • SQL自学,mysql从入门到精通 --- 第 1 天,系统环境搭建,mysql部署

    1 SQL简介 SQL Structured Query Language 是一种用于管理和操作关系型数据库的编程语言 它被用于创建 修改和查询数据库 以及执行诸如数据插入 删除和更新等各种任务 SQL在Web开发 数据分析和数据库管理系统
  • vscode中设置字体大小_史上最全vscode配置使用教程

    点击上方蓝字 前端码头 一起玩耍 工欲善其事 必先利其器 想要优雅且高效的编写代码 必须熟练使用一款前端开发工具 但前端开发工具数不胜数 像HBuilder Sublime Text WebStorm Visual Studio Code
  • JSP( `EL表达式——获取数据` 和 `JSTL标签——展现数据`)(已被替代) 、 `MVC模式` 和 `三层架构`实现增删改查操作

    1 JSP 概述 JSP 全称 Java Server Pages Java 服务端页面 是一种动态的网页技术 其中既可以定义 HTML JS CSS等静态内容 还可以定义 Java代码的动态内容 也就是 JSP HTML Java JSP
  • 【Linux】Ubuntu开启root账户,以及后续连接MobaXterm

    一 开启root账户 1 首先在Ubuntu中打开终端 输入 sudo passwd root 完成root用户密码设置 效果如下图所示 2 输入下列代码 修改文件配置 sudo vim usr share lightdm lightdm
  • python脚本将json文件生成C语言结构体

    1 引言 以前用过python脚本根据excel生成相关C语言代码 其实本质就是文件的读写 主要是逻辑问题 这次尝试将json文件生成C语言的结构体 2 代码 这是一个json文件 生成这个结构体的本质是深度优先遍历 为了适应最复杂的情况
  • 很火的AI换脸怎么做的?方法其实非常简单

    网上很火的AI换脸是怎么做到的呢 将自己的脸部特征换到名人照片中 可以让我们看到自己和名人的组合效果如何 还可以将自己的脸部特征换到历史人物的照片中 看看自己是否有历史人物的气质 这种操作也非常有趣 看看自己是否适应不同的文化氛围 这也是一
  • 参加CSDN第六期编程竞赛感想

    CSDN编程竞赛报名地址 https edu csdn net contest detail 16 请不要删掉此地址 前言 背景 个人虽已经在IT行业工作多年 算法上是小白 没有多少积累 为了学习进步 自我提升 偶然机会看到CSDN举行的第
  • kubernetes 安装dns组件

    DNS 组件历史版本有skydns kube dns和coredns三个 k8s1 3版本之前使用skydns 之后的版本到1 17及之间的版本使用kube dns 目前主要使用coredns DNS组件用于解析k8s集群中service
  • excel+power query进行文本数据拆分和提取

    我的博客之前分享了pandas中文本数据的拆分和提取 由于数据量不大 我们也可以使用excel和它自带的插件power query进行同样的处理 原始数据如下 数据来源见此贴 登录爬取拉勾网2 0 Python selenium 数据准备
  • Python编程:安装自己编写的包

    前言 最近在跑人群计数代码时 有一些自己经常用到的代码 每次要用时再写一次总是很麻烦 所以想着把这部分常用的代码封装成库 以便于随时随地使用 做法 这里使用一种简易的方式 直接将自己编写的代码文件夹复制到python能够搜索到的位置 首先在
  • make -C $(LINUX_KERNEL_PATH) M=$(PWD) modules中的M选项

    新的内核模块编程中的make命令里有个M选项 如下 make C lib modules shell uname r build M PWD modules M PWD 意思是返回到当前目录继续读入 执行当前的Makefile 请参考 从