未为uart串行驱动程序创建/ dev/tty*的设备节点

man*_*m-n 14 linux serial-port linux-device-driver linux-kernel uart

我在使用mdev规则运行busybox的嵌入式Linux中编写了一个简单的UART串行驱动程序.我在驱动程序代码中提供.dev_name了" ttyC2C".

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,
};
Run Code Online (Sandbox Code Playgroud)

但是,节点正在创建中

./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
/ #
Run Code Online (Sandbox Code Playgroud)

tty的mdev规则是:

tty 0:5 0666
tty.* 0:0 0620
Run Code Online (Sandbox Code Playgroud)

如何获取设备节点/dev/ttyC2C?

sts*_*uad 8

你混淆了两件事.您看到的sysfs节点确实由内核基于kobject层次结构维护.然而,设备节点完全是用户空间问题,并且可以存在于任何地方(尽管按照惯例在/ dev下).

所以,您首先会找到主要的:次要数字:

cat /sys/class/tty/ttyC2C0/dev
Run Code Online (Sandbox Code Playgroud)

然后:

mknod /dev/ttyC2C0 c ${MAJOR} ${MINOR}
Run Code Online (Sandbox Code Playgroud)

但是,正如您已经指出的那样,您正在使用udev的fork,mdev来处理设备节点的用户空间创建.但是匹配规则对我来说很奇怪.我假设mdev具有相当于udevadm的功能,它可以帮助您编写匹配规则.例如,可以像这样查询我的USB tty驱动程序:

udevadm info -a -p /sys/class/tty/ttyUSB0
Run Code Online (Sandbox Code Playgroud)

看着生成的树,我可以看到一个可以用来匹配的udev属性列表.所以在我的情况下:

KERNEL=="ttyUSB0", DRIVERS=="ftdi_sio", NAME="ttyUSB0"
Run Code Online (Sandbox Code Playgroud)

足以匹配(虽然我的发行版有更复杂的匹配规则来处理动态设置).

我猜,但我怀疑你想要的映射规则看起来更像:

KERNEL=="ttyC2C", NAME="ttyC2C"
Run Code Online (Sandbox Code Playgroud)

虽然您可能需要更多一点来确保为每个端口创建设备节点(次要编号?).