我的问题是有关Linux内核空间中结构的用法和行为。 我正在编写一个字符设备驱动程序:
struct LEDs{
int red_l;
};
ssize_t gmem_driver_write(struct file *file, const char *buf,
size_t count, loff_t *ppos)
{
struct LEDs myled;
printk("Red is: %d \n", myled.red_l);
return 0;
}
static long my_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
{
struct LEDs myled = {};
myled.red_l = 1;
return 0;
}
如果我先调用my_ioctl,然后从用户空间写入,我期望red_l在struct LED中具有值1,然后期望它在write函数中打印。但它会显示垃圾值。
我的问题:由于此逻辑适用于用户空间,因此这里有什么不同之处吗?如何使其在Linux内核空间中工作?
答案 0 :(得分:3)
该逻辑在用户空间和内核空间的工作原理相同;即,这两种方法都不起作用。在不同的函数中声明两个具有相同名称的变量不会使它们成为相同的变量。