完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在Linux 2。6内核下S3C2410,bootloader启动时有一句console=ttySAC0, 但启动后在/dev下并没有看到该设备名称,/dev下倒是有tts这个目录,里面有0 1 2这三个设备,正好对应三个串口,当进入Login 界面是, 发现也是同/dev/tts/0设备进行通讯,现在问题是同一个设备,为什么叫法不一样呢?或者说ttySAC与tts, 还有tty之间有什么关系?
|
|
相关推荐
2个回答
|
|
这确实有些混乱:
1. 命令行参数“console=ttySAC0”与/dev/目录没有任何关系,它被用来选择从哪个设备输出内核、驱动的printk信息: ①. 在内核kernel/printk.c中,有这一行代码: __setup("console=", console_setup); 对于命令行参数“console=ttySAC0”,console_setup函数会将设备名(name)、索引(index)解析出来: 名为ttySAC,索引为0──表示第一个设备 ②. S3C2410的串口驱动文件drivers/serial/s3c2410.c中,有如下数据结构: 1882 static struct console s3c24xx_serial_console = 1883 { 1884 .name = S3C24XX_SERIAL_NAME, // 这个宏被定义为"ttySAC" 1885 .device = uart_console_device, // init进行、用户程序打开/dev/console时用到 1886 .flags = CON_PRINTBUFFER, // 打印先前在log_buf中保存的信息 1887 .index = -1, // 表示使用哪个串口由命令行参数决定 1888 .write = s3c24xx_serial_console_write, // 串口控制台的输出函数 1889 .setup = s3c24xx_serial_console_setup // 串口控制台的设置函数 1890 }; ①、②的名字(name)、索引(index)两相比较,刚好相符,所以printk信息就会通过②中的s3c24xx_serial_console_write函数输出。 2. 至于/dev目录下哪个设备文件与具体设备对应,这取决于设备文件的主、次设备号,而不是它们的名字。 ①. 同样是在S3C2410的串口驱动文件drivers/serial/s3c2410.c中,有如下数据结构: 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 }; ②. 使用ls -l命令查看/dev目录下的某个设备文件,比如: $ ls -l /dev/tts/0 如果它的主设备号为204、次设备号为64,那么就对应第一个串口 |
|
|
|
谢谢版主的回答,看来对内核代码有空也要去读一下。
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2157 浏览 6 评论
1964 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4521 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 08:39 , Processed in 0.662869 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号