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网卡驱动移植(硬件spi和模拟spi)
ENC28J60基于AVRNET修改ENC28J60驱动过程(STM32+ CubeMx + ENC28J60)