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

浅析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 中找到相关代码验证上述内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值