为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

海绵宝宝撒 2021-04-10 17:09:41
因此,我尝试按照简单的示例加载O'Rielly Linux设备驱动程序手册中的“ Hello World”设备驱动程序。问题是,由于某种原因,除非我在include语句中显式定义头文件的路径,否则它将无法正常工作。即我必须输入#include </usr/src/kernels/3.19.8-100.fc20.i686+PAE/include/linux/init.h>而不只是#include </linux/init.h>这是我的makefileobj-m := hello.oKDIR =/usr/src/kernels/3.19.8-100.fc20.i686+PAE/includeall:    make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modulesclean:    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>我不想这样做,否则它在所有头文件上都返回找不到错误。谢谢你的帮助。万一它对任何人都有帮助,如果我保留显式include语句然后进行编译,则产生的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可以很好地加载。
查看完整描述

3 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

您的编译器应该有一个选项来指定包含的搜索路径。GnuCC(gcc,g++)和CLang(clang,clang++)都使用-I。


如果您的头文件位于/usr/src/kernels/3.19.8-100/include/linux/init.h且您调用,请说g++:


g++ -I /usr/src/kernels/3.19.8-100/include/ source.cpp

然后source.cpp可以#include <linux/init.h>。


现在,您需要学习如何通过OS生成文件向编译器提供该命令行选项以构建模块。这在很多地方都有记录,但是通常是定义一个CPPFLAGS包含附加选项的环境变量:


$ export CPPFLAGS="-I /usr/src/kernels/3.19.8-100/include/"

$ make


查看完整回答
反对 回复 2021-04-16
?
萧十郎

TA贡献1815条经验 获得超13个赞

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


查看完整回答
反对 回复 2021-04-16
  • 3 回答
  • 0 关注
  • 297 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信