原创 Linux网卡驱动程序设计(五)

2012-8-31 14:50 1526 16 18 分类: MCU/ 嵌入式

3.6 参数设置和统计数据

当用户调用ioctl()函数,并制定SIOCSIFHWADDR命令时,意味着要设置这个设备的MAC地址。设置网络设备的MAC地址可以用如下模板。?

Static int set_mac_address (struct net_device *dev,void *addr)

{

If(netif_running(dev))

Return Ebusy;

Xxx_set_mac(dev,addr);

Return 0;

}

上述程序首先用netif_running()宏判断设备是否正在运行,如果是,则意味着设备忙,此时不允许设置MAC地址;否则,条用xxx_set_mac()函数在网络适配器硬件内写入新的MAC地址。这个要求设备在硬件上支持MAC地址的修改,而实际上,许多设备并不提供修改MAC地址的接口。

驱动程序还应提供get_stats()函数用以向用户反馈设备状态和统计信息,该函数返回的是一个net_device_stats结构体(include/linux/netdevice.h)。

Struct net_device_stats

{

Unsigned long rx_packets;

Unsigned long tx_packets;

Unsigned long rx_bytes;

Unsigned long tx_bytes;

Unsigned long rx_errors;

Unsigned long tx_errors;

}

3.7 网络设备注册与注销

int register_netdev(struct net_device *dev);

void unregister_netdev(struct net_device *dev);

3.8 总结

Linux网络设备驱动体系结构的层次化设计实现了对上层协议接口的统一和硬件驱动的对下层多样化硬件设备的可适应。程序员需要完成的工作集中在设备驱动功能层,网络设备接口层net_device结构体的存在将千变万化的网络设备得以抽象,使得设备功能层中除数据包接收以外的主体都由填充net_device的属性和函数指针完成。

在linux网络子系统和设备驱动中,套接字缓冲区sk_buff发挥者巨大的作用,时所有数据流动的载体。网络设备驱动和上层协议之间也依赖此结构进行数据包交互,因此,我们要特别牢记它的操作方法。

文章评论2条评论)

登录后参与讨论

用户370614 2012-9-4 09:16

好的,谢谢你的建议,我会改善

用户1696769 2012-8-31 15:57

建议博主将该系列文章建一个分类,形成一个系列专栏。
相关推荐阅读
用户370614 2015-02-05 15:42
AD7794 AD7795 AD7793 AD7792 程序 驱动代码 驱动程序 单片机代码
本驱动代码适用于ADI公司的AD779X系列ADC芯片,所有与硬件平台相关的代码都最大化的提取了出来,达到了最优化的移植性,本文档及代码旨在分享个人的开发工作,减少工程师们的开发周期,提高大家的工...
用户370614 2012-10-29 11:33
linux proc/stat文件信息
proc/stat包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。 [work@builder ~]$ cat /proc/stat cpu 432661 132...
用户370614 2012-10-18 14:55
platform_get_resource函数实现细节
platform_get_resource函数源码如下: struct resource *platform_get_resource(struct platform_device ...
用户370614 2012-10-18 14:50
MII和RMII
项目名称:基于FPGA的以太网MII数据和RMII数据的协议转换  关键词:以太网 MII RMII 协议转换   项目信息:   应用领域:网络与通...
用户370614 2012-10-18 14:49
linux中断之中断注册
专业的linux驱动开发离不开中断处理,在处理中断,首先要注册中断,在linux下通过request_irq来注册中断的,不同内核版本,注册中断所需要的参数也不同,本文以linux-2.6....
用户370614 2012-10-18 14:47
linux下查看和添加PATH环境变量
$PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接。<?xml:namespace prefix =...
我要评论
2
16
关闭 站长推荐上一条 /2 下一条