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深度探索与驱动开发(四)
时间: 2024-10-14 00:49:32
Android深度探索与驱动开发(四)的相关文章
Android深度探索与驱动开发(六)
Linux驱动的工作和访问方式是Linux的亮点之一,同时受到了业界的广泛好评. Linux系统 将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中.这种 设计理念使得与Linux驱动进行交互就像与普通文件进行交互一样容易.当然,也比访问LinuxAPI 更容易. 由于大多数Linux驱动都有与其对应的设备文件, 因此与Linux驱动交换数据就变成了与 设备文件交换数据.例如,向Linux打印机驱动发送一个打印命令,可以直接使用C语言函数open打开设备文件,
Android深度探索与驱动开发(五)
开发板是开发和学习嵌入式技术的主要硬件设备, 尽管可以在 PC 上开发 Linux 驱动, 然后重 新编译成 ARM 架构的 Linux 驱动模块.但最终都是要在开发板上进行测试的.这主要是因为 ARM 架构的开发板可基于 X86 架构的 PC 在 CPU 指令以及二进制格式上都有所不同. 而且如果 Linux 驱动需要访问硬件(如 LCD. Wi-町.蓝牙等〉,并且这些硬件很难在 PC 上进行模拟, 那么就要在 带有这些硬件的开发板上进行调试和测试. 开发板从技术上说与我们经常用的手机类似,
Android深度探索与驱动开发(八)
蜂鸣器是 S3C6410 开发板上带的一个硬件设备.可以通过向寄存器写入特定的值来控制蜂鸣器 发出尖叫声.一个完整的蜂呜器驱动(可以打开和关闭蜂鸣 器). PW时驱动的实现方式不同于 LED 驱动, PWM 驱动将由多个文件组成.这也是大多数 Linux 驱动的标准实现方式. 也就是说-个复杂的驱动不太可能将所有的代码都放在一个文件中.最好将 相关的代码放在相应的文件中.在编译 Linux 驱动时将这些文件进行联合编译.这些文件中的数据结构.函数的代码也可以被多个不同的驱动使用, 所 以这也是代
Android深度探索与驱动开发(七)
任何现代的操作系统主机中插入硬件时都会检测到该硬件.例如,将一个打印机通过 USB 口连接到 PC上,如果操作系统是 Windows , 会在右下角状态栏显示已发现新设备信息.这说明操作系统已经探测到有硬件已连接到 PC 上然后系统会尝试安装驱动.如果驱动 F注意 :未安装成功,就会弹出对话框要求用户指定驱动程序的路径. 在这一过程中,操作 系统虽然可以检测到硬件设备连接的信号,但此时并不能使用该硬件设备,这是因 为还需要安装与硬件交互的驱动程序. 从这一点可以看出,硬件被检查到只说明在 内核空
Android深度探索与驱动开发(三)
Relay 的原理Relay 提供了一种机制,使得内核空间的程序能够通过用户定义的 Relay 通道(channel)将 大量数据高效地传输到用户空间.一个 Relay 通道由一组和 CPU 一一对应的内核缓冲区组成.这 些缓冲区又被称为 Relay 缓冲区(buffer),其中的每一个在用户空间都用一个常规文件来表示, 叫做 Relay 文件(file).内核空间的用户可以利用 Relay 提供的 API 接口来写入数据,这些数据 会被自动写入当前的 CPU ID 对应的那个 Relay 缓
Android深度探索-卷1第四章心得体会
这一章的和三章的git用法有联系,so,吧上一章的git基本用法搞好了再来,具体的方法就是看书上网查,这里就不做详细步骤介绍了.这章就有点意思了,是源码的下载和编译,有能看的,能自己鼓捣的,本章介绍的是方法,可以类推其他.Android一直主要就是Linux内核的移植,Linux的移植有主要是Linux驱动的移植,所以我们在学习的时候要搭起码俩环境,一个Android的,一个Linux的.本章前半部分是介绍Android 的源码下载和编译,后半部分是Linux的内核源码下载和编译,Linux内核
Android深度探索-卷1 第四章
使用Git下载两套源代码,一套是Android 源代码,一套是Linux 内核源代码.由于Android移植主要就是Linux内核的移植,而Linux内核移植主要是Linux驱动移植,所以为了开发和测试Linux驱动,需要在Ubuntu Linux 下搭建两套开发环境:Android应用程序开发环境和Linux 内核开发环境. 一.下载.预编译.和测试Android源代码的核心步骤: 1.配置Android源代码下载环境 (1)创建一个用于存放下载脚本文件(repo)的目录 (2)下载repo脚
Android深度探索HAL与驱动开发 第四章
Android深度探索HAL与驱动开发 第四章 源代码的下载和编译 读书笔记 一.下载编译和测试Android源代码 1.配置Android源代码下载环境 创建一个用于存放下载脚本文件的目录(可将该文件放到任何一个目录在这里使用-/bin) # mkdir ~/bin # PATH=~/bin:$PATH 2.下载repo脚本文件(用于下载Android源代码) # curl htttps://dl-ssl.google.com/dl/googlesource/git-repo/repo> ~/
Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记
Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记 本章学习了使用git下载两套源代码并搭建两个开发环境.分别为Android源代码和Linux内核源代码.Android源代码中包含了HAL(即硬件抽象层) 的代码,并学习了如何搭建这两种开发环境. Android 的移植的本质就是Linux内核的移植,Linux内核的移植主要是Linux驱动的移植.而开发和测试Linux驱动就需要安装以上两个开发环境. 搭建两套环境的具体步骤如下: 一.下载编译和测试A