从内核空间传递地址到用户空间
问题描述:
我正在linux-3.7.6/kernel/sched/core.c中,在schedule()函数中我必须记录进程的pid和tgid,并且必须显示记录值给用户空间。我在内核空间中使用了全局数组结构,我在其中存储tgid和pid,我想如果我可以将数组地址传递给用户空间,然后在用户空间访问tgid和pid的值。从内核空间传递地址到用户空间
typedef struct process{
int pid;
int tgid;
}p;
p proc[100];
有没有一种方法可以将所有存储在结构数组中的数据一次性发送到用户空间? 我之前使用过copy_to_user,但只是在这里卡住了,因为如何发送这些整组值作为copy_to_user以块的形式复制数据?如果有人能够告诉我如何继续前进,我会非常感激。谢谢!
答
我假设你想保持原子性,同时将你的数组复制到用户级别。
一个简单的方法是:
p local_array[100];
preemption_disable(); //disable preemption so you array content will not change,
//because no schedule() can be executed at this time.
memcpy(local_array, array, sizeof(array)); //then we get the consistent snapshot of
//array.
preemption_enable();
copy_to_user(user_buff_ptr, local_array, sizeof(array));
+0
我一定会试一试。谢谢! – Vbp 2013-03-28 16:36:28
使用网络链路将此数据发送到用户空间。 – 2013-03-28 15:09:58
也许我错了,但我从来没有使用netlink之前,所以不知道我是否能够正确实施它。你能否提出一些更幼稚的方法? – Vbp 2013-03-28 16:35:37
好吧,改用内核到用户的内存映射。 – 2013-03-28 16:39:02