Linux 内核 Space 中的结构?
Structs in Linux Kernel Space?
我的问题是关于 Linux 内核 Space 中结构的用法和行为。
我正在编写一个字符设备驱动程序:
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 然后从用户 space 写入,我希望 red_l 在结构 LED 中具有值 1 然后我希望它在写入中打印功能。但它打印出一个垃圾值。
我的问题:由于此逻辑在用户 space 中有效,这里有什么不同之处吗?怎样才能让它在 Linux 内核 Space 中工作?
该逻辑在用户空间和内核空间中的工作原理相同;也就是说,它根本不起作用。在不同的函数中声明两个具有相同名称的变量不会使它们成为相同的变量。
我的问题是关于 Linux 内核 Space 中结构的用法和行为。 我正在编写一个字符设备驱动程序:
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 然后从用户 space 写入,我希望 red_l 在结构 LED 中具有值 1 然后我希望它在写入中打印功能。但它打印出一个垃圾值。
我的问题:由于此逻辑在用户 space 中有效,这里有什么不同之处吗?怎样才能让它在 Linux 内核 Space 中工作?
该逻辑在用户空间和内核空间中的工作原理相同;也就是说,它根本不起作用。在不同的函数中声明两个具有相同名称的变量不会使它们成为相同的变量。