gliethttpgliethttp.blog.chinaunix.net
gliethttp
全部博文(2005)
2014年(2)
2013年(2)
2012年(16)
2011年(66)
2010年(368)
2009年(743)
2008年(491)
2007年(317)
linux_zj
程睿
mzh2100
dogsun88
叶绍琛
kowems
gongping
chumojin
高泽然
xy7777
os123456
hiderhao
zahassio
byy6by
zxy11861
COVID_19
a1960048
swzswz
分类: 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]
上一篇:ubuntu7.10下安装xmms播放mp3
下一篇:如何简单调试卫星锅?
登录 注册