linux内核高手请接招

xiaojun789 2007-01-06 11:09:31
在写linux驱动程序的时候会调用register_chrdev()函数注册自己的驱动程序(2.4,字符驱动),该函数把我们的自己写的file_operation写到一个device struct结构体中。
当我们测试自己的驱动程序的时候会调用系统调用open()来打开该设备文件,在sys_open()函数会调用filep_open()该函数就调用open_namei()和dentry_open()产生一个struct file结构,并且该结构体中的file_operation字段为inode结构体中的file_operation字段。
问题:在内核中是怎么把我们驱动程序写的file_operation结构赋给inode结构的,才能使用户程序能够正确调用我们的驱动程序呢?
...全文
452 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
joyself 2007-01-08
  • 打赏
  • 举报
回复
我来接:)
xiaojun789 2007-01-08
  • 打赏
  • 举报
回复
怎么没有人接招呢?自己顶一下
xiaojun789 2007-01-08
  • 打赏
  • 举报
回复
自己已经搞定了,是在mknod的时候,sys_mknod在建立设备文件索引的时候先把默认的chrdev_fops赋给inode,在打开设备文件的时候回调用默认的操作chrdev_open()在该函数把自己写的操作与设备文件的inode关联。
xqxxl 2007-01-08
  • 打赏
  • 举报
回复
利用数据结构中回掉指针callback
讲述一个程序员成长的六个阶段: 1、能熟练地使用某种语言,这相当于练武中的套路和架式这些表面的东西。 2、精通基于某种平台的接口(如win的API),以及所对应语言的自身的库函数。这也就相当于可以进行真实的散打对练了,可以真实地在实践中做一些应用了。 3、此阶段能深入了解某个平台系统的底层,已经具有了初级的内功的能力,也就是“手中有剑,心中无剑” 4、此阶段能够直接在平台上进行比较深层次的开发。基本上能达到这个层次可以说是进入了高层次。这时进入了高级内功的修炼。比如能进行VxD或操作系统的内核的修改。这时已经不再有语言的束缚,此时语言只是一种工具,即使要用自己不会的语言进行开发,也只是简单地熟悉下,就手到擒来,完全不像是第一阶段的时候学习语言的那种情况。 5、此阶段已经不再局限于简单的技术上面的问题了,而是能从全局上把握和设计一个比较大的系统体系结构,从内核到外层界面。可以说是“手中无剑,心中有剑”。到了这个阶段就能对市面上的任何软件进行剖析,并能按自己的要求进行设计,就算是MS Word这样的大型软件,只要有充足的时间,也一定能够设计出来。 6、最高境界,达到“无招胜有招”。这时候,任何问题都纯粹变成了一个思路问题,不是用什么代码就能表示的。此时,对于练功的人来说,他已不用再去学什么少林拳,只是在旁边看别人对战,就能把这拳来用。这个就是大师级别的人物。这时,Win32或Linux在眼里是没有什么区别的。

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧