您当前的位置: 首页 >  网络

DS小龙哥

暂无认证

  • 11浏览

    0关注

    679博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

DS小龙哥 发布时间:2022-10-18 09:20:45 ,浏览量:11

一、框架模型

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, &#
关注
打赏
1664009229
查看更多评论
立即登录/注册

微信扫码登录

0.0409s