c/c++语言开发共享如何以编程方式设置我的char设备的权限

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

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

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); } 

    这是TTY驱动程序在创建时将权限设置为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

    试试这个: #include

    int chmod(const char *path, mode_t mode); OR int fchmod(int fd, mode_t mode);

    来源:man -s 2 chmod

    udev有权限规则,你需要在/etc/udev/rules.d下创建它们

    首先尝试这个:

    在文件/etc/udev/udev.conf ,添加以下行:

     # My default permissions default_mode="0660" 

    如果这不起作用,请在/etc/udev/rules.d中添加规则,更多内容请点击此处: http : //www.reactivated.net/writing_udev_rules.html

    需要了解更多c/c++开发分享如何以编程方式设置我的char设备的权限,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享如何以编程方式设置我的char设备的权限相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979688.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐