今日移植AM1808 UBI文件系統,自己用busybox製作,移植後發現在最後打開終端時顯示: /bin/sh: can't access tty; job controlturned off錯誤。而且無法使用ctrl+c 中斷進程的功能,經過排查發現是inittab啓動腳本的問題。
現將問題記錄如下。
/bin/sh: can't access tty; job controlturned off
該問題實際上是 無法使用真實的tty設備來打開/bin/sh 也就是bash. 打開inittab我可以看到一些這樣的語句
console::sysinit:/etc/init.d/rcS #
tty0::askfirst:-/bin/sh
具體的解釋可以參考韋東山的《嵌入式linux應用開發完全手冊》P346頁
關鍵在於ttySAC0必須是一個真實的tty設備。
類似於天嵌,友善的開發板,他們修改過串口設備以後,這裏也會需要修改。
我的問題在於不知道那個tty纔是真實的串口設備。觀察uboot的傳遞參數發現:
setenv bootargs console=ttySAC0,115200n8 noinitrd rw ip=192.168.14.104:192.168.14.141:192.168.14.254:255.255.255.0 root=/dev/nfs nfsroot=${nfshost}:${rootpath},nolock mem=64M
於是我修改tty0::askfirst:-/bin/sh 爲ttySAC0::askfirst:-/bin/sh 則可以成功啓動。
ctrl+c中斷功能正常工作。
所以,在這個問題的解決上,最重要的是找到真實的tty設備,使用這個設備來啓動bash就可以。
-----------------------------------另外所做的實驗 --------------------------------------------------------------
1.網上也有說法,例如創建console爲軟連接,連接到真實的tty設備上,我這邊嘗試後都沒有成功。
2.也有修改內核tty_io.c中noctty=1爲0的方法。我嘗試後,確實可以用console啓動,但是會出現很多奇怪的問題。