[英]How to change tty group on Linux (build with buildroot)
我正在使用Buildroot為嵌入式設備構建Linux Kernel 3.14.28。
在/dev/
,所有ttys都是root:root
而不是root:dialout
就像標准Linux一樣。 因此,如果沒有以root
身份登錄,則無法訪問任何ttyX。
如何將tty組永久更改為root:dialout
? 我嘗試使用chown命令更改它,但它在重新啟動時再次成為root:root
。
devtmpfs
總是將權限設置為0600
並使其達到udev
(或其后的任何運行)來維護它們 。 它的來源證實沒有辦法明確地覆蓋它( tty
設備驅動程序在某些情況mode
無條件覆蓋mode
)。
假設您正在使用Buildroot的默認busybox
作為init
,有一種方法可以使用busybox
的inittab
的以下附加行(除了必要的行(或者它們的替換)之外還必須存在這些行,這些行是隱含的)沒有inittab
- 因為它們不再隱含,所以有) :
::sysinit:<path_to_your_script>
腳本調用chown
和chmod
循環。
但是,最好在現有的/etc/init.d/rcS
(在默認情況下也由sysinit
的BusyBox的init
運行)中處理這個問題。
從庫存buildroot的/etc/init.d/rcS
可以看到,你需要做的就是創建一個腳本/etc/init.d/S<whatever>.sh
<whatever> /etc/init.d/S<whatever>.sh
(其中“what”將它放入所需的位置在/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處理程序之間的選擇: mdev
,它是busybox的一部分, eudev
是一個獨立的udev
fork,而udev
是systemd
init系統的一部分。 這些處理程序配置有規則文件,這些規則文件指定在出現特定類型的設備時如何處理。
根據您的具體需要, mdev
是最佳選擇,因為它非常簡單,易於理解,不占用太多空間,默認配置就足夠了。 在Buildroot的menuconfig中,轉到系統配置 → / dev管理,然后使用mdev選擇Dynamic 。 然后重建您的根文件系統。 它現在將填充mdev
二進制文件( busybox
一部分),啟動它的init腳本和/etc/mdev.conf
的默認規則文件。 此默認文件包含:
tty[0-9]* root:tty 660
這意味着tty
設備將其組更改為tty
並將其權限更改為分組讀寫。 所以你可以確保登錄的用戶屬於tty
組,Bob是你的叔叔。
如果默認的mdev.conf
文件不夠用(例如,如果你真的需要將組dialout
),那么你可以創建一個文件系統覆蓋,復制package/busybox/mdev.conf
到 /etc/mdev.conf
並根據需要進行修改。 可以在busybox源中找到有關mdev.conf
格式的完整文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.