- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我试图在模块初始化时动态分配缓冲区。缓冲区需要始终在范围内,因为它存储用户空间程序与之交互的数据。所以这是我的代码:
static char* file_data
#define MAX_SIZE 256
.
.
.
{
file_data = kzalloc(MAX_SIZE, GFP_KERNEL)
.
.
.
}
但是,当我执行 sizeof file_data
时,它总是返回 4。我做错了什么?
编辑:缓冲区存储来自用户空间程序的输入,但只能存储 4 个字符。
size_t read_file(char* __user buf, size_t count)
{
unsigned int len = 0;
len = copy_to_user(buf, file_data, count);
return count;
}
ssize_t write_file(char* __user buf, size_t count)
{
if(count >= MAX_SIZE)
return -EINVAL;
copy_from_user(file_data, buf,count)
return count;
}
最佳答案
file_data
是一个指针。在 32 位平台上,它的大小为 32 位或 4 个字节。你想知道的是 file_data
指向的数据的大小。您不能为此使用 sizeof
运算符,因为 sizeof
是编译时操作。您不能在运行时动态分配的事物上使用它。
(此外,您已经知道file_data
指向的数据的大小——它是MAX_SIZE
?)
关于linux - kmalloc : only allocating 4 bytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10725777/
我正在编写一个 linux 内核模块,我在其中实现了一个链表。我知道在 linux 内核中有一个列表 API,但是当我实现它时我不知道所以实现它使用 kmalloc() 处理原始指针。运行几个小时后,
我在这个系统调用方面遇到了一些问题,可能在 kmalloc 方面也遇到了一些问题。 嗯,基本上我正在构建一个系统调用,并且这个系统调用和内核编译没有问题。但是当我调用系统调用时,shell 显示了很多
我必须保留大量内核内存(1.5 MB)并与用户空间共享。简而言之,我加载我的内核模块,它使用 kmalloc 在 init 函数中分配一个大内存缓冲区,然后用户程序调用 ioctl 来检索内核内存地址
我正在查看 Linux 版本 4.9.31 还有一个slab和slub的kmalloc()函数 下面是include/linux/slab.h的kmalloc()函数 static __always_
在一项作业中,我必须为一副纸牌创建一个设备驱动程序。但是,我在结构数组上使用 kmalloc 时遇到问题。结构数组,大小为 52。到目前为止,我有以下内容(显然它是不完整的): #include
我正在尝试在内核代码中使用 kmalloc 分配内存,实际上是在排队规则中。我想将内存分配给 q->agg_queue_hdr 其中 q 是一个排队规则而 agg_queue_hdr 是一个结构,所以
假设我使用 kmalloc 分配了一个 uint64_t 数组(假设数组的大小为 32kB)。我有以下问题: 1) 数组是否保证页对齐?2) 数组是否保证缓存/ block 对齐?3)完全没有保证吗?
我发现 kmalloc 返回物理上和虚拟上连续的内存。 我写了一些代码来观察行为,但似乎只有物理内存是连续的而不是虚拟内存。我犯了什么错误吗? #include #include #include
我正在编写一个设备驱动程序,其中包括使用 kmalloc 分配一 block 内存。当用户程序关闭文件时,该内存将被释放。在我的一个实验中,用户程序在没有关闭文件的情况下崩溃了。 有什么东西可以释放这
KMALLOC 是只分配页面大小的内存还是可以分配更少的内存?kmalloc 可以分配的大小是多少?我在哪里可以找到它的描述,因为我到处看它并没有真正说明它分配了多少内存?我想知道 KMALLOC 分
我们有一个应用程序需要大约 1MB 缓冲区来填充硬件设备,因此我们编写了一个使用 kmalloc() 分配缓冲区的内核模块。我们没有使用 dma_alloc_coherent(),因为我们需要操作缓冲
问题的答案How to allocate an executable page in a Linux kernel module?描述如何使用 __vmalloc() 分配可执行内存。这也可以使用 k
我正在阅读设备驱动程序的源代码。 它尝试 kmalloc 16 struct foo spin_lock_bh(&sq->lock); for (i=0; inext = sq->msg_first;
我是 Linux 内核领域的新手,我有这些(愚蠢的)问题,请帮助我正确理解这一点 正如我在 Linux 设备驱动程序一书中读到的那样(使用 GFP_KERNEL) While the current
所以我想知道为什么在检查 kmalloc 的返回值时,我们不使用像这样的“可能”提示: void *ptr = kmalloc(size, GFP_KERNEL) 如果(不太可能(!ptr)) 返回错
我有一个 PCI 设备,它公开了一个 BAR 和用于访问该设备的栏中的几个偏移量。在其中一个 Bar 偏移量上,我需要编写一个 64KB 分配内存。在我的 Linux 驱动程序中,我使用 kmallo
我正在阅读一些关于进程内核空间内存分配的资料。尽管我知道内核有一些少量/有限的内存(通常为 1GB),但为什么在定义大型数组时首选/推荐通过 kmalloc() 动态分配内存?换句话说,不建议在内核空
我想为我的应用程序创建一个内核模块驱动程序。它与可编程逻辑中的 AXIS FIFO 接口(interface),我需要将分配内存的物理地址发送到该设备以用于可编程逻辑。 我的平台驱动程序识别 AXIS
什么是不同的函数:malloc() 和 kmalloc()?它们的区别仅在于: malloc()可以在用户空间和内核空间调用,它分配一个物理碎片化的内存区域 但是kmalloc()只能在内核空间调用,
我一直在到处搜索,找到了解释何时使用 kmalloc 的每个标志的文档。我找到了 this reference这很好地解释了何时使用某些标志,但我找不到其他标志,例如 GFP_HIGHUSER_PAG
我是一名优秀的程序员,十分优秀!