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-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]
上一篇:对于onenand的block进行写入之前需要erase,要是不进行erase操作,倒是也能写,就是
下一篇:原来超人是来克里顿星球征服第三类星球-地球的战士,阴差阳错的竟成了多行善事的超人英雄,服了!!
登录 注册