浅析2.6.24下char字符驱动tty注册和实际调用流程

来源:互联网 发布:淘宝服装布光 编辑:程序博客网 时间:2024/06/05 10:57

浅析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;(这里的tty_fops 是struct file_oprations结构体)
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]

可在/drivers/char/tty_io.c   /fs/char_dev.c 中找到相关代码验证上述内容。

原创粉丝点击