码迷,mamicode.com
首页 > 移动开发 > 详细

Android深度探索与驱动开发(四)

时间:2016-04-27 12:32:44      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

    Linux 网络设备驱动程序由 4 部分组成,分别是网络设备媒介层、网络设备驱动层、网络设 备接口层及网络协议接口层。网络设备媒介层包括各种物理网络设备和传输媒介。对于网络设备 接口层,Linux 系统用 Net_device 结构表示网络设备接口。Net_device 结构保存所有与硬件有关 的接口信息,各协议软件主要通过 Net_device 结构来完成与硬件的交互。网络设备驱动层主要包 括网络设备的初始化、数据包的发送和接收。网络协议接口层提供网络接口驱动程序的抽象接口。初始化(initialize):检测设备;配置和初始化硬件;初始化 net_device 结构。打开(open) 这个方法在网络设备被激活的时候调用,:进行资源的申请和硬件的激活等。open 方法另一个作用是如果驱动程序作为一个模块被装入,则要防止模块卸载时设备处于打开状态。在 open 方法里要调用 MOD_INC_USE_COUNT 宏。关闭(close):释放某些系统资源。如果是作为模块装入的驱动程序,close 里应该调用MOD_DEC_USE_COUNT,减少设备被引用的次数,以使驱动程序可以被卸载。发送(hard_start_xmit):网络设备驱动程序发送数据时,系统调用 dev_queue_xmit 函数,发送的数据放在一个 sk_buff 结构中。一般的驱动程序将数据传输到硬件发出去,特殊的设备如 loopback 把数据组成一个接收数据再回送给系统,或如 dummy 设备直接丢弃数据。如果发送成功,则在 hard_start_xmit 方法里释放 sk_buff,返回 0,否则返回 1。接收(reception):驱动程序并不存在一个接收方法。有数据收到应该是驱动程序来通知系统的。一般设备收到数据后都会产生一个中断,在中断处理程序中驱动程序申请一块k_buff,从硬件读出数据放置到申请好的缓冲区里。接下来填充 sk_buff 中的一些信息。最后调用 netif_rx()把数据传送给上层协议层处理。在 Android 系统中,可以使用命令 ifconfig 来查询系统中的网络设备,另外使用此命令也可 以获取 Wi-Fi 网络和电话网络的信息。

Android深度探索与驱动开发(四)

标签:

原文地址:http://www.cnblogs.com/li-xiaobin/p/5438036.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!