- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
从sys_ioctl()到8139too驱动中的rtl8139_get_settings()过程
Rtl8139too.c 驱动分析
———从sys_ioctl()到驱动中的rtl8139_get_settings()过程
(说明:分析代码2.6.35.4 )
在2.6.24 内核代码中,在fs/ioctl.c 中定义的是sys_ioctl(),但是在2.6.35.4 内核中定义的代码
是(fs/ioctl.c):
因此,分析的开始函数是上面的这个函数。
linu 内核把socket 套接字当作文件来处理,内核在创建socket 套接字时,为套接字分配文件id
以及生成与id 对应的文件节点,节点的i_mode 域是代表文件类型的位域标志字段。在本文档所述的内容
中,fd 就是指向的是一个套接字的文件句柄。
前提:使用ethtool 工具时,键入的命令是:ethtool eth0;以此为例子,来说明调用流程,当然,
要得到该命令所期望的结果,需要调用rtl8139too.c 中的rtl8139_get_settings().
接着调用,do_vfs_ioctl()vfs_ioctl() :
在vfs_ioctl()中执行f_op-unlocked_ioctl()函数,即sock_ioctl()函数(net/socket.c),因为
fd 是一个socket 文件句柄,则fd 指向的文件是一个socket 文件,则在net/socket.c 中:
下面接着f_op-unlocked_ioctl()继续分析:
在sock_ioctl()中——sock_do_ioctl()(net/socket.c)dev_ioctl()
(net/core/dev.c),在dev_ioctl()中,如下图:
先看:
由此可以看到,传进去的参数arg 由此发生了变化:
在ethtool 应用程序中是ifr系统调用中argdev_ioctl()中ifr ,为达到这个目
的使用了copy_from_user()函数。
并且在dev_ioctl()中:
根据传进去的cmd 参数:SIOCETHTOOL,调用:dev_ioctl()dev_ethtool()
(net/core/ethtool.c),此时传给dev_ethtool()的参数变成为了ifr,这个ifr 即是用来承载所要得到
的数据的载体,通过copy_to_user()将这个承载着数据的载体to_user_space 的ethtool 应用程序:
在dev_ethtool()(net/core/ethtool.c):
在dev_ethtool()中,根据在ethtool 用户态应用程序中输入的命令行参数eth0,即ifr_name,得
到对应接口网卡的net_device 即上面代码中的dev;
注意,让我们看看上面代码中的ifr-ifr_data,首先我们回到用户态的ethtool 应用程序中的函数
do_gdrv()中看看:
可以看到,ifr-ifr_data=(caddr_t)drvinfo。
结合上面的代码就可以知道:useraddr 中存放的就是ethtool_drvinfo 类型的drvinfo 的起始地
址。
在ethtool 的源代码中,include/linux/ethtool.h 中,有ethtool_drvinfo 的定义:
从此处可以看到,drvinfo 的开始的__u32 存放的就是该drvinfo 需要获取什么信息所对应的
cmd,所以在dev_ethtool()中:
在dev_ethtool()中,定义了u32 的ehtcmd,则根据drvinfo 的起始地址useraddr,使用
copy_from_user()得到和该drvinfo 所对应的cmd,并用ethcmd 作为case 判断条件,找到对应的
操作:
根据ethcmd,dev_ethtool()ethtool_get_settings(dev,useraddr)
(net/core/ethtool.c ):
即dev 为ehto 对应网卡接口的net_dev ,useraddr 是用来承载信息的ethtool_drvinfo 的起
始地址。
下面,来看看ethtool_get_settings()的代码:
从中可以看到,在这个函数中调用了和eht0 网卡接口对应的net_dev 结构的函数指针:
dev—ethtool_o
您可能关注的文档
- 材料取样及标准.doc
- 闻一多先生的说和做1ok.pptx
- 2012-2013第二学期八年级教育教学计划.doc
- 交通运输专业英语课件(Automatic Transmissions).ppt
- 差错控制编码在蓝牙的应用.ppt
- 电厂模板、脚手架施工方案(含受力计算).doc
- 2009年物理会考.docx
- DS材料进场报验单.doc
- 庆“六一活动简报.doc
- 第一节应收账款.ppt
- 2024届四川省广元市苍溪中学高三寒假测试试题.doc
- 2024届山西省太原市第四十八中学高三下学期3月线上教学数学试题检测试题卷二.doc
- 2024届上海市七宝中学高三下学期3月月考数学试题试卷.doc
- 2024届上海市六十中学高三5月阶段性测试数学试题.doc
- 2024届四川绵阳市三台中学高三实验班第一次质检数学试题试卷.doc
- 高中生物实验教学优化对策教学研究课题报告.docx
- 小学道德教育中的实际案例分析教学研究课题报告.docx
- 小学美术教育对学生创造力的培养路径研究教学研究课题报告.docx
- 高中信息技术课程中的项目学习探索教学研究课题报告.docx
- 国际视野下的教育改革比较研究教学研究课题报告.docx
文档评论(0)