gpt4 book ai didi

linux - linux 中缺少 slab.h 包括 - Ubuntu 16 VM

转载 作者:太空宇宙 更新时间:2023-11-04 11:54:09 25 4
gpt4 key购买 nike

我正在开发 linux 内核驱动程序,需要访问 kmalloc 和 kfree 函数。根据我的研究,这些应该在 slab.h header 中可用,但我的文件系统中不存在该文件。

我尝试使用此解决方案更新我的包含:https://askubuntu.com/questions/75709/how-do-i-install-kernel-header-files但它表明我已经拥有所有相关文件。

我的系统是运行内核 4.15.0 的 VMWare Ubuntu 16.04 安装。

有什么想法吗?

最佳答案

这是一个非常简单的演示模块,调用了 kmallockfree:

演示.c:

#define pr_fmt(fmt) "demo: " fmt

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>

MODULE_LICENSE("GPL");

static int __init demo_init(void) {
void *buf;

buf = kmalloc(1000, GFP_KERNEL);
pr_info("kmalloc returned %p\n", buf);
kfree(buf);
return 0;
}

static void __exit demo_exit(void) {
}

module_init(demo_init);
module_exit(demo_exit);

生成文件:

ifneq ($(KERNELRELEASE),)
# KBuild part of Makefile

obj-m += demo.o

else
# Normal part of Makefile
#

# Kernel build directory specified by KDIR variable
# Default to running kernel's build directory if KDIR not set externally
KDIR ?= "/lib/modules/`uname -r`/build"

all:
$(MAKE) -C "$(KDIR)" M=`pwd` modules

clean:
$(MAKE) -C "$(KDIR)" M=`pwd` clean

endif

您只需运行make 即可为当前运行的内核版本构建模块:

$ make

或者您可以设置 KDIR 为任意内核版本构建模块(在以下示例中由 ${KERNELVER} 定义):

$ make KDIR="/lib/modules/${KERNELVER}/build"

(如果未指定 KDIR,Makefile 会将其设置为当前运行的内核的构建路径:"/lib/modules/`uname -r`/build".)

如果构建成功,那么您肯定已经安装了内核头文件!

要测试模块,运行:

$ sudo /sbin/insmod demo.ko
$ sudo /sbin/rmmod demo
$ sudo dmesg

内核日志中应该有一条类似于此的消息,显示 kmalloc() 调用的返回值:

[TIMESTAMP] demo: kmalloc returned xxxxxxxxxxxxxxx

该模块还调用kfree() 来释放分配的 block 。

关于linux - linux 中缺少 slab.h 包括 - Ubuntu 16 VM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55009861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com