linux终端设备uart驱动分析

linux终端设备uart驱动分析

ID:30361917

大小:84.37 KB

页数:11页

时间:2018-12-29

linux终端设备uart驱动分析_第1页
linux终端设备uart驱动分析_第2页
linux终端设备uart驱动分析_第3页
linux终端设备uart驱动分析_第4页
linux终端设备uart驱动分析_第5页
资源描述:

《linux终端设备uart驱动分析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、linux终端设备uart驱动分析linux终端设备uart驱动分析一:前言接着前面的终端控制台分析,接下来分析serial的驱动.在linux中,serial也对应着终端,通常被称为串口终端.在shell上,我们看到的/dev/ttyS*就是串口终端所对应的设备节点.在分析具体的serial驱动之前.有必要先分析uart驱动架构.uart是UniversalAsynchronousReceiverandTransmitter的缩写.翻译成中文即为"通用异步收发器".它是串口设备驱动的封装层.二:uart驱动架

2、构概貌如下图所示:上图中红色部份标识即为uart部份的操作.从上图可以看到,uart设备是继tty_driver的又一层封装.实际上uart_driver就是对应tty_driver.在它的操作函数中,将操作转入uart_port.在写操作的时候,先将数据放入一个叫做circ_buf的环形缓存区.然后uart_port从缓存区中取数据,将其写入到串口设备中.当uart_port从serial设备接收到数据时,会将设备放入对应linediscipline的缓存区中.这样.用户在编写串口驱动的时候,只先要注册一个u

3、art_driver.它的主要作用是定义设备节点号.然后将对设备的各项操作封装在uart_port.驱动工程师没必要关心上层的流程,只需按硬件规范将uart_port中的接口函数完成就可以了.三:uart驱动中重要的数据结构及其关联我们可以自己考虑下,基于上面的架构代码应该要怎么写.首先考虑以下几点:1:一个uart_driver通常会注册一段设备号.即在用户空间会看到uart_driver对应有多个设备节点.例如:/dev/ttyS0/dev/ttyS1每个设备节点是对应一个具体硬件的,从上面的架构来看,每个

4、设备文件应该对应一个uart_port.也就是说:uart_device怎么同多个uart_port关系起来?怎么去区分操作的是哪一个设备文件?2:每个uart_port对应一个circ_buf,所以uart_port必须要和这个缓存区关系起来回忆tty驱动架构中.tty_driver有一个叫成员指向一个数组,即tty-ttys.每个设备文件对应设数组中的一项.而这个数组所代码的数据结构为tty_struct.相应的tty_struct会将tty_driver和ldisc关联起来.那在uart驱动中,是否也可用

5、相同的方式来处理呢?将uart驱动常用的数据结构表示如下:结合上面提出的疑问.可以很清楚的看懂这些结构的设计.四:uart_driver的注册操作Uart_driver注册对应的函数为:uart_register_driver()代码如下:intuart_register_driver(structuart_driver*drv){structtty_driver*normal=NULL;inti,retval;BUG_ON(drv-state);/**Maybeweshouldbeusingaslabcach

6、eforthis,especiallyif*wehavealargenumberofportstohandle.*/drv-state=kzalloc(sizeof(structuart_state)*drv-nr,GFP_KERNEL);retval=-ENOMEM;if(!drv-state)gotoout;normal=alloc_tty_driver(drv-nr);if(!normal)gotoout;drv-tty_driver=normal;normal-owner=drv-owner;norma

7、l-driver_name=drv-driver_name;normal-name=drv-dev_name;normal-major=drv-major;normal-minor_start=drv-minor;normal-type=TTY_DRIVER_TYPE_SERIAL;normal-subtype=SERIAL_TYPE_NORMAL;normal-init_termios=tty_std_termios;normal-init_termios.c_cflag=B9600

8、CS8

9、CREAD

10、HU

11、PCL

12、CLOCAL;normal-init_termios.c_ispeed=normal-init_termios.c_ospeed=9600;normal-flags=TTY_DRIVER_REAL_RAW

13、TTY_DRIVER_DYNAMIC_DEV;normal-driver_state=drv;tty_set_operations(normal,&uart_ops);/**

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。