如何更改Linux上的tty组(使用buildroot构build)

我正在使用Buildroot为embedded式设备开发Linux Kernel 3.14.28版本。

/dev/ ,所有的ttys都是root:root而不是root:dialout像标准的Linux一样root:dialout 。 因此,不能以root身份login任何ttyX。

如何将tty组永久更改为root:dialout ? 我尝试用chown命令改变它,但是在重新启动时它又变成了root:root

devtmpfs总是将权限设置为0600并将其设置为udev (或其后的任何运行)来维护它们 。 它的源代码确认没有办法明确地覆盖它( 在某些情况下, tty设备驱动程序无条件地重写mode )。

假设你正在使用Buildroot的默认busybox作为init ,有一种方法可以在busyboxinittab使用下面的附加行来做到这一点(附加=必须存在,除了必要的行(或其替代品)没有inittab – 因为它们不再是隐含的那么有)

 ::sysinit:<path_to_your_script> 

脚本调用chownchmod循环。

但是,最好在现有的/etc/init.d/rcS (默认情况下,它也由BusyBox的initsysinit运行)。

正如你从buildroot的/etc/init.d/rcS看到的 ,你所要做的就是创建一个脚本/etc/init.d/S<whatever>.sh <whatever> /etc/init.d/S<whatever>.sh (其中“whatever”将它放到所需的位置在/etc/init.d/S??*输出中)用你的命令:

 for tty in /dev/tty*; do chown root:dialout "$tty" chmod ug+rw "$tty" #do not touch other bits done unset tty 

TL; DR :选择mdev作为您的设备管理器,并使用tty组而不是dialout

内核的devtmpfs使用默认名称,所有者和权限创建设备节点。 它还会在创建节点时发送一个uevent ,从而允许uevent处理程序更改名称,所有权或权限,或者执行任何其他所需的操作。 以前这被称为hotplug系统,但现在它更通用。

Buildroot提供了三个uevent处理程序之间的选择:作为busybox一部分的mdev ,作为独立udev分叉的eudev和作为systemd init系统一部分的udev 。 这些处理程序配置了规则文件,用于指定在出现特定类型的设备时如何处理。

为了您的具体需求, mdev是最好的选择,因为它非常简单,易于理解,不占用太多空间,并且默认配置足够。 在Buildroot的菜单配置中 ,进入系统配置/ dev管理,然后选择Dynamic使用mdev 。 然后重建你的根文件系统。 现在它将被填充mdev二进制文件( busybox一部分),一个启动它的初始化脚本,以及/etc/mdev.conf的默认规则文件。 这个默认文件包含:

 tty[0-9]* root:tty 660 

这意味着tty设备将把它们的组更改为tty并将它们的权限分组读取和写入。 所以你可以确保登录的用户属于tty组,Bob是你的叔叔。

如果默认的mdev.conf文件对于你来说是不够的(例如,如果你真的需要将该组dialout ),那么你可以创建一个文件系统覆盖,将package/busybox/mdev.conf复制到 /etc/mdev.conf并根据需要进行修改。 有关mdev.conf格式的完整文档可以在busybox源文件中找到。