分页: 1 / 1

linux内核模块创建共享内存

发表于 : 2014-05-03 22:08
nffy
用户空间进程可以通过shmget创建共享内存。
如果两个内核模块要通过共享内存进行通信,一个模块向共享内存里面写入数据,另一个内核模块从该共享内存里读出数据。
请问能否像用户空间进程一样,通过shmget,shmat,shmdt,shmctl等函数建立共享内存?
两个内核模块要通过共享内存进行通信,该如何操作?
O(∩_∩)O谢谢

Re: linux内核模块创建共享内存

发表于 : 2014-05-04 12:58
ttand
好像很深。。。
可能在slab接口里有这种功能

Re: linux内核模块创建共享内存

发表于 : 2014-05-05 16:45
astolia
最简单的方法是直接把符号导出

char mybuffer[100];
EXPORT_SYMBOL(mybuffer);

另外一个模块就直接用就是了

extern char *mybuffer;
mybuffer[0] = 1;

Re: linux内核模块创建共享内存

发表于 : 2014-05-06 9:37
ttand
astolia 写了:最简单的方法是直接把符号导出

char mybuffer[100];
EXPORT_SYMBOL(mybuffer);

另外一个模块就直接用就是了

extern char *mybuffer;
mybuffer[0] = 1;
如果模块在不同的进程上下文中。虚拟地址会不会不同。

Re: linux内核模块创建共享内存

发表于 : 2014-05-09 13:52
weicz
nffy 写了:用户空间进程可以通过shmget创建共享内存。
如果两个内核模块要通过共享内存进行通信,一个模块向共享内存里面写入数据,另一个内核模块从该共享内存里读出数据。
请问能否像用户空间进程一样,通过shmget,shmat,shmdt,shmctl等函数建立共享内存?
两个内核模块要通过共享内存进行通信,该如何操作?
O(∩_∩)O谢谢
写一个共享内存的驱动,在/dev下建立节点,任何需要共享的程序在用户空间打开相应的/dev节点对文件操作就行了