He heredado recientemente algún código en el trabajo, esto es antiguo 2.4.x controladores de Linux kernel y me han encargado que funcionen en un kernel 2.6 o posterior. Me estoy ejecutando en OpenSUSE 12.1 con un kernel 3.1.10.¿Cómo puedo establecer permisos de programación en mi dispositivo char
He actualizado el código original de register_chrdev() para usar las llamadas de class_create()/device_create() y puedo ver que mis dispositivos se muestran correctamente en/dev. Mi problema actual es que los permisos para mi dispositivo se están estableciendo a r/w para el único usuario:
crw------- 1 root root 244, 0 Aug 7 07:57 gcanain
sé que puedo "chmod" el archivo a través de línea de comandos, y o puedo configurar los permisos de udev. ... pero de todos modos hay que hacer esto programáticamente, de modo que cuando emita el comando insmod, el dev se montará con las reglas correctas en su lugar ya?
¿Hay alguna API que pueda existir que pueda llamar para hacer esto, alguna de las opciones que me faltan en una de estas API de creación?
Solo para aclarar, parte de la razón por la que no quiero usar las reglas de udev es que no sé los nombres de los controladores del dispositivo antes de tiempo. Los controladores de dispositivos son generados en un bucle y por lo que los nombres se anexan con un dígito, nNumDevs pueden ser casi cualquier cosa:
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);
}
Creo que debería seguir adelante y usar 'udev'. Los permisos del dispositivo suelen ser los pervue del administrador local, que pueden tener diferentes ideas sobre el acceso que el autor del controlador del dispositivo. Puede soltar la configuración predeterminada en '/ etc/udev/rules.d' o algo así. – larsks
Entendido, pero nosotros (mi grupo) somos los administradores del sistema, así que si quería que todo tuviera 777, podría hacerlo. Además, tengo un problema con el uso de rules.d (actualizado en la descripción original), ya que los nombres de los controladores del dispositivo se crean dinámicamente ... a menos que no entienda cómo usar udev. – Mike
@Mike: Pero las reglas de udev pueden usar wildcars para que coincida con el nombre de los dispositivos ('KERNEL ==" foo * "') y también pueden coincidir con el nombre del controlador ('DRIVERS == 'bar' '). – rodrigo