zoukankan      html  css  js  c++  java
  • ttySAC0与/dev/tts/0是否对应同一个物理设备串口0

    这确实有些混乱:
    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,那么就对应第一个串口

    转自:http://www.100ask.net/showtopic-16.aspx

  • 相关阅读:
    hadoop脑裂
    磁盘动态扩容
    zookeeper快照清理
    hadoop rebalance
    redis
    斜率场--微分方程图形解
    simpson法计算arctan(1)-即pi/4
    反函数的导数
    动能公式推导
    schwarz( 施瓦兹)不等式证明
  • 原文地址:https://www.cnblogs.com/hnrainll/p/2088257.html
Copyright © 2011-2022 走看看