亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在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 關注
  • 337 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號