【发布时间】:2014-07-20 07:14:09
【问题描述】:
我正在尝试编写一个 Open RG 内核模块,它以给定的时间间隔向用户空间发送一条消息。为此,我需要内核保存一个指向用户空间中将存储此消息的静态缓冲区的指针。我无法将指针发送到内核。
用户空间函数调用是这样的(很明显是简化的):
typedef struct {
char msg[MAX_BOOT_MSG];
} msg_t;
static msg_t common_mem;
void user_space_func() {
openrg_module_ctrl(KOS_CDT_TEST, TEST_IOCTL_SET_COMMON_MEM, &common_mem.msg);
}
内核空间使用情况是这样的:
static void* msg_write;
static int do_ioctl(kos_chardev_t *context, unsigned int cmd,
unsigned long data) {
switch (cmd)
{
case TEST_IOCTL_SET_COMMON_MEM:
received_ioctl = 1;
int ret = copy_from_user(&msg_write, (void *)data, sizeof(char*));
printk("setting common mem to %p, received %d\n", msg_write, ret);
return 0;
}
default:
return -1;
}
输出为setting common mem to 0000000000000000, received 0。我看到 common_mem.msg 不是 NULL。知道我做错了什么吗?
【问题讨论】:
标签: c linux-kernel open-source