基于stm32f429的uclinux-W5500网络设备内核驱动

       之前那篇写w5500驱动只是单纯的应用程序驱动,虽然可以实现一定的目的,但是没有充分利用到linux的内核,在一些应用场合就显得不合时宜,于是就进行w5500网络设备内核驱动的学习,幸运的是w5500网络设备驱动的文件是在4.8版本的linux内核中找到,但是与我现在使用的2.6.33版本的内核在有些函数和数据结构等都有一定程度上缺失,为此花了很久的一段时间去修修补补这个驱动C文件,终于修补到了编译无错误的程度了,但也经过一定时间的调试才能达到想要的效果,但是通过这样也学习到linux的网络设备方面的知识
       这里只是对w5500网络设备驱动的一些重要的函数及数据结构做简单的分析与总结
       W5500网络设备驱动主要包括在两个文件:w5500.cw5500-spi.c
       w5100-spi.c构建spi设备驱动以使用spi接口方式来设置w5500,设置w5500的基本读写函数,w5100.c主要构建linux内核的网络设备驱动,设置网络发送接收skb等函数,注意两者紧密相连,缺一不可!修改内核文件中的Kconfig和makefile文件编译这两个C文件。
基本流程为:


这里写图片描述

       在w5100-spi.c主要是用spi的方式来设置w5500的读、写函数,通过其中的w5100_spi_probe函数最后转入到w5100.c中的w5100_probe函数,下面重点关注w5100_spi_probe()这个函数:

int w5100_probe(struct device *dev, const struct w5100_ops *ops,int sizeof_ops_priv, const void *mac_addr, int irq,int link_gpio)

1、 进入这个函数后,首先分配注册网络设备
ndev = alloc_etherdev(alloc_size);
err = register_netdev(ndev);

2、 填充网络设备文件操作结构体
ndev->netdev_ops = &w5100_netdev_ops;

static const struct net_device_ops w5100_netdev_ops = {
.ndo_open = w5100_open,
.ndo_stop = w5100_stop,
.ndo_start_xmit = w5100_start_tx,
.ndo_tx_timeout = w5100_tx_timeout,
.ndo_set_rx_mode = w5100_set_rx_mode,
.ndo_set_mac_address = w5100_set_macaddr,
.ndo_validate_addr = eth_validate_addr,
.ndo_change_mtu = eth_change_m

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值