您的位置 首页 测评

/bin/sh: can‘t access tty; job control turned off

问题最近在做嵌入式文件系统时使用了如下的inittab文件:etcinittab::sysinit:etcinitdrcS::respawn:-binshs3c2410_serial0::askf

问题

最近在做嵌入式文件体系时运用了如下的inittab文件
#/etc/inittab
::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经过体系控制台来做些作业, 假如咱们的shell发动在 /dev/console(5,1)上, tty_io.c 函数open中noctty就被设置成1,导致这个问题,详细原因还不知道。总归要发动在一个实在的串口就没有关系。
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...

解决方法

能够经过BusyBox的init指定shell的设备, 留意, S3C2410上, 串口0是s3c2410_serial0。也就是说去掉::respawn:-/bin/sh就能够啦~~

串口称号

串口称号能够是s3c2410_serialx、ttySACx和ttySx等,但底层运用的是设备的主设备号和次设备号来定位详细设备的。所以不管是串口的称号是什么
,只需主设备号和次设备号对了就能够。此外,经过mdev生成设备节点时,串口的称号是s3c2410_serialx。
S3C2410的串口驱动文件drivers/serial/s3c2410.c中,有如下数据结构:

[plain] view plain copy

print?

  1. staticstructuart_drivers3c24xx_uart_drv={
  2. .owner=THIS_MODULE,
  3. .dev_name=”s3c2410_serial”,
  4. .nr=3,
  5. .cons=S3C24XX_SERIAL_CONSOLE,
  6. .driver_name=S3C24XX_SERIAL_NAME,
  7. .major=S3C24XX_SERIAL_MAJOR,//主设备号为204
  8. .minor=S3C24XX_SERIAL_MINOR,//次设备号为64,这指第1个串口;第2个为65
  9. };

经过这个结构体就能够确认串口设备的主设备号和次设备号。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/262386.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部