/home/lmp/lmp/linux-6.3.4/tools/objtool/include/objtool/elf.h:10:18: fatal error: gelf.h: 没有那个文件或目录 compilation terminated. /home/lmp/lmp/linux-6.3.4/tools/build/Makefile.build:97: recipe for target '/home/lmp/lmp/linux-6.3.4/tools/objtool/arch/x86/special.o' failed make[4]: *** [/home/lmp/lmp/linux-6.3.4/tools/objtool/arch/x86/special.o] Error 1 /home/lmp/lmp/linux-6.3.4/tools/build/Makefile.build:140: recipe for target 'arch/x86' failed make[3]: *** [arch/x86] Error 2 Makefile:65: recipe for target '/home/lmp/lmp/linux-6.3.4/tools/objtool/objtool-in.o' failed make[2]: *** [/home/lmp/lmp/linux-6.3.4/tools/objtool/objtool-in.o] Error 2 Makefile:73: recipe for target 'objtool' failed make[1]: *** [objtool] Error 2 Makefile:1438: recipe for target 'tools/objtool' failed make: *** [tools/objtool] Error 2
时间: 2023-07-08 14:48:16 浏览: 352
这个错误提示是由于缺少 gelf.h 文件导致的编译错误。gelf.h 是 ELF 文件格式解析库 libelf 的头文件,objtool 工具需要用到这个库。
你可以按照以下步骤来安装 libelf 库和头文件:
1. 打开终端,输入以下命令更新软件包列表:
```bash
sudo apt-get update
```
2. 然后安装 libelf 库和头文件:
```bash
sudo apt-get install libelf-dev
```
3. 安装完成后,运行以下命令重新编译内核:
```bash
make
```
如果还有其他问题,请告诉我。
相关问题
In file included from /home/lmp/000/module/hello.c:2:0: /home/lmp/000/module/hello.c: In function ‘__exittest’: /home/lmp/000/module/hello.c:14:13: error: return from incompatible pointer type [-Werror=incompatible-pointer-types] module_exit(hello_exit); ^ ./include/linux/module.h:136:11: note: in definition of macro ‘module_exit’ { return exitfn; } \ ^ cc1: some warnings being treated as errors scripts/Makefile.build:337: recipe for target '/home/lmp/000/module/hello.o' failed make[2]: *** [/home/lmp/000/module/hello.o] Error 1 Makefile:1584: recipe for target '_module_/home/lmp/000/module' failed make[1]: *** [_module_/home/lmp/000/module] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-4.15.0-142-generic' Makefile:4: recipe for target 'all' failed make: *** [all] Error 2
这个错误是由于`module_exit()`的使用不正确导致的。`module_exit()`函数需要一个函数指针作为参数。该函数指针指向一个函数,该函数将在卸载模块时被调用。
你的代码中使用的是一个指向`void`类型的函数指针,而实际上它需要一个指向`void __exit`类型的函数指针。
要解决这个问题,请将你的`hello_exit()`函数的返回类型更改为`void __exit`,如下所示:
```
static void __exit hello_exit(void) {
printk(KERN_INFO "Goodbye, world!\n");
}
module_exit(hello_exit);
```
这样做将把`hello_exit()`函数指定为正确的类型,并解决编译错误。
make: Entering directory '/usr/src/linux-headers-4.15.0-142-generic' scripts/Makefile.build:45: /home/lmp/000/module/Makefile: 没有那个文件或目录 make[1]: *** No rule to make target '/home/lmp/000/module/Makefile'。 停止。 Makefile:1584: recipe for target '_module_/home/lmp/000/module' failed make: *** [_module_/home/lmp/000/module] Error 2 make: Leaving directory '/usr/src/linux-headers-4.15.0-142-generic'
这个错误的原因是Makefile文件不存在。你需要在你的模块目录中创建一个Makefile文件,以告诉make如何编译你的模块。
下面是一个简单的Makefile示例:
```
obj-m += my_module.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
```
请将上面的示例代码复制到Makefile中,并将`my_module.o`替换为你的模块文件名。然后执行`make`命令,它将使用Makefile编译你的模块并生成.ko文件。
阅读全文