06_netdev网卡设备内核模块

01_basicLinux内核模块-CSDN博客文章浏览阅读315次,点赞3次,收藏3次。环境ID=ubuntuMakefilemodules:clean:basic.creturn 0;运行效果。https://blog.csdn.net/m0_37132481/article/details/136157384my_netdev.c

#include <linux/kernel.h>
#include <linux/module.h>

#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/ethtool.h>
#include <linux/skbuff.h>


#define TAG "HELLO# "


static int my_netdev_open(struct net_device *dev)
{
        printk(TAG "%s called\n", __func__);
        return 0;
}

static int my_netdev_close(struct net_device *dev)
{
        printk(TAG "%s called\n", __func__);
        return 0;
}

static netdev_tx_t my_netdev_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
        printk(TAG "%s called\n", __func__);
        return NETDEV_TX_OK;
}
static int my_netdev_set_mac_add(struct net_device *dev, void *p)
{
        printk(TAG "%s called\n", __func__);
        return 0;
}


static struct net_device_ops my_netdev_netdev_ops = {
        .ndo_open               = my_netdev_open,
        .ndo_stop               = my_netdev_close,
        .ndo_start_xmit         = my_netdev_start_xmit,
        .ndo_set_mac_address    = my_netdev_set_mac_add,
        .ndo_validate_addr      = eth_validate_addr,
};

static struct net_device *dev = NULL;

static int my_netdev_init(void)
{
        printk(TAG "%s called\n", __func__);

        dev = alloc_etherdev(0);

        dev->dev_addr_shadow[0] = 0xaa;
        dev->dev_addr_shadow[1] = 0xbb;
        dev->dev_addr_shadow[2] = 0xcc;
        dev->dev_addr_shadow[3] = 0xdd;
        dev->dev_addr_shadow[4] = 0xee;
        dev->dev_addr_shadow[5] = 0xff;
        dev->dev_addr = dev->dev_addr_shadow;
        snprintf(dev->name, IFNAMSIZ, "hello");

        dev->netdev_ops = &my_netdev_netdev_ops;

        register_netdev(dev);

        return 0;
}
static void my_netdev_exit(void)
{
        unregister_netdev(dev);
        free_netdev(dev);
        printk(TAG "%s called\n", __func__);
}

module_init(my_netdev_init);
module_exit(my_netdev_exit);
MODULE_LICENSE("GPL");

效果

可以看到多一个一个hello名字的网卡 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值