欢迎来到天天文库
浏览记录
ID:50453366
大小:371.92 KB
页数:14页
时间:2020-03-06
《Linux内核TTY驱动架构.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于MX51的TTY驱动架构2012-12-28一、任务目标以uart为实例分析整理TTY驱动架构。二、层次架构用户空间ttycore线路规程serialcoreuart驱动硬件图1在linux内核中,串行设备多种多样,内核开发者为了让驱动开发者尽量简单(可复用的东西多),构建了如图1所示的串行设备层次架构。ttycore里是最基本的字符驱动,经过线路规程处理的数据,通过ttycore提供的数据交互机制与用户空间通信。?图1中线路规程表示对上层或下层传过来数据的处理,不同的处理方式对应不同的协议,如红外、ppp拨号等等。serialcore是对tty驱动进行了封装,与硬件
2、无关,给底层uart驱动开发提供API,针对具体硬件的操作全在uart驱动中实现。因为uart同时涉及到以上三层,所以本文档以uart为例,阐述TTY。三、数据结构设计1.数据结构uart驱动中定义了2个重要的数据结构,structuart_drivermxc_reg,和structuart_mxc_portmxc_port[8]。a.structuart_drivermxc_reguart_driver是serial_core提供的重要结构体,下面是代码定义的uart_driver实例,变量的解释见对应注释。具体结构体见数据结构关系图。staticstructuart_
3、drivermxc_reg={.driver_name="ttymxc",//驱动名,用于与设备匹配.dev_name="ttymxc",//设备名,用于与驱动匹配,并会在dev下显示/dev/ttymxcID.nr=MXC_UART_NR,//最大支持8个uartprot.cons=MXC_CONSOLE,//serialcore中定义的structconsole,详见serialcore分析};b.structuart_mxr_portmxc_ports[8]mxc_ports[]数组是自定义的uart_mxc_port数组,数组大小为8,在mx51中只用到前3个。m
4、xc_ports[]中包含的最重要的结构体是structuart_port{},它们之间的关系详见数据结构关系图。staticuart_mxc_port*mxc_ports[MXC_UART_NR];//MXC_UART_NR=82.数据结构关系图uart_driver{}uart_state{}tty_driver{}constchar*driver_name;.port;intmagic;constchar*dev_name;.xmit;constchar*driver_name;structconsole*cons;*uart_port;constchar*name
5、;intnr;……structcdevcdev;*state;structtty_struct**ttys;*tty_driver;structktermios**termios;……conststructtty_operations*ops;intnum;structlist_headtty_drivers;……circ_buf{}tty_struct{}char*buf;intmagic;inthead;*driver;tty_port{}inttail;conststructtty_operations*ops;structtty_struct*tty;……inti
6、ndex;Conststructtty_port_operationsstructtty_ldisc*ldisc;*ops;structtty_bufheadbuf;unsignedchar*xmit_buf;tty_ldisc{}*port;……Structtty_ldisc_ops*ops;void*driver_data;……char*write_buftty_bufhead{}……structtty_buffer*head;structtty_buffer*tail;structtty_buffer*free;intmemory_used;……uart_mxc_p
7、ort{}.port;uart_port{}structclk*clk;unsignedintirq;……unsignedintline;tty_buffer{}unsignedinttype;structtty_buffer*next;unsignedintuartclk;char*char_buf_ptr;structuart_icounticount;unsignedchar*flag_buf_ptr;conststructuart_ops*ops;intused;structdevice*dev;intsize;str
此文档下载收益归作者所有