- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我一直在尝试在运行 4.15.0-43-generic 并安装了 linux-headers-4.15.0-43 的 Ubuntu 18.04 上编译一个简单的“Hello world”LKM。
这是代码:
#define MODULE
#define LINUX
#define __KERNEL__
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void)
{
printk(KERN_DEBUG "Hello World!");
return 0;
}
module_init( init_module );
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Hello world");
这是我的生成文件:
CC := gcc
WARN := -W -Wall -Wstrict-prototypes -Wmissing-prototypes
INCLUDE := -isystem /lib/modules/`uname -r`/build/include
CFLAGS := -O2 -c $(WARN) $(INCLUDE)
SOURCES := helloworld.c
TARGET := helloworld.ko
all:
$(CC) $(CFLAGS) $(SOURCES) -o $(TARGET)
这些是/lib/modules/$(uname -r)/build/include
的内容
acpi asm-generic clocksource config crypto drm dt-bindings generated keys kvm linux math-emu media memory misc net pcmcia ras rdma scsi soc sound target trace uapi video xen
我得到了一个fatal error: asm/barrier.h: No such file or directory
这是意料之中的,因为 asm
目录不存在。请参阅下面的完整输出:
gcc -O2 -c -W -Wall -Wstrict-prototypes -Wmissing-prototypes -isystem /lib/modules/`uname -r`/build/include helloworld.c -o helloworld.ko
In file included from /usr/src/linux-headers-4.15.0-43/include/linux/init.h:5:0,
from helloworld.c:5:
/usr/src/linux-headers-4.15.0-43/include/linux/compiler.h:247:10: fatal error: asm/barrier.h: No such file or directory
#include <asm/barrier.h>
^~~~~~~~~~~~~~~
compilation terminated.
Makefile:9: recipe for target 'all' failed
make: *** [all] Error 1
对...所以我想如果我创建一个 asm-generic 到 asm 的符号链接(symbolic link)会怎么样?
sudo ln -s /lib/modules/$(uname -r)/build/include/asm-generic /lib/modules/$(uname -r)/build/include/asm
ls -ld/lib/modules/$(uname -r)/build/include/asm
确认链接存在:
lrwxrwxrwx 1 root root 56 Jan 24 19:51 /lib/modules/4.15.0-43-generic/build/include/asm -> /lib/modules/4.15.0-43-generic/build/include/asm-generic
一切正常吗?不 :( 现在它提示找不到 asm/thread_info.h
(在我做了符号链接(symbolic link)之后)。
gcc -O2 -c -W -Wall -Wstrict-prototypes -Wmissing-prototypes -isystem /lib/modules/`uname -r`/build/include helloworld.c -o helloworld.ko
In file included from /lib/modules/4.15.0-43-generic/build/include/asm/preempt.h:5:0,
from /usr/src/linux-headers-4.15.0-43/include/linux/preempt.h:81,
from /usr/src/linux-headers-4.15.0-43/include/linux/spinlock.h:51,
from /usr/src/linux-headers-4.15.0-43/include/linux/seqlock.h:36,
from /usr/src/linux-headers-4.15.0-43/include/linux/time.h:6,
from /usr/src/linux-headers-4.15.0-43/include/linux/stat.h:19,
from /usr/src/linux-headers-4.15.0-43/include/linux/module.h:10,
from helloworld.c:6:
/usr/src/linux-headers-4.15.0-43/include/linux/thread_info.h:38:10: fatal error: asm/thread_info.h: No such file or directory
#include <asm/thread_info.h>
^~~~~~~~~~~~~~~~~~~
compilation terminated.
Makefile:9: recipe for target 'all' failed
make: *** [all] Error 1
我从一开始就知道符号链接(symbolic link)不是个好主意。
我也试过包括 /usr/src/linux-headers-4.15.0-43/include
而不是 /lib/modules/...
但说来话长简而言之,“asm”目录不在 /usr/src/linux-headers-4.15.0-43/include/
和符号链接(symbolic link) /usr/src/linux-headers- 4.15.0-43/include/asm-generic
到 /usr/src/linux-headers-4.15.0-43/include/asm
产生了与上述相同的问题。
我知道问题出在哪里,显然头文件丢失了,但问题是我找不到它们,我从哪里得到它们?软件包已安装:
$ dpkg -l | grep linux-headers-
ii linux-headers-4.15.0-23
ii linux-headers-4.15.0-43
ii linux-headers-4.15.0-43-generic
ii linux-headers-generic
我都试过了,都出现了同样的问题。
最佳答案
好的,多亏了 Tsyvarev,我在进一步阅读后发现了问题 :)
问题的主要原因是我的 Makefile,以下确实对我有用:
obj-m += helloworld.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
这解决了我遇到的原始问题,弹出了一个与此线程无关的新问题,但都已解决。
关于linux - LKM - 无法编译模块 - 缺少头文件但安装了头包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54343325/
我有一位客户希望她的网站适合 iPad/iPhone。该网站有一个用 Flash 制作的菜单标题。我使用 Google 的 Swiffy 将文件转换为 flash_1.html 文件。 当网站检测到
我注意到 boost 库使用了 (.hpp) 的头文件。 我很好奇,因为我看到的大多数源文件都使用普通的 .h 头文件。 是否有任何特殊情况需要使用 .hpp 而不是 .h ? 谢谢 最佳答案 只是约
C需要不同的头文件,如stdio.h、stdlib.h、fcntl.h等,对于不同的函数和结构定义,这是为什么?在幕后,一切都归结为 libc 那么为什么不创建一个包含所有定义和原型(prototyp
我是一名工科学生,不是一个非常强大的程序员。我的一项作业包括使用 openGL 创建 VR 程序。我得到了一个使用 gmtl 的模板(我真的不想重写)标题广泛。该作业需要实现一些 sixense模拟中
我正在尝试编译涉及C和C++文件的应用程序。使用一个特定的 header ,我遇到了问题。有问题的文件(C++头文件)如下所示: #ifndef TASK_H #define TASK_H #incl
我编写了我的项目,将main和c源代码保存在一个文件中,并将头文件保存在codeblocks的include目录中。当我从项目主函数中调用我的函数时,它编译得很好......但是当我将 header
我正在尝试将 .so 库导入到 python 代码中以使用 c 函数。我认为使用 from ctypes import * import ctypes lib = CDLL('./libcaenhvw
我有 2 个重叠的头文件,如下所示: header1.h ... __declspec(dllexport) void abc(); __declspec(dllexport) void xyz(
我有一个大型 Java 库,我想开发几个与该库接口(interface)的较小应用程序。该库将作为 JAR 出现在目标设备的类路径中,但我想尽可能避免在编译时出现整个库(JAR 或源代码)。 (如果重
我必须在我的项目中使用相机制造商提供的库。我正在使用 Visual Studio 2015。我在编写#include 后合并了VS 2015 建议的所有头文件。 我已经在VS 2015中指定了包含文件
我在编写我的项目时遇到了这个问题。我有 2 个 header ,每个 header 都有一个类,它们需要另一个,如下所示。 我以为这只是需要使用前向声明,但仍然不起作用。我没有想法。 寻求帮助:D H
我在一个项目中工作,我想在C++中做反射,所以经过研究我发现最好的方法是解析头文件以获得XML格式的抽象语法树并在反射中使用它。我尝试了很多工具,但没有一个与 visual c++ 2008 或 vi
我尝试从 BufferedImage 制作一个 BMP 文件。这是我尝试在 bmp 文件中写入标题和像素的函数。 我有一个错误,但我找不到那个。我需要你的帮助。 static void writeTo
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: undefined reference to `WinMain@16' 我一直在研究循环双链表。决定创建一个
处理这种情况的最佳做法是什么? class A { private: std::vector derp; public: struct B { ...
上下文:我正在为嵌入式板构建一些代码。它需要安装 Xilinx 工具、Linaro 工具链,然后调用开发板构建目录中的设置 bash 脚本(我们称之为 setup.sh)。 如果我不运行 setup.
我尝试使用头文件和源文件,但遇到了问题。因此,我对我正在尝试做的事情做了一个简化版本,我在 CodeBlocks 中遇到了同样的错误(undefined reference to add(double
当我包含用于将某些程序的整数类型转换为字符串类型的#include 头文件时,我的编译器(GCC for C++)抛出错误。谁能帮我解决这个问题? 这是一个C++的小代码,我是第一次尝试。 #incl
我的头文件中有一些错误,我不知道如何修复,因为我是 C++ 的新手。 这是头文件的代码: #pragma once typedef unsigned int uint; class DCEncrypt
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是一名优秀的程序员,十分优秀!