linux-kernel - 内核 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
解决方案
推荐阅读
- node.js - 如何将 POST 请求发送到 Firebase 函数
- python - numpy 数组操作:为什么 numpy 数组的地址与拼接后其子集的地址不同
- version-control - SONAME 库的版本控制最佳实践
- python - 如何从嵌入式 plot.ly 图表中提取数据
- git - 错误:gpg 无法对数据进行致命签名。无法写入提交对象
- java - Lambda 表达式的烟灰调用图
- javascript - React 单元测试 React 传奇
- excel - 从不同的工作表中读取列标题,略有差异
- java - 如何通过命令行创建 jar 文件?
- reactjs - webpack v4 包不引用 .js.gz 块