如何编译Linux内核模块?

2023-11-23

我正在尝试编译一个简单的 hello world 模块guide我很困惑Makefile实际上正在做。

这里是:

obj-m += hello-1.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

我明白当我输入make命令它将运行all运行的食谱make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules。所以现在它运行在后面给出的路径中找到的Makefile-C标志,但是什么是M=$(PWD) modules do?


这是一个细分:

  1. obj-m:指定构建为可加载内核模块的目标文件。

  2. all and clean: 如果你跑步的话make默认情况下它将运行第一个目标,即all。但我们可以使用make all and make clean同样:它只会运行那些特定的目标。

    例如:

    make all
    # Will run: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    
    make clean
    # Will run: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
    
  3. uname -r:获取当前内核的版本信息。

    示例:对我来说,输出是4.6.0-rc1.

  4. Option -C dir: 切换到目录dir在阅读其中的 makefile 之前。

    Example:

    make -C /lib/modules/$(shell uname -r)/build
    # Will translate to: make -C /lib/modules/4.6.0-rc1/build
    # And execute the Makefile at /lib/modules/4.6.0-rc1/build/Makefile
    
    
  5. $(PWD):获取当前目录的路径。

现在您想使用以下命令创建可加载模块:

make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

您的源代码需要特定的环境才能编译。这就是为什么我们必须使用-C更改构建目录的选项。其中包含所有需要的定义、头文件、宏等。现在,在更改到构建目录后,您可以使用以下命令告诉内核 Makefile 模块所在的位置M=$(PWD).

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

如何编译Linux内核模块? 的相关文章

  • 当 foreach 块的内容具有 Conditional 属性时,C# 编译器是否会对其进行优化?

    我正在工作中编写一些调试代码 我想知道我所做的是否会损害性能 让我们看一下代码 foreach var item in aCollection Debug WriteLine item Name 我知道 Debug 类使用 Conditio
  • ASMX Web 服务,测试表单仅在本地计算机上适用于一种 WebMethod

    我有一个正在测试的 ASMX WebService 并且在大多数方法上我都可以使用测试表单进行测试 然而 我确实有一种方法 测试表上写着 The test form is only available for requests from t
  • 如何部署包含第三方 DLL 文件的 C# 应用程序?

    首先 我对部署了解不多 我希望我的问题有意义 我需要将 C 应用程序安装 部署到多个桌面 它需要一个第三方 DLL 文件 一个 C 库 lpsolve55 dll 对于那些感兴趣的人 它是一个免费的 MIP LP 求解器 请参阅 lpsol
  • 如何将 Visual-Studio 2010 切换到 c++11

    我是 c 编程新手 我想尝试 c 11 新功能 那么我要问的是如何切换 Visual studio 2010 才能编译 c 11 源代码 你可以参考这个表 VC10 中的 C 0x 核心语言功能 表格 http blogs msdn com
  • c 使用 lseek 以相反顺序复制文件

    我已经知道如何从一开始就将一个文件复制到另一个文件 但是我如何修改程序以按相反的顺序复制它 源文件应具有读取访问权限 目标文件应具有读写执行权限 我必须使用文件控制库 例如 FILE A File B should be ABCDEF FE
  • 为什么我在 WinForms 列表框中得到“System.Data.DataRowView”而不是实际值?

    每当我运行代码并尝试查看highscore我在列表框中得到的只是System Data DataRowView 谁能明白为什么吗 Code MySqlConnection myConn new MySqlConnection connStr
  • 为什么 call_usermodehelper 大多数时候都会失败?

    从内核模块中 我尝试使用 call usermodehelper 函数来执行可执行文件 sha1 该可执行文件将文件作为参数并将文件的 SHA1 哈希和写入另一个文件 名为输出 可执行文件完美运行 int result 1 name hom
  • C#生成的csv文件通过电子邮件发送嵌入到Lotus Note中电子邮件的底部

    我遇到了一个奇怪的问题 即使用 NET SmtpClient 通过电子邮件发送的 CSV 附件出现在电子邮件底部 而不是 Lotus Note 中的附件 我只是不知道如何解决这个问题 而且我无法访问客户端计算机 这使得调试非常困难 我可以采
  • 多个线程访问一个变量

    我在正在读的一本教科书中发现了这个问题 下面也给出了解决方案 我无法理解最小值怎么可能是 2 为什么一个线程不能读取 0 而所有其他线程都执行并写入 1 而无论是1还是2 最后写入的线程仍然必须完成自己的循环 int n 0 int mai
  • 使用 catch all 字典属性将 json 序列化为对象

    我想使用 JSON net 反序列化为对象 但将未映射的属性放入字典属性中 是否可以 例如给定 json one 1 two 2 three 3 和 C 类 public class Mapped public int One get se
  • Web 文本编辑器中的 RTF 格式

    网络上是否有支持 RTF 格式文档输入的文本编辑器 我知道这对 webdev 来说有点奇怪 但我需要从数据库中读取 RTF 文档 并在基于 Web 的文本编辑器中对其进行编辑 然后将其存储回 RTF 中 在我在转换工具上投入太多资金之前 我
  • 重定向 std::cout

    我需要一个类 在其对象的生命周期内将一个 ostream 重定向到另一个 ostream 经过一番修补后 我想出了这个 include
  • C# 反序列化过程中创建指向父对象的指针

    我有这样的课程 Serializable public class child public Parent parent Serializable public class Parent public List
  • 禁用实体框架的默认值生成(Code First)

    我数据库中有一个列不能为空 我想将其设置为默认值在数据库中 问题是实体框架似乎自己创建了一个默认值 例如 int gt 0 并且完全忽略了数据库中的默认值约束 有没有办法禁用实体框架的默认值 我发现您可以使用以下属性来装饰您的字段 Data
  • XCode std::thread C++

    对于学校的一个小项目 我需要创建一个简单的客户端 服务器结构 它将在路由器上运行 使用 openWRT 并且我试图在这个应用程序中使用线程做一些事情 我的 C 技能非常有限 所以我在internet https stackoverflow
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • 包含从代码隐藏 (ASP.NET C#) 到 ASPX 中的图像概述的图像列表 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何获取运行或段落的高度

    我找到了Run or Paragraph in FlowDocument现在我需要知道HEIGHT of it i e while navigator CompareTo flowDocViewer Document ContentEnd
  • execlp() 系统调用输出错误

    这个非常简单的例子exec 系统调用 在这里 我试图打电话execlp 两次 但是 我没有得到例外的输出 它仅显示当前目录的第一次调用的输出 include
  • 有没有办法在 C# 中仅通过文件名查找文件?

    我们现在使用绝对路径或相对路径在 C 应用程序中查找文件 如果文件位于当前工作目录下或 路径 之一下 有没有办法仅通过名称查找文件 使用绝对路径不好 使用相对路径也不够好 因为我们可能通过重命名或移动项目文件夹来更改项目结构 如果我们的代码

随机推荐

  • iOS:ZBar SDK unicode 字符

    使用 ZBar 扫描 QR 码时 该过程生成的字符串无法正确显示 unicode 字符 这个单词M rti通过任何免费使用的 QR 代码生成器 例如http qrcode kaywa com 会导致M rti 在其他问题中 1 2 建议在结
  • HTML5文件上传带有多个进度条

    我正在通过 XmlHTTPRequest 和 HTML5 上传多个文件 我的上传工作正常 但我希望每个文件上传都有一个进度条 然而 我的代码对所有文件上传使用最后一个进度条 而不是每次上传都使用自己的进度条 所以这在客户端主要是视觉上的 但
  • 在 python 中打开并读取 excel .xlsx 文件

    我正在尝试使用 python 打开 excel xlsx 文件 但无法找到方法 我尝试使用 pandas 但它想要使用名为 NumPy 的库我尝试安装 numpy 但它仍然可以找不到 numpy 我也尝试过使用 xlrd 库 但得到以下回溯
  • 作为单独实例运行的单例 Azure 函数

    我们有一个 Azure 函数 该函数应该同时处理多个服务总线触发器 我认为正在发生的情况是 它被拆分到多个实例中 这导致了我们端的一些并发问题 我们需要我们的函数充当单例 这样我们就可以一次处理一个请求而不会发生任何冲突 根据我们在本文中的
  • 从 Perl 中的字符串中删除 CRLF (0D 0A)

    我有一个 Perl 脚本 它在 Linux 上使用 XML 文件 偶尔在某些节点值中存在 CRLF 十六进制 0D0A Dos 新行 生成 XML 文件的系统将其全部写入一行 看起来好像它偶尔会认为这太长并将 CRLF 写入其中一个数据元素
  • 从另一个类调用 AsyncTask

    在现有的应用程序中 我有一个带有扩展 AsyncTask 的内部类的活动 如下所示 public class Activity 1 extends BaseActivity new async execute public class as
  • LINQ 中的 LIKE 运算符

    有没有办法比较 C LINQ 表达式中的字符串 类似于 SQL LIKE操作员 假设我有一个字符串列表 在此列表中我想搜索一个字符串 在 SQL 中 我可以这样写 SELECT FROM DischargePort WHERE PortNa
  • 在循环中将字典附加到 pandas 数据框

    我需要在循环中创建一个字典 并将它们附加到 pandas 数据框中 并匹配 dict 的键名称和数据框的列名称 每次迭代中字典的键值对可能不同 一个空的 pandas 数据框df podcast已经在开头定义了字典中所有可能的键 以下是尚未
  • PHP 中从两个并行索引数组创建关联数组的最直接方法是什么?

    给定以下两个索引数组 a array a b c b array red blue green 生成以下关联数组的最直接 有效的方法是什么 result i want array a gt red b gt blue c gt green
  • 如何在 Windows 10 中安装 OpenSSL?

    我有一个问题 关于如何以及必须在 Windows 中安装 OpenSSl 的版本 以便稍后创建证书 安装 SourceForge 中找到的单一版本 openssl 1 0 2d fips 2 0 10 但它无法正确生成文件 官方网站也有ht
  • 如何在 MATLAB 中将匿名函数转换为符号函数?

    假设我有一个匿名函数f x x 2我想将其转换为符号函数 有内置命令吗 你可以将它传递给 SYM f x x 2 g sym f 但是大多数符号函数在收到函数句柄时会自动执行此操作 subs int ETC
  • python中的控制台选择菜单

    我有一个想法 在 python 中创建一个控制台选择菜单 如下所示 Choose an option gt 1 Do something 1 lt 2 Do something 2 3 Do something 3 4 Do somethi
  • java程序抛出异常后如何继续执行?

    我的示例代码如下 public class ExceptionsDemo public static void main String args try int arr 1 2 3 4 5 6 7 8 9 10 for int i arr
  • Matlab中如何显示n位小数

    我想知道如何在Matlab中使用命令设置显示n位小数 n 必须限制在一些预先确定的数字吗 或者可以为 n 指定任意一个 感谢致敬 您可以将数字转换为字符串n小数位使用SPRINTF命令 gt gt x 1 23 gt gt sprintf
  • android - 线性布局bringToFront()

    我的线性布局中有 4 个按钮 我需要将第一个按钮放在前面 正常顺序是 Button 1 Button 2 Button 3 Button 4 但当我打电话时button1 bringToFront 功能 button1将会像这样结束 But
  • MWAA - 气流 - PythonVirtualenvOperator 需要 virtualenv

    我正在使用AWS的MWAA服务 2 2 2 运行各种 DAG 其中大多数都是使用标准 PythonOperator 类型实现的 我将 DAG 与任何共享需求一起捆绑到 S3 存储桶中 然后将 MWAA 指向相关对象和版本 到目前为止一切都进
  • 如何验证 pg_dump archive 生成​​的存档是否正确且有效?

    我正在为我使用的 postgresql 备份 恢复数据pg dump exe and pg restore exe 为了恢复备份文件 我必须删除数据库中的实际表 如果转储文件的某些内容不正常 这可能是 自杀性工作 我可以使用 例如 7z t
  • 如何在 Java 中对 Java 字符串进行转义?

    我正在使用 Java 处理一些 Java 源代码 我正在提取字符串文字并将它们提供给采用字符串的函数 问题是我需要将字符串的未转义版本传递给函数 即这意味着转换 n到换行符 并且 到一个单一的 etc Java API 中是否有一个函数可以
  • 什么时候在 Spark 数据帧上使用 persist() 性能不实用?

    在致力于提高代码性能时 因为我有许多作业失败 中止 我考虑使用persist 每当我需要在许多其他操作中使用相同的数据帧时 我都会在 Spark Dataframe 上使用该函数 在执行此操作并跟踪 Spark 应用程序 UI 中的作业 阶
  • 如何编译Linux内核模块?

    我正在尝试编译一个简单的 hello world 模块guide我很困惑Makefile实际上正在做 这里是 obj m hello 1 o all make C lib modules shell uname r build M PWD