c++ - 在 Fedora 20 中查找简单设备驱动程序的头文件

标签 c++ linux linux-device-driver fedora

因此,我尝试按照简单的示例加载 O'Rielly Linux 设备驱动程序手册中的“Hello World”设备驱动程序。问题是,由于某种原因,除非我在包含语句中显式定义头文件的路径,否则它将无法工作;即我必须输入 #include </usr/src/kernels/3.19.8-100.fc20.i686+PAE/include/linux/init.h>而不仅仅是#include </linux/init.h>

这是我的 makefile

obj-m := hello.o
KDIR =/usr/src/kernels/3.19.8-100.fc20.i686+PAE/include
all:
    make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean

并且它会在所有头文件上返回找不到错误,除非明确定义为 #include </usr/src/kernels/3.19.8-100.fc20.i686+PAE/include/linux/init.h>我宁愿不必这样做。

感谢您的帮助。

如果它对任何人有帮助,如果我保留显式包含语句然后编译,则生成的 hello.mod.c 文件如下。

#include <linux/module.h>
#include <linux/vermagic.h>
#include <linux/compiler.h>

MODULE_INFO(vermagic, VERMAGIC_STRING);

__visible struct module __this_module
__attribute__((section(".gnu.linkonce.this_module"))) = {
    .name = KBUILD_MODNAME,
    .init = init_module,
#ifdef CONFIG_MODULE_UNLOAD
    .exit = cleanup_module,
#endif
    .arch = MODULE_ARCH_INIT,
};

static const char __module_depends[]
__used
__attribute__((section(".modinfo"))) =
"depends=";

使用 insmod 可以很好地加载。

最佳答案

KDIR =/usr/src/kernels/3.19.8-100.fc20.i686+PAE/include

我认为你的“KDIR行”是错误的......这个Makefile工作(通常):

obj-m    := hello.o
KDIR    := /lib/modules/$(shell uname -r)/build
PWD    := $(shell pwd)
default:
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
    $(MAKE) -C $(KDIR) M=$(PWD) clean

假设# dnf install kernel kernel-devel → 即kernel-devel 必须与 kernel 完全匹配。

注意:/lib/modules/[version]/{build}/是指向 /usr/src/kernels/[version]/的链接到/usr/src/kernels/[version]/include/.... 该链接是在安装kernel-devel时创建的

关于c++ - 在 Fedora 20 中查找简单设备驱动程序的头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50253787/

相关文章:

c++ - 为什么 usernametwo 总是被跳过?

c++ - 我的 Dll 大小因引入大型 switch case 而过大,如何减小 Dll 大小(MSVC C++)?

linux - 如何限制 Ubuntu 用户访问我的 Web 应用程序文件?

linux-kernel - 多网卡同驱动——性能瓶颈?

linux - Linux下/sys/devices下创建文件

c++ linux设备驱动开发

C++如何使用指针循环移位数组元素

c++ - 从 C++ 中的默认浏览器读取 cookie

linux - x86 程序集从文件读取字节到堆栈但 gdb 找不到字节

linux - insmod : ERROR: could not insert module HelloWorld. ko: 不允许操作