资源描述:
《Linux tty core 源码分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linuxttycore源码分析[日期:2011-02-08]来源:CSDN 作者:sirzjp本文以linux2.6.27内核为基础,阅读ttycore源码并作注解,自己接触时间不长,希望与爱好者共同分享,错误之处还望指正。linuxttycore是建立在字符设备驱动的基础之上,并为tty类型设备(串口、控制台、虚拟终端)提供一个公用的平台。所以任何一个tty设备驱动的注册都是作为一个字符设备驱动而操作的。下面我们看看代码中是如何处理的:/3/2004jmc:whydothesedevicesexist?///tty核心默认在内核中
2、实现的字符型tty设备驱动staticstructcdevtty_cdev,console_cdev;#ifdefCONFIG_UNIX98_PTYSstaticstructcdevptmx_cdev;#endif#ifdefCONFIG_VTstaticstructcdevvc0_cdev;#endif/ Ok,nowwecaninitializetherestofthettydevicesandcancount onmemoryallocations,interruptsetc.. /staticint__inittty_init
3、(void){//在字符设备模型中加入注册tty_cdev驱动并加入/dev/tty这样的设备 cdev_init(&tty_cdev,&tty_fops); if(cdev_add(&tty_cdev,MKDEV(TTYAUX_MAJOR,0),1) register_chrdev_region(MKDEV(TTYAUX_MAJOR,0),1,"/dev/tty")<0) panic("Couldn'tregister/dev/ttydriver"); device_create_drvdata(tty_class,NUL
4、L,MKDEV(TTYAUX_MAJOR,0),NULL, "tty");//在字符设备模型中加入注册console_cdev驱动并加入/dev/console这样的设备 cdev_init(&console_cdev,&console_fops); if(cdev_add(&console_cdev,MKDEV(TTYAUX_MAJOR,1),1) register_chrdev_region(MKDEV(TTYAUX_MAJOR,1),1,"/dev/console")<0) panic("Couldn'tre
5、gister/dev/consoledriver"); device_create_drvdata(tty_class,NULL,MKDEV(TTYAUX_MAJOR,1),NULL, "console");//在字符设备模型中加入注册ptmx_cdev驱动并加入/dev/ptmx这样的设备#ifdefCONFIG_UNIX98_PTYS cdev_init(&ptmx_cdev,&ptmx_fops); if(cdev_add(&ptmx_cdev,MKDEV(TTYAUX_MAJOR,2),1) regis
6、ter_chrdev_region(MKDEV(TTYAUX_MAJOR,2),1,"/dev/ptmx")<0) panic("Couldn'tregister/dev/ptmxdriver"); device_create_drvdata(tty_class,NULL,MKDEV(TTYAUX_MAJOR,2),NULL,"ptmx");#endif//在字符设备模型中加入注册vc0_cdev驱动并加入/dev/tty0这样的设备#ifdefCONFIG_VT cdev_init(&vc0_cdev,&console_fops
7、); if(cdev_add(&vc0_cdev,MKDEV(TTY_MAJOR,0),1) register_chrdev_region(MKDEV(TTY_MAJOR,0),1,"/dev/vc/0")<0) panic("Couldn'tregister/dev/tty0driver"); device_create_drvdata(tty_class,NULL,MKDEV(TTY_MAJOR,0),NULL,"tty0"); vty_init();//这里暂时不做解释#endif return0;}//上面是本身加入
8、的,也就是我们系统一般都有的设备,而且这几种设备都是指向其他的设备,在tty_open中我们将看到以后都会指向其//他具体的设备。对这几种设备大多数人都存在一定的混淆,这里我就自己的理解解释下:///dev/consol