ImageVerifierCode 换一换
格式:PDF , 页数:14 ,大小:371.92KB ,
资源ID:16119547      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16119547.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Linux内核TTY驱动架构资料下载.pdf)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Linux内核TTY驱动架构资料下载.pdf

1、b.struct uart_mxr_port mxc_ports8 mxc_ports数组是自定义的 uart_mxc_port 数组,数组大小为 8,在 mx51 中只用到前 3 个。mxc_ports中包含的最重要的结构体是 struct uart_port,它们之间的关系详见数据结构关系图。static uart_mxc_port*mxc_portsMXC_UART_NR;/MXC_UART_NR=82.数据结构关系图数据结构关系图 uart_driver const char*driver_name;const char*dev_name;struct console*cons;int

2、 nr;*state;*tty_driver;uart_state.port;.xmit;*uart_port;tty_driver int magic;const char*driver_name;const char*name;struct cdev cdev;struct tty_struct*ttys;struct ktermios*termios;const struct tty_operations*ops;int num;struct list_head tty_drivers;uart_mxc_port.port;struct clk*clk;uart_port unsigne

3、d int irq;unsigned int line;unsigned int type;unsigned int uartclk;struct uart_icount icount;const struct uart_ops*ops;struct device *dev;struct uart_state*state;void *private_data;tty_port struct tty_struct*tty;Const struct tty_port_operations *ops;unsigned char *xmit_buf;tty_struct int magic;*driv

4、er;int index;struct tty_ldisc*ldisc;struct tty_bufhead buf;*port;void*driver_data;char*write_buf circ_buf char*buf;int head;int tail;tty_bufhead struct tty_buffer*head;struct tty_buffer*tail;struct tty_buffer*free;int memory_used;tty_buffer struct tty_buffer*next;char*char_buf_ptr;unsigned char*flag

5、_buf_ptr;int used;int size;int commit;int read;unsigned long data0;tty_ldisc Struct tty_ldisc_ops*ops;四四、uart 注册及注册及初始化初始化 1.uart 注册注册 uart 驱动程序入口:module_init(mxcuart_init);static int _init mxcuart_init(void)/uart_register_driver(uart_driver*)-tty_register_driver(tty_driver*)cdev_add()/最终注册了nr(nr=8)

6、个字符设备驱动ret=uart_register_driver(&mxc_reg);/mxc_reg定义见数据结构1ret=platform_driver_register(&mxcuart_driver);/mxcuart_driver见下面定义 在mxcuart_init()函数中,我们重点分析uart_register_driver(struct uart_driver*),对于 platform_driver_register(),详见平台设备注册文档分析。下面重点分析 uart_register_driver(struct uart_driver*)在 uart_register_d

7、river()中,构建了 tty_driver,并将 uart_driver 中的相关成员赋值给 tty_driver,最终调用到 tty_register_driver(struct tty_driver*)。uart_register_driver(struct uart_driver*drv)drv-state=kzalloc(sizeof(struct uart_state)*drv-nr,GFP_KERNEL);struct tty_driver*normal=alloc_tty_driver(drv-nr);/将 uart_driver 中的成员变量赋值给 tty_driver,例

8、如:主次/设备号,驱动名、设备名、通信相关 init_termios 设置等 tty_set_operations(normal,&uart_ops);tty_port_init(port);/初始化上面申请的(drv-nr)个 uart_state 中的 tty_port tty_register_driver(normal);在 tty_register_driver(struct tty_driver*)中,最终注册了 8 个字符设备驱动,其操作函数为 tty_fops。static const struct file_operations tty_fops=.read=tty_read

9、,.write=tty_write,.open=tty_open,;下面分析不同层次间几个 operations 函数的关系,如图:tty_register_driver(struct tty_driver*driver)dev=MKDEV(driver-major,driver-minor_start);register_chrdev_region(dev,driver-num,driver-name);cdev_init(&driver-cdev,&tty_fops);cdev_add(&driver-cdev,dev,driver-num);/注册了 8 个字符驱动 list_add(&

10、driver-tty_drivers,&tty_drivers);/将 tty_drivers 加入一个全局的 tty_drivers 链表 tty_register_device(driver,i,NULL);/i=07,循环注册 8 个 device 在上面前 3 层中,每一层都给自己的下一层提供了操作函数的接口,tty_core是一个字符设备驱动,实现了字符设备提供的 struct file_operations,同时给自己的下层提供了 struct tty_operations 操作接口。serial_core 使用了 tty_core 提供的 struct tty_operation

11、s 操作接口,同时给自己的下层提供了 struct uart_ops 操作接口。在后面的打开、数据读写过程中我们将会看到具体的层层调用关系。到这里 uart 注册告一段落。2.uart 初始化初始化 uart 平台设备在/arch/arm/mach-mx5/serial.c 中 arch_initcall(mxc_init_uart)注册,注册了 3 个平台设备。uart 平台驱动和 uart 平台设备通过名字“mxcintuart”匹配,匹配成功调用uart 平台驱动中的 mxcuart_probe()。在mxcuart_probe 中主要是将平台资源给mxc_ports中的uart_por

12、t,然后调用uart_add_one_port(),它根据 uart_port中的 line 拿到 uart_driver中对应的tty_core serial_core uart 驱动 struct file_operations.open.read.write struct tty_operations .open.read.write struct uart_ops .open.read.write 字符驱动 uart_state,然后配置好这个 port 并调用 tty_register_device()注册该 port。匹配成功后将调用到 mxcuart_probe()。static

13、 struct platform_driver mxcuart_driver=.driver=.name=mxcintuart,.probe=mxcuart_probe,.remove=mxcuart_remove,.suspend=mxcuart_suspend,.resume=mxcuart_resume,;static struct platform_device mxc_uart_device1=.name=mxcintuart,.id=0,.num_resources=ARRAY_SIZE(mxc_uart_resources1),.resource=mxc_uart_resources1,.dev=.platform_data=&mxc_ports0,;static struct resource mxc_uart_resources1=.start=UART1_BASE_ADDR,.end=UART1_BASE_ADDR+0 x0B5,.flags=IORESOURCE_MEM,.start=MXC_INT_UART1,.flags=IORESOURCE_IRQ,;static

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1