本文给出了一个简单网卡驱动架构,加载后可以实现ping功能。
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_platform.h>
#include <linux/of_gpio.h>
#include <linux/of_irq.h>
#include <linux/cdev.h>
#include <linux/fs.h>
#include <linux/netdevice.h>
#define VIRNET_MAX_PACKET_SIZE 251
int virnet_open(struct net_device *dev)
{
printk(KERN_ERR "%s,%d\n",__FUNCTION__,__LINE__);
netif_start_queue(dev);
return 0;
}
static int virnet_close(struct net_device *dev)
{
printk(KERN_ERR "%s,%d\n",__FUNCTION__,__LINE__);
netif_stop_queue(dev);
return 0;
}
static netdev_tx_t virnet_xmit_frame(struct sk_buff *skb,
struct net_device *netdev)
{
int i = 0;
struct ethhdr *virnet_ethhdr = NULL;
if (skb->len <= 0) {
netdev_err(netdev, "empty skb received from stack\n");
dev_kfree_skb_any(skb);
netdev->stats.tx_errors++;
goto tx_netdev_ret