/bin/sh: can

http://blog.csdn.net/ce123/article/details/7498113


问题

最近在做嵌入式文件系统时使用了如下的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: can't 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 plaincopy     static struct uart_driver s3c24xx_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个串口;第2个为65       };  
通过这个结构体就可以确定串口设备的主设备号和次设备号。
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1434) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~
评论热议
posted @   张同光  阅读(194)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示