我最近在工作中继承了一些代码,这是旧的 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);
}