我正在使用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
,有一种方法可以在busybox
的inittab
使用下面的附加行来做到这一点(附加=必须存在,除了必要的行(或其替代品)没有inittab
– 因为它们不再是隐含的那么有) :
::sysinit:<path_to_your_script>
脚本调用chown
和chmod
循环。
但是,最好在现有的/etc/init.d/rcS
(默认情况下,它也由BusyBox的init
在sysinit
运行)。
正如你从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源文件中找到。