2012-01-02 20 views
9

que estoy tratando de desarrollar controladores de dispositivos Linux y como mi primer intento Estoy tratando de desarrollar un controlador de dispositivo carbón que tiene las siguientes opciones de archivo,¿Cómo crear un dispositivo en/dev automáticamente al cargar el módulo kernel para un controlador de dispositivo?

struct file_operations fops{ 
.open=open_fun, 
.release=release_fun, 
.write=write_fun, 
.read=read_fun, 
}; 

Cuando cargo el controlador utilizando insmod, veo que /proc/devices enumera el controlador en dispositivos Char pero no puedo encontrarlo en /dev. Una búsqueda en Google sugirió el uso de mknod para crear una división en /dev y asociarla con las principales y menores del controlador. Sin embargo, un intento de hacerlo dio como resultado el error "Permiso denegado" incluso cuando se realizó como un superusuario.

¿Qué debo hacer para que el dispositivo aparezca en /dev cuando se carga el módulo kernel? Intenté tanto el más viejo (register_chrdev) como la versión más nueva (cdev_init & cdev_add) de registrar el dispositivo pero ninguno de ellos funciona.

Gracias,
Mir

+1

Ver también: http://stackoverflow.com/questions/5970595/create-a-device-node-in-code/ – Eugene

+0

Posible duplicado de [¿Cómo crear un nodo de dispositivo desde el código init \ _module de un módulo kernel de Linux?] (https://stackoverflow.com/questions/5970595/how-to-create-a-device-node-from-the-init-module-code-of-a-linux-kernel-module) –

Respuesta

3

Pude ver las entradas dentro de /dev después de crear el nodo ejecutando el siguiente comando en la consola.

sudo mknod -m 0666/dev/msio c 22 0

El usuario no era la raíz, así que tuve que usar sudo. Mi nombre de entrada era msio, un dispositivo de caracteres con un número mayor y menor 22, 0 respectivamente.

Le avisaré si esto puede lograrse programáticamente.

+3

Sí, es posible crear un nodo de dispositivo mediante programación. Puedes usar 'class_create()' y 'device_create' para eso. El sistema Udev mencionado por @duskwuff se encargará del resto. – Eugene

+0

@Eugene Gracias. Eso ayuda mucho. Gracias a todos los demás. – Mir

1

CONFIG_DEVTMPFS es bastante agradable si puede usarlo con su distribución. Puede hacer que el kernel lo monte para usted al arranque (CONFIG_DEVTMPFS_MOUNT) o montarlo manualmente (monte -t ​​devtmpfs none/dev).

0

En primer lugar hay que utilizar: sudo mknod/dev/devicename c 81 0

Se crea archivo de dispositivo en/dev, pero hay que darle el permiso de lectura/escritura. para hacerlo,

sudo chmod 777/dev/devicename

Listo !!!

2
  • Incluya el archivo de cabecera Linux/device.h y Linux/kdev_t.h

  • static struct class c_dev;

  • static struct dev_t dev;

Añadir el siguiente API 's dentro __init fuction del controlador de

  • cl = class_create (THIS_MODULE, "x");

donde x - El nombre se mostrará en/sys/class/cuando se cargue el controlador.

  • Utilice device_create() kernel api con device_create (cl, NULL, dev, NULL, "d");

donde d - archivo de dispositivo se creará en/dev.

donde dev es variable para el primer número de dispositivo que se inicializa durante el uso de alloc_chrdev_region API para la asignación dinámica de número importante para el conductor

Para mayor referencia por favor vaya a través del enlace http://opensourceforu.com/2011/04/character-device-files-creation-operations/

Cuestiones relacionadas