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选项 的相关文章

  • ARM 浮点运算详解

    一 早期ARM上的浮点模拟器 早期的ARM没有协处理器 所以浮点运算是由CPU来模拟的 即所需浮点运算均在浮点运算模拟器 float math emulation 上进行 需要的浮点运算 常要耗费数千个循环才能执行完毕 因此特别缓慢 直到今
  • linux内存管理

    原文链接 https blog csdn net wwwlyj123321 article details 128241134 一 内存管理简述 在Linux内核中 RAM会将其中一部分永远分配给内核 用来存放Linux内核源码以及一些静态
  • ARM架构内核启动分析-head.S(1.1、vmlinux.lds 链接脚本分析)

    ARM架构内核启动分析 一 start kernel之前 首先需要明确的是 内核镜像在被解压之后执行 是执行哪段代码 这是个重要的问题 平时在编译生成应用程序或内核模块时 我们无需考虑链接的具体细节 如代码和数据放在哪里 代码执行入口在哪等
  • 第十四章 netlink机制--基于Linux3.10

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

    接触音频驱动工作也有2年的时间了 这这段时间里深刻感受了手机行业的更新换代是MB的迅速 2年的时间里 从TI到QUALCOMM 从android2 1到4 2 从单核到四核 经我参与的项目就有20款 日子是相当的难过 今天回头来说一些我在研
  • bootloader详解

    一 bootloader介绍 bootloader是硬件在加电开机后 除BIOS固化程序外最先运行的软件 负责载入真正的操作系统 可以理解为一个超小型的os 目前在Linux平台中主要有lilo grub等 在Windows平台上主要有nt
  • sd卡详细资料

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

    在上文Linux设备模型 3 Kobject 实例中 我们介绍到如何使用default attribute Default attribute使用很方便 但不够灵活 比如上篇文章在Kobject一节中提到的那个例子 name和val这两个a
  • UBOOT命令总结(转)

    UBOOT命令总结 转 很好的UBOOT命令总结 我在起步时就是看的这篇东西 熟悉了以后就用 看自带帮助就行 Printenv 打印环境变量 Uboot gt printenvbaudrate 115200ipaddr 192 168 1
  • 构建Buildroot根文件系统(I.MX6ULL)

    Busybox构建的根文件系统只有一些常用的命令和文件 Buildroot不仅集成了 busybox 而且还集成了各种常见的第三方库和软件 开发环境 Buildroot 版本 buildroot 2019 02 6 tar gz 虚拟机 4
  • Linux设备驱动-procfs

    在Linux中 procfs是进程文件系统 file system 的缩写 包含一个伪文件系统 启动时动态生成的文件系统 可用于内核层和用户层交互信息 这个文件系统通常被挂载到 proc 目录 由于 proc 不是一个真正的文件系统 它也就
  • Linux内核分析:输入输出,字符与块设备 31-35

    CPU 并不直接和设备打交道 它们中间有一个叫作设备控制器 Device Control Unit 的组件 例如硬盘有磁盘控制器 USB 有 USB 控制器 显示器有视频控制器等 这些控制器就像代理商一样 它们知道如何应对硬盘 鼠标 键盘
  • linux设备驱动归纳总结(四):3.抢占和上下文切换

    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 上一节介绍了进程调度的一些基本概念 并简单介绍了在没有抢占的情况下
  • ubuntu从内核源代码编译内核及替换内核

    1 下载ubuntu对应的linux内核源代码 apt catch search linux source 查看当前linux内核版本 apt get install linux source lt 对应的内核版本好 gt 下载对应的lin
  • linux设备驱动makefile入门解析

    以下内容仅作参考 能力有限 如有错误还请纠正 对于一个普通的linux设备驱动模块 以下是一个经典的makefile代码 使用下面这个makefile可以 完成大部分驱动的编译 使用时只需要修改一下要编译生成的驱动名称即可 只需修改obj
  • 第九章 tcp拥塞控制--基于Linux3.10

    下载地址 http download csdn net detail shichaog 8620701 Linux提供丰富的拥塞控制算法 这些算法包括Vegas Reno HSCTP High Speed TCP Westwood BIC
  • int $0x80系统调用的idea

    1 基础知识 用户态和内核态 一般现代CPU都有几种不同的指令执行级别 Linux总共划分为4个指令执行级别 内核运行在0级别上 1 2级别默认不运行 用户程序运行在3级别上 在内核指令执行级别上 代码可以执行特权指令 访问任意的物理地址
  • Linux进程管理:deadline调度器

    一 概述 实时系统是这样的一种计算系统 当事件发生后 它必须在确定的时间范围内做出响应 在实时系统中 产生正确的结果不仅依赖于系统正确的逻辑动作 而且依赖于逻辑动作的时序 换句话说 当系统收到某个请求 会做出相应的动作以响应该请求 想要保证
  • 【RK3399】I3399烧写Android系统详解

    00 目录 文章目录 00 目录 01 驱动安装 02 Android镜像文件烧写 03 问题讨论 04 附录 01 驱动安装 1 1 没有安装驱动的时候 显示感叹号 1 2 解压DriverAssitant v5 1 1 zip 1 3
  • Linux中select poll和epoll的区别

    select的本质是采用32个整数的32位 即32 32 1024来标识 fd值为1 1024 当fd的值超过1024限制时 就必须修改FD SETSIZE的大小 这个时候就可以标识32 max值范围的fd 对于单进程多线程 每个线程处理多

随机推荐

  • 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 请参考 从