linux内核tty驱动架构.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于 MX51 的 TTY 驱动架构 2012-12-28 一、任务目标 以 uart 为实例分析整理 TTY 驱动架构。 二、层次架构 用户空间 tty core 线路规程 serial core uart驱动 硬件 图 1 在 linux 内核中,串行设备多种多样,内核开发者为了让驱动开发者尽量简 单(可复用的东西多),构建了如图 1 所示的串行设备层次架构。 tty core 里是最基本的字符驱动,经过线路规程处理的数据,通过 tty core 提 供的数据交互机制与用户空间通信。? 图 1 中线路规程表示对上层或下层传过来数据的处理,不同的处理方式对应 不同的协议,如红外、ppp 拨号等等。 serial core 是对 tty 驱动进行了封装,与硬件无关,给底层 uart 驱动开发提供 API,针对具体硬件的操作全在 uart 驱动中实现。 因为 uart 同时涉及到以上三层,所以本文档以 uart 为例,阐述 TTY。 三、数据结构设计 1. 数据结构 uart 驱动中定义了 2 个重要的数据结构,struct uart_driver mxc_reg,和 struct uart_mxc_port mxc_port[8]。 a. struct uart_driver mxc_reg uart_driver 是 serial_core 提供的重要结构体,下面是代码定义的 uart_driver 实例,变量的解释见对应注释。具体结构体见数据结构关系图。 static struct uart_driver mxc_reg = { .driver_name = ttymxc, //驱动名,用于与设备匹配 .dev_name = ttymxc, //设备名,用于与驱动匹配,并会在dev下显示/dev/ttymxcID .nr = MXC_UART_NR, //最大支持8个uart prot .cons = MXC_CONSOLE, //serial core中定义的struct console,详见serial core分析 }; b. struct uart_mxr_port mxc_ports[8] mxc_ports[]数组是自定义的 uart_mxc_port 数组,数组大小为 8,在 mx51 中 只用到前 3 个。 mxc_ports[]中包含的最重要的结构体是 struct uart_port{},它们之间的关系详 见数据结构关系图。 static uart_mxc_port *mxc_ports[MXC_UART_NR]; //MXC_UART_NR=8 2. 数据结构关系图 uart_driver{} uart_state{} tty_driver{} const char* driver_name; .port; int magic; const char* dev_name; .xmit; const char* driver_name; struct console*cons; *uart_port; const char* name; int nr; …… struct cdev cdev; *state; struct tty_struct** ttys; *tty_driver; struct ktermios** termios; …… const struct tty_operations*ops; int num; struct list_head tty_drivers; …… circ_buf{} tty_struct{} char * buf; int magic; int head; int tail; *driver; const struct tty_operations *ops; tty_port{} struct tty_struct *tty; …… int index; Const struct tty_port_operations struct tty_ldisc * ldisc; *ops; struct tty_bufhead buf; unsigned char *xmit_buf; tty_ldisc{} Struct tty_ldisc_ops *ops; *port; void * driver_data; …… …… char* write_buf tty_bufhead{} …… struct tty_buffer *head; struct tty_buffer *tail; struct tty_buffer *free; int memory_used; …… uart_mxc_port{} uart_port{} .port;

文档评论(0)

152****7770 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档