/bin/sh: can‘t access tty; job control turned off
問(wèn)題
最近在做嵌入式文件系統時(shí)使用了如下的inittab文件:
#/etc/inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
s3c2410_serial0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
s3c2410_serial0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
結果出現了:/bin/sh: cant access tty; job control turned off
分析
BusyBox通過(guò)系統控制臺來(lái)做些工作, 如果我們的shell啟動(dòng)在 /dev/console(5,1)上, tty_io.c 函數open中noctty就被設置成1,導致這個(gè)問(wèn)題,具體原因還不知道??傊獑?dòng)在一個(gè)真實(shí)的串口就沒(méi)有關(guān)系。
Job control will be turned off since your shell can not obtain a controlling terminal. This typically happens when you run your shell on /dev/console. The kernel will not provide a controlling terminal on the /dev/console device. Your should run your shell on a normal tty such as tty1 or ttyS0 and everything will work perfectly. If you REALLY want your shell to run on /dev/console, then you can hack your kernel (if you are into that sortof thing) by changing drivers/char/tty_io.c to change the lines where it sets "noctty = 1;" to instead set it to "0". I recommend you instead run your shell on a real console...
解決方法
可以通過(guò)BusyBox的init指定shell的設備, 注意, S3C2410上, 串口0是s3c2410_serial0。也就是說(shuō)去掉::respawn:-/bin/sh就可以啦~~
串口名稱(chēng)
串口名稱(chēng)可以是s3c2410_serialx、ttySACx和ttySx等,但底層使用的是設備的主設備號和次設備號來(lái)定位具體設備的。所以不管是串口的名稱(chēng)是什么
,只要主設備號和次設備號對了就可以。此外,通過(guò)mdev生成設備節點(diǎn)時(shí),串口的名稱(chēng)是s3c2410_serialx。
S3C2410的串口驅動(dòng)文件drivers/serial/s3c2410.c中,有如下數據結構:本文引用地址:http://dyxdggzs.com/article/201611/319982.htm
[plain] view plain copyprint?
- staticstructuart_drivers3c24xx_uart_drv={
- .owner=THIS_MODULE,
- .dev_name="s3c2410_serial",
- .nr=3,
- .cons=S3C24XX_SERIAL_CONSOLE,
- .driver_name=S3C24XX_SERIAL_NAME,
- .major=S3C24XX_SERIAL_MAJOR,//主設備號為204
- .minor=S3C24XX_SERIAL_MINOR,//次設備號為64,這指第1個(gè)串口;第2個(gè)為65
- };
評論