Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15530939
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: LINUX

2008-05-04 16:26:39


浅析2.6.24下char字符驱动tty注册和实际调用流程
drivers/usb/class/cdc-acm.c->acm_init()->tty_register_driver(acm_tty_driver)->cdev_init(&driver->cdev, &tty_fops);这个tty_fops就是让cdev->ops 等于 tty_fops;
sys_open->inode->i_fop = &def_chr_fops;具体可以参考《浅析linux2.6下VFS虚拟文件系统中的那3个玩意儿》

http://blog.chinaunix.net/u1/38994/showart_447956.html

这个def_chr_fops之后执行一个open函数会通过kobj_lookup(cdev_map, inode->i_rdev, &idx);
最后调用由cdev_init经过kobj_map()函数操作之后添加到cdev_map中的cdev的ops的open函数,这里就是tty_fops->tty_open,与此同时,将tty_fops作为filp->f_op文件操作的函数集,接下来tty_open会调用get_tty_driver()->遍历挂载到tty_drivers驱动链表上的和当前open的文件inode对应major和minor相匹配的驱动,然后调用tty->driver->open(tty, filp);也就是acm_tty_driver->open()函数,所以最终通过层级调用,终于调用到了我们的自己写的驱动acm_tty_driver的open函数了,所以系统调用write()->sys_write()->(tty_fops->write)->(acm_tty_driver->write),在调用我们自己写的tty驱动acm_tty_driver对应的fops操作集之前,会先直接调用tty_fops操作集,由tty_fops来间接调用我们自己写的tty驱动acm_tty_driver->write[gliethttp_20080504]

阅读(1627) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~