如何在 Linux 上更改 tty 组(使用 buildroot 构建)



我正在使用嵌入式设备的Buildroot构建Linux Kernel 3.14.28。

/dev/中,所有的tty都是root:root的,不像标准的Linux那样root:dialout。因此,如果不记录为root,就无法访问任何ttyX。

如何将 tty 组永久更改为root:dialout?我尝试使用 chown 命令更改它,但它在重新启动时再次变得root:root

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

内核devtmpfs创建具有默认名称、所有者和权限的设备节点。它还会在创建节点时发出uevent,这允许 uevent 处理程序更改名称、所有权或权限,或执行它想要的任何其他操作。以前这被称为热插拔系统,但现在它更加通用。

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

对于您的特定需求,mdev是最佳选择,因为它非常简单,易于理解,不占用太多空间,并且默认配置就足够了。在 Buildroot 的 menuconfig 中,转到 System Configuration/dev management,然后选择使用 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 源代码中找到。

devtmpfs总是设置0600的权限,并使其达到udev(或之后运行的任何内容)来维护它们。它的来源确认无法显式覆盖它(在某些情况下tty设备驱动程序无条件覆盖mode)。

假设您使用 Buildroot 的默认busybox作为init,有一种方法可以在 busyboxinittab中使用以下附加行来做到这一点(additional=必须存在于没有inittab时暗示的基本行(或其替换)之外 - 因为它们不再暗示然后存在)

::sysinit:<path_to_your_script>

脚本调用chown和循环chmod

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

正如你从股票构建根的/etc/init.d/rcS中看到的,你需要做的就是用你的命令创建一个脚本/etc/init.d/S<whatever>.sh(其中"任何"把它放在/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

相关内容

  • 没有找到相关文章

最新更新