Napisałem prosty sterownik szeregowy UART we wbudowanym systemie Linux z systemem busybox z regułami mdev. Podałem .dev_name
jako "ttyC2C
" w moim kodzie sterownika.Węzeł urządzenia w/dev/tty * nie jest tworzony dla sterownika szeregowego 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,
};
Jednak węzeł jest uzyskiwanie tworzony w
./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
/#
Przepisów mdev dla terminala są:
tty 0:5 0666
tty.* 0:0 0620
Jak zdobyć węzeł urządzenia jako /dev/ttyC2C
?
W "Essential Linux sterowników urządzeń" książki, to mówi, że nazwa sterownika w "struct platform_driver" i "struct uart_driver" powinny być takie same. Zmodyfikowałem kod, ale nadal/dev/ttyC2C węzeł nie jest wypełniany. –
Kiedy dodaję .major i .minor do struct uart_driver i utworzę węzeł urządzenia ręcznie za pomocą "mknod", wtedy sterownik działa poprawnie. Dlaczego jądro (3.4.0) nie jest w stanie utworzyć go automatycznie? –