gpt4 book ai didi

c - 如何以编程方式在我的字符设备上设置权限

转载 作者:太空狗 更新时间:2023-10-29 17:07:49 24 4
gpt4 key购买 nike

我最近在工作中继承了一些代码,这是旧的 2.4.X linux 内核驱动程序,我的任务是让它们在更新的内核 2.6 或更高版本上工作。我在 OpenSUSE 12.1 上运行 3.1.10 内核。

我已经更新了 register_chrdev() 的原始代码以使用 class_create()/device_create() 调用,我可以看到我的设备正确显示在/dev 中。我当前的问题是我的设备的权限被设置为仅限用户读/写:

crw-------  1 root root    244,   0 Aug  7 07:57 gcanain

我知道我可以通过命令行“chmod”文件,或者我可以设置 udev 权限...但是无论如何都可以通过编程方式执行此操作,这样当我发出 insmod 命令时,dev 将被挂载是否已经制定了正确的规则?

是否存在任何我可以调用来执行此操作的 API,这些创建 API 之一是否缺少任何选项?

澄清一下,我不想使用 udev 规则的部分原因是我事先不知道设备驱动程序的名称。设备驱动程序在一个循环中产生,因此名称附加一个数字,nNumDevs 几乎可以是任何东西:

for (i = 0; i < nNumDevs; i++) {
strcpy(Modname,GC_ANAIN_MODULE_NAME);
strcat(Modname,"%d");
device_create(c1, NULL, MKDEV(nMajor, GC_ANAIN_MINOR_VERSION+i), NULL, Modname, i);
}

最佳答案

这是使用的方法by the TTY driver在创建时将权限设置为 0666:

static char *tty_devnode(struct device *dev, umode_t *mode)
{
if (!mode)
return NULL;
if (dev->devt == MKDEV(TTYAUX_MAJOR, 0) ||
dev->devt == MKDEV(TTYAUX_MAJOR, 2))
*mode = 0666;
return NULL;
}

static int __init tty_class_init(void)
{
tty_class = class_create(THIS_MODULE, "tty");
if (IS_ERR(tty_class))
return PTR_ERR(tty_class);
tty_class->devnode = tty_devnode;
return 0;
}

struct class 中的 devnode 属性有一个参数指针 mode 允许您设置权限。

当心,当设备被销毁时,mode 可能是 NULL

关于c - 如何以编程方式在我的字符设备上设置权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11846594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com