Ho scritto un semplice driver seriale UART in Linux occupato che esegue busybox con regole mdev. Ho fornito .dev_name
come "ttyC2C
" nel mio codice di guida.Nodo dispositivo su/dev/tty * non viene creato per driver seriale uart
static struct uart_driver serial_omap_reg = {
.owner = THIS_MODULE,
.driver_name = "Omap-C2C-Serial",
.dev_name = "ttyC2C",
.nr = OMAP_MAX_HSUART_PORTS,
.cons = NULL,
};
Tuttavia il nodo è sempre creato in
./sys/devices/platform/omap_c2c_uart.0/tty/ttyC2C0
./sys/class/tty/ttyC2C0
/# ls -l ./sys/class/tty/ttyC2C0
lrwxrwxrwx 1 root 0 0 Jan 1 00:14 ./sys/class/tty/ttyC2C0 -> ../../devices/platform/omap_c2c_uart.0/tty/ttyC2C0
/# ls -l ./sys/devices/platform/omap_c2c_uart.0/tty/ttyC2C0
-r--r--r-- 1 root 0 4096 Jan 1 00:14 dev
lrwxrwxrwx 1 root 0 0 Jan 1 00:14 device -> ../../../omap_c2c_uart.0
drwxr-xr-x 2 root 0 0 Jan 1 00:14 power
lrwxrwxrwx 1 root 0 0 Jan 1 00:14 subsystem -> ../../../../../class/tty
-rw-r--r-- 1 root 0 4096 Jan 1 00:14 uevent
/#
Le regole MDEV per tty sono:
tty 0:5 0666
tty.* 0:0 0620
Come arrivare nodo del dispositivo come /dev/ttyC2C
?
Nel libro "Essenziali Linux Device Drivers", si dice che che il nome del driver in "struct platform_driver" e "struct uart_driver" dovrebbe essere lo stesso. Ho modificato il codice in base, ma il nodo still/dev/ttyC2C non viene popolato. –
Quando aggiungo .major e .minor alla struct uart_driver e creo il nodo del dispositivo manualmente usando "mknod", il driver funziona correttamente. Perché il kernel (3.4.0) non è in grado di crearlo automaticamente? –