`

多文件内核模块的编写

阅读更多

如果我们有多个c文件,可以在test-objs参数中加入他们的obj文件。接下来就是make了,编译后,生成hello.o文件和hello.ko,还有hello.mod.c及其obj文件,Module.markers Module.sysvers Modules.order 文件。 

  我们对多个*.c文件情况做一个说明:我们希望创建一个模块的名字叫做hello,我们有三个*.c文件,分别为hello.c, file1.c和file2.c。这样是有问题的,因为在Makefile中obj-m := hello.o,这是指定模块的名称, hello-objs := file1.o file2.o hello.o,这里是说hello模块包括的的obj文件,如果我们在里面不填写hello.o,那么实际并没有编译hello.c,而是在CC[M] file1.o和file2.o,通过LD[M]得到模块hello.o,如果我们在这里填写了hello.o,那么在obj-m和hello-objs中都含有hello.o,对make来讲会产生循环和混淆,因此也不能这样书写。如果我们由多个C文件来构造一个模块,那么C文件的名字不能和模块名字一样, 在这个例子中我们可以将hello.c改名为hello_main.c,在Makefile中obj-m := hello.o,hello-objs = file1.o file2.o hello_main.o。

 

最重要的一点,多文件的时候模块是由多个目标文件链接而成,而不是某一个,所以模块名不能用其中的某一个文件生成的目标名,而应该另起一个模块名。

 

分享到:
评论

相关推荐

    Linux内核模块与_proc文件系统.pdf

    Linux 内核模块是 Linux 操作系统中的一种关键机制,它允许用户动态地修改内核、加载自己编写的程序,而不需要每次都编译内核。这种机制极大地改善了 Linux 的灵活性。 Linux 内核模块可以分为静态可加载模块和动态...

    Linux编写内核模块新增系统调用遍历进程树--基于Ubuntu20.04.03LTS实现

    实验目标:在Linux内核中增加一个系统调用,并编写对应的linux应用程序。利用该系统调用能够遍历系统当前所有进程的任务描述符,并按进程父子关系将这些描述符所对应的进程id(PID)组织成树形结构显示。 实验环境:...

    linux内核模块的编译详解(有图)

    linux内核模块的编译。 1、准备内核模块源码 2、编写Makefile文件 3、编译模块 4、加载/卸载模块 5、加载模块时传递参数 6、总结

    linux内核模块编程-----源码

    linux内核模块编程,编写一个模块,实现文件的读取。

    北邮操作系统课程设计-基于linux的内核模块编写+源代码+文档说明+实验报告

    北邮操作系统课程设计——基于linux的内核模块编写+源代码+文档说明+实验报告 - 小白不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审...

    使用cmake创建linux内核模块,多种arch适用(可在vscode中使用)

    按照cmake的编写代码习惯即可,cmake会自动生成对应的Makefile文件. 1.在json文件中根据需求调整设置; 2.设置后,在vscode左下角选择工具链类型; 3.点击cmake的build工具图标,生成.ko文件; 4.清理l临时文件,在源码目录...

    基于linux3.16内核模块,手动创建设备节点

    基于linux3.16内核;驱动模块编写;手动创建设备节点。

    sysfs文件接口修改内核模块变量值-fasync源码

    首先是设备驱动程序的代码,在代码中,我们将这段代码是用C语言编写的Linux内核模块,用于控制LED。它包含了几个来自Linux内核的头文件,如linux/types.h、linux/kernel.h和linux/delay.h。代码定义了一个led_struct...

    嵌入式操作系统作业,Linux自定义内核模块编写,Linux进程间通信(Socket IPC)+源代码+文档说明

    嵌入式操作系统作业,Linux自定义内核模块编写,Linux进程间通信(Socket IPC)+源代码+文档说明 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源...

    Windows内核模块中的写文件操作

    在编写Windows驱动程序的时候,往往使用debugview打印日志,单步跟踪驱动程序的执行情况,但是,有时候debugview的功能还不够,需要手动将驱动程序里的某些信息写入本地文件,该程序就是实现这个功能

    基于内核模块的测试代码编写

    压缩卡驱动提供给文件系统KAPI,...由于KAPI是内核态的接口,无法在用户态直接调用,因此要最终完成对KAPI的更直接测试,需要借助编写内核模块(Kernel Module),来实现用户进程对KAPI的访问;此外,还要解决用户态和内

    内核proc文件系统的代码

    调用了linux内核提供的操作proc文件系统接口的函数,一个小例子。

    leetcoderust-CSCI340-KernelHacking:CSCI340操作系统的内核模块编写作业

    leetcode 锈编写内核模块 加州州立大学-奇科 通过布莱恩·迪克森 介绍 此作业的目的是让您更加熟悉内核模块的编写方式以及使用这些模块的 ...内核模块的更多信息,我强烈建议阅读这篇对 Linux 可加载内核模

    Linux实验课设报告

    6、Linux内核模块编程:内核模块编程、卸载模块编程、参数模块编程 8、Linux内存管理:编写模块程序、编译、插入模块、查看打印信息 8、Linux设备驱动:编写一个简单的字符设备驱动、查看设备号、编写测试程序 使用...

    Linux下Proc文件系统的编程剖析.pdf

    本文主要介绍 Linux 下 Proc 文件系统的编程剖析,包括对 Proc 文件系统的编程、内核模块的编写和虚拟文件系统的运作原理。Proc 文件系统是 Linux 下一种特殊的文件系统,它允许用户态程序与核心态程序之间的数据...

    Linux内核模块和驱动的编写

    Linux内核模块和驱动的编写 Linux内核模块和驱动的编写是指在Linux操作系统中,开发...Linux内核模块和驱动的编写需要具备一定的多进程编程基础和内核编程知识,并且需要注意内核的版本问题和模块的编译和加载问题。

    linux 内核定时器的使用

    主要是对linux内核中的定时器的使用编写的一个例子,代码中包括timer.c和makefile文件,还有一些已经编译的文件,其中有个timer.ko文件就是内核模块文件,在终端使用 insmod timer.ko就可以插入到linux内核(要与...

    linux-kernel-module-rust:在安全的Rust中编写Linux内核模块的框架

    对于大多数目的,如果您有兴趣在Rust中编写Linux内核模块,则应查看 ,这是将该过程贡献给上游内核的一种努力。 这是一个用于在Rust中使用围绕内核接口和原语的安全抽象来编写可加载Linux内核模块的框架。 有关此...

    Linux的内核修改与内核重新编译.pdf

    1. 配置内核:首先,我们需要进入内核源代码所在的目录,然后清除多余的文件,包括不稳定的 “.o” 文件、附属文件以及内核配置文件 “.config”。 2. 恢复内核配置文件:我们可以通过复制系统当前的内核配置文件,...

Global site tag (gtag.js) - Google Analytics