我有一个结构像这样:Linux设备驱动程序:从内核复制字符串到用户空间
typedef struct
{
char* BUFFER;
int Size;
}DataTransfer;
在我的IOCTL功能我试图填充结构,并传递给用户空间:
case CHAR_DRIVER_IOCQREAD:
printk(KERN_INFO "In CHAR_DRIVER_IOCQREAD");
dataTransfer.BUFFER = kmalloc(strlen_user("Hello") +1, GFP_KERNEL);
dataTransfer.Size = strlen_user("Hello") +1;
error_count = copy_to_user((DataTransfer*) arg, &dataTransfer, sizeof(dataTransfer));
在用户空间我试图接收结构如下:
DataTransfer dataTransfer;
if(ioctl(fd, CHAR_DRIVER_IOCQREAD, &dataTransfer) < 0)
{
perror("ERROR in ioctl CHAR_DRIVER_IOCQREAD");
}
else
{
printf("Kernel returned size %d \n", dataTransfer.Size);
printf("Kernel returned string %s \n", dataTransfer.BUFFER);
}
这样做的正确方法是什么?
[从内核空间到用户空间复制数据(的可能的复制http://stackoverflow.com/questions/34159622/copy-data-from-kernel-space-用户空间) – levengli
zOMG,你从哪里得到这种风格?! – 0andriy
@ 0andriy我不明白你的意思吗? –