首页 > 解决方案 > 内核 VDSO 中的动态内存分配

问题描述

对于一个实验,我需要arch/x86/vdso/vclock_gettime.c通过以下典型方法为内部哈希表检测和分配入口节点。

struct h_struct *phe =  (struct h_struct*) kmalloc(sizeof(struct h_struct), GFP_HIGHUSER);

我已经在内核的其他区域进行了测试和使用,它可以按预期编译和工作。但是,在 VDSO 的情况下,它会导致链接失败

  CC      arch/x86/vdso/vclock_gettime.o
  VDSO    arch/x86/vdso/vdso.so.dbg
arch/x86/vdso/vclock_gettime.o: In function `kmalloc':
linux-3.10.0/include/linux/slub_def.h:171: undefined reference to `kmalloc_caches'
linux-3.10.0/include/linux/slub_def.h:171: undefined reference to `kmem_cache_alloc_trace'
collect2: error: ld returned 1 exit status
  OBJCOPY arch/x86/vdso/vdso.so

我知道 VDSO 有一个特殊的状态,虽然分配在内核空间中,但被映射到每个进程地址空间中的用户空间。

我想知道,是否有更有经验的人可以发现或建议在 vdso 中根据我的需要分配内存的方法。

PSmalloc不能使用,因为这需要stdlib.h导致链接glibc

标签: linux-kerneldynamic-memory-allocationvdso

解决方案


推荐阅读