Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15531007
  • 博文数量: 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-07-26 11:53:51

浅析char字符驱动程序是怎么和文件系统结合到一起的

<1>insmod函数将char驱动,比如sdio_uart内部的tty驱动,使用cdev_add()函数将其登记到cdev_map静态结构体上.
<2>sys_mknod创建char设备对应的inode节点,假设我们的文件系统是ext3,那么将调用ext3_mknod(),从ext3文件系统上alloc一个inode,成功后,将调用init_special_inode()为该inode添加inode操作函数集,inode->i_fop = &def_chr_fops;
<3>sys_open函数打开path_name对应的dentry对应的char类型inode节点时,将调用def_chr_fops->open,也就是chrdev_open函数,该函数会搜索cdev_map结构体上的所有已经注册登记上来的char设备driver驱动程序,然后根据inode->i_rdev找到驱动该char设备的driver程序.然后filp->f_op = fops_get(p->ops);将char驱动登记了的fops操作函数集赋值给filp->f_op作为最终用户操作的函数集,这之后inode->i_fop = &def_chr_fops;作用已经发挥完成,被真正应该驱动该char设备的char驱动static const struct file_operations tty_fops替代.
<4>以上操作完成这之后
   sys_write将对应tty_write
   sys_read将对应tty_read
   sys_open将对应tty_open
   ...
linux驱动分析小得[Leith.gliethttp_20080726]

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