[英]unable to open filp_open file in kernel module
我正在 C 中构建一个 Linux 模块。 我有两个文件夹kernel_mode和user_mode 。
user_mode.c中的代码:
fd=open("/dev/iot-device", O_RDWR);
printf("call open() fd= %d \n\n",fd);
error("fd");
kernel_mode.c中的代码:
int iot_open(struct inode *inode, struct file *filp)
{
file = filp_open("dev/ttyUSB0", O_RDWR, 0);
printk(KERN_NOTICE "iot_open(): filp_open calls\n");
if (IS_ERR(file) || file == NULL)
{
ret=PTR_ERR(file);
printk(KERN_NOTICE "Cannot open destination file %s || ret=%d\n",path,ret);
return ret;
}
(...)
}
struct file_operations char_fops =
{
.owner = THIS_MODULE,
.open = iot_open,(...)
}
kernel_mode.c我喜欢这个:
制作(我有一个makefile)
insmod kernel_mode.ko
user_mode.c我这样运行:
gcc user_mode.c -o user_mode
./user_mode
终端 output:
call open() fd= -1
fd: Permission denied
dmesg :
iot_open(): open() open function was called
iot_open(): filp_open calls
Cannot open destination file dev/ttyUSB0 || ret=-2
权限和访问权限
crw------- 1 root root (...) iot-device
crw-rw---- 1 root dialout (...) ttyUSB0
在open()和filp_open()中使用了不同的标志: O_RDONLY或O_RDWR
我错过了什么? 请回应我的要求! 欢迎任何帮助
疏忽是一切的罪魁祸首。
file = filp_open("/dev/ttyUSB0", O_RDONLY, 0);
(没有 /dev)crw-rw---- iot-device
你可以每次都做chmod 。 但我将代码添加到kernel_mode.c :
static int my_uevent(struct device *dev, struct kobj_uevent_env *env)
{
add_uevent_var(env, "DEVMODE=%#o", 0660);
printk(KERN_NOTICE "my_dev_uevent(): Permission is rw-rw---- 0660\n");
return 0;
}
int init_module(void)
{[...]
my_class = class_create(THIS_MODULE, CLASS_NAME);[...]
my_class->dev_uevent = my_uevent;//this is a new code!
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.