Linux下编写ENC28J60网卡驱动,完善网络设备框架

Posted DS小龙哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下编写ENC28J60网卡驱动,完善网络设备框架相关的知识,希望对你有一定的参考价值。

一、框架模型

linux下设备驱动都有一套标准的结构,字符设备,块设备,网络设备都是自己的一套框架。编写驱动只需要把内核的框架搞清楚,然后照着结构填入参数,注册进内核,在应用层就可以按照标准的形式调用了。 对于网络设备而言,主要目的就是网络数据的收发,编写驱动时将linux网络设备驱动里的接口与实际网卡硬件的操作接口对应上,应用层就可以操作网卡完成网络通信了。底层驱动里编写网卡驱动与单片机一样。

这是网络设备驱动注册的一些函数:

动态分配空间
#define alloc_etherdev(sizeof_priv) alloc_etherdev_mq(sizeof_priv, 1)
函数参数:分配的空间大小。如果自己没有定义自己的结构体,就直接填 sizeof(struct net_device)
函数返回值:执行成功返回申请的空间地址。
空间分配的函数还有一个 alloc_netdev()函数。
alloc_etherdev()是 alloc_netdev()针对以太网的"快捷"函数


注册网络设备
int register_netdev(struct net_device *dev)
函数形参:网络设备信息 struct net_device
函数返回值:执行成功返回 0。



注册网络设备示例
static struct net_device_ops netdev_ops_test= //网络设备虚拟文件操作集合

 .ndo_open = test_ndo_open,
.ndo_stop = test_ndo_stop,
.ndo_start_xmit = ndo_start_xmit,
;
net = alloc_etherdev(sizeof(*net));
//网络设备的名称,使用 ifconfig -a 可以查看到。
strcpy(net->name, &#

以上是关于Linux下编写ENC28J60网卡驱动,完善网络设备框架的主要内容,如果未能解决你的问题,请参考以下文章

Linux下编写ENC28J60网卡驱动,完善网络设备框架

linux enc28j60网卡驱动移植(硬件spi和模拟spi)

ENC28J60基于AVRNET修改ENC28J60驱动过程(STM32+ CubeMx + ENC28J60)

enc28j60网卡驱动模块添加进linux内核,Kconfig,Makefile配置过程

ENC28j60以太网芯片驱动程序简介

ALIENTEK 战舰ENC28J60 LWIP和UIP补充例程(LWIP WEB有惊喜)