/dev/tty* 设备节点未被创建,因此串行驱动程序无法正常工作

15

我在嵌入式Linux上运行busybox并使用mdev规则编写了一个简单的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,
};

然而该节点已被创建。

./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
/ #

针对tty的mdev规则如下:

tty 0:5 0666
tty.* 0:0 0620

如何获得设备节点的名称为/dev/ttyC2C


在《Essential Linux Device Drivers》一书中,提到“struct platform_driver”和“struct uart_driver”中的驱动程序名称应相同。我按照要求修改了代码,但仍未弹出/dev/ttyC2C节点。 - manav m-n
当我将.major和.minor添加到结构体uart_driver中,并手动使用“mknod”创建设备节点时,驱动程序可以正常工作。为什么内核(3.4.0)无法自动创建它? - manav m-n
2个回答

9

您可能在混淆两件事。您看到的sysfs节点确实是基于kobject层次结构由内核维护的。但是设备节点完全是一个用户空间问题,可以存在于任何地方(虽然按照惯例位于/dev下)。

因此,手动查找major:minor编号是首要任务:

cat /sys/class/tty/ttyC2C0/dev

接着:

mknod /dev/ttyC2C0 c ${MAJOR} ${MINOR}

然而,您已经表明您正在使用udev的分支mdev来处理设备节点的用户空间创建。但是,匹配规则对我来说看起来很奇怪。我假设mdev有类似于udevadm的功能,可以帮助您编写匹配规则。例如,我的USB tty驱动程序可以通过以下方式查询:

udevadm info -a -p /sys/class/tty/ttyUSB0

浏览生成的树状结构,我可以看到一列udev属性,我可以使用这些属性进行匹配。因此,在我的情况下:

KERNEL=="ttyUSB0", DRIVERS=="ftdi_sio", NAME="ttyUSB0"

虽然我的发行版有更复杂的匹配规则来处理动态设置,但这应该已经足够匹配了。

我猜想,但我认为你想要的映射规则可能会更像:

KERNEL=="ttyC2C", NAME="ttyC2C"

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

2

将特定的mdev规则添加到您的/etc/mdev.conf文件中,例如以下之一,是否可以解决您的问题?

ttyC2C[0-9]+ root:tty 620

或者

ttyC2C[0-9]+ root:tty 620 @/bin/ln -sf $MDEV ttyC2C


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接