本文主要是介绍初探,tty console uart的三角关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
从上面三图看出,tty是tty,console是tty的朋友(console通过函数指针指向tty),是不是该叫友元呢?,uart是tty与console的组合,有点类似于从tty类与console类继承而来吧。
于是最纯粹的事tty,最复杂的事uart。
在我这边的环境下,写串口应用程序的第一件事是open /dev/ttySAC0
我想在源码中找到ttySAC0,却只找到了ttySAC.
我用的是s3c2440板,
里面有
#define S3C24XX_SERIAL_NAME "ttySAC"
#define S3C24XX_SERIAL_MAJOR 204
#define S3C24XX_SERIAL_MINOR 64
static struct uart_driver s3c24xx_uart_drv= {
.owner = THIS_MODULE,
.dev_name = "ttySAC",
.nr = CONFIG_SERIAL_SAMSUNG_UARTS,
.cons = S3C24XX_SERIAL_CONSOLE,
.driver_name = S3C24XX_SERIAL_NAME,
.major = S3C24XX_SERIAL_MAJOR,
.minor = S3C24XX_SERIAL_MINOR,
};
用ls -l /dev/下显示如上,不懂从ttySAC到ttySAC0、1、2到底发生了什么,仿佛这就是世间最遥远的距离。
倒着推,module_init(s3c24xx_serial_modinit);是一个源头,调用了uart_register_driver(&s3c24xx_uart_drv); 这个函数里有 tty_set_operations(normal,&uart_ops);并且调用retval = tty_register_driver(normal);这个函数里有个循环
for (i = 0; i < driver->num; i++)
tty_register_device(driver, i, NULL);
这让我感觉到快接近012是怎么出来的了。在 tty_register_device(driver,i, NULL);
里调用了dev_t dev = MKDEV(driver->major, driver->minor_start) + index;如果这里minor_start=64那么就不难理解65,66是怎么出来的了。
CONFIG_SERIAL_SAMSUNG_UARTS=3在linux源码树下的config配置里被定义,也开在makemenuconfig中定义
这篇关于初探,tty console uart的三角关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!