对于一个实验,我需要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