linux设备驱动程序——网络设备驱动程序
Linux的网络系统主要是基于BSD Unix 的socket机制, 访问网络设备的驱动程序不需要使用设备节点。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递。系统内部支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持。因此,选择哪个驱动程序是基于内核内部的其他决定,而不是调用open(),对网络设备的使用通常由系统调用socket接口引入。
Linux网络设备驱动程序从上到下可以划分为4层,依次为网络协议接口层、网络设备接口层、提供实际动能的设备驱动功能层以及网络设备与媒介层。在设计具体的网络设备驱动程序时,我们需要完成的主要工作是编写设备驱动功能层的相关函数以填充net_device数据结构的内容并将net_device注册入内核。
一、网络协议接口层
网络协议接口层最主要的功能是给上层协议提供了透明的数据包发送和接收接口。当上层ARP或IP协议需要发送数据包时,它将调用网络协议接口层的dev_queue_xmit()函数发送该数据,上层数据包的接收也通过向netif_rx()函数传递一个struct sk_buff数据结构的指针来完成。
sk_buff结构体非常重要,它的含义为“套接字缓冲区”,用于在Linux网络子系统中的各层之间传递数据,是Linux网络子系统数据传递的“中枢神经”。
1.套接字缓冲区成员
(1) 各层协议头h、nh和mac 3个协议头对应于网络协议的不同层次,分别为传输层TCP/UDP协议头h、网络层协议头nh和链路层协议头mac。
(2) 数据缓冲区指针head、data、tail和end
(3) 长度信息len、data_len、truesize
2. 套接字缓冲区操作
分配 alloc_skb(),dev_alloc_skb();释放 kfree_skb(),dev_kfree_skb(),dev_kfree_skb_irq(),dev_kfree_skb_any();
指针移动 skb_put(),_ _skb_put(),skb_push(),_ _skb_push(),skb_pull(),skb_reserve()。
二、网络设备接口层
主要功能是为千变万化的网络设备定义了统一、抽象的数据结构net_device结构体,以不变应万变,实现多种硬件在软件层次上的统一。
设备操作:open(),stop()。
三、设备驱动功能层
net_device结构体的成员需要被设备驱动功能层的具体数值和函数赋予。
由于网络数据包的接收可由中断引发,设备驱动功能层中另一个主体部分将是中断处理函数,它负责读取硬件上接收的数据包并
相关文档:
例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......
Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......
一、BootLoader的概念
BootLoader是系统加电启运行的第一段软件代码.回忆一下PC的体系结构我们可以知道,PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的引导程序一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的引导程序读到系统的RAM中,然后将控制权交给引导程序。引 ......
iptables-save > ipt.v1.0
iptables-save > ipt.v1.1
iptables-restore < ipt.v1.0
cp /etc/sysconfig/iptables iptables.raw
service iptables save
ip伪装的脚本文件iptables_masquerade
#!/bin/bash
//设置linux系统允许ip包的转发
echo "1" > /proc/sys/net/ipv4/ip_forward
//加载实现 ......
1)关闭防火墙
#service iptables stop<enter> \\关闭防火墙
#chkconfig iptables off<enter> \\关闭开机启动
2)IP地址的配置
①命令方式
#netconfig<enter> \\设置IP地址、子网掩码、网关、DNS
#vi /etc/sysconfig/network \\主机名
#hostname XXX \\设置主机名称
#exit ......