扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
该设备自己定义了一些ioctl命令字范围在SIOCDEVPRIVATE到SIOCDEVPRIVATE + 15之间),调用函数dev_ioctl实现对该设备指定的ioctl命令的操作。
■ dev_ioctl()
功能:用来处理所有设备接口的ioctl请求,只是一个包装器, 实际的动作将由dev_ifsioc()来实现。dev_ioctl做的只是检查这个调用是否具有了正当的权限。
■ dev_ifsioc()
功能:真正处理所有设备接口的ioctl请求。
具体操作说明:函数首先要做的一些事情包括得到与ifr.ifr_name相匹配的设备的结构,但这是在实现特定的接口命令之后。这些特定的接口命令被放置到一个巨大的switch语句之中。其中SIOCDEVPRIVATE命令和其他的在0x89F0到0x89FF之间的代码将出现在switch语句中的一个分支——default语句中,代码最后还增加了对无线网络的支持。内核执行时会检查表示设备的结构变量中,是否已经定义了一个与设备相关的ioctl句柄(handler)。这里的句柄是一个函数指针,它在表示设备的结构变量中do_ioctl部分。如果已经设置了这个句柄,那么内核将会执行它。如ipv6隧道设备体,在初始化时,就作了说明:dev->do_ioctl = ip6ip6_tnl_ioctl,其中函数ip6ip6_tnl_ioctl就是该设备对应的ioctl句柄,由于隧道设备是自己定义的ioctl命令字,因而执行应在default语句中,进而调用到自己定义的ioctl处理函数ip6ip6_tnl_ioctl。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者