博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网卡驱动程序之框架(一)
阅读量:6160 次
发布时间:2019-06-21

本文共 1806 字,大约阅读时间需要 6 分钟。

一、网卡驱动程序框架:

app:  socket
--------------------------------------------------
           ---------------
           --------------- 若干层网络协议--纯软件
           ---------------
           ---------------
hard_start_xmit||  /\
               \/  ||  netif_rx   sk_buff
           ---------------
          硬件相关的驱动程序(要提供hard_start_xmit, 有数据时要用netif_rx上报)           
--------------------------------------------------
               硬件           
           
怎么写网卡驱动程序?
1. 分配一个net_device结构体
2. 设置:
2.1 发包函数: hard_start_xmit
2.2 收到数据时(在中断处理函数里)用netif_rx上报数据
2.3 其他设置
3. 注册: register_netdevice
测试1th/2th:
1. insmod virt_net.ko
2. ifconfig vnet0 3.3.3.3
   ifconfig // 查看
3. ping 3.3.3.3  // 成功   
   ping 3.3.3.4  // 死机
测试DM9000C驱动程序:
1. 把dm9dev9000c.c放到内核的drivers/net目录下
2. 修改drivers/net/Makefile
obj-$(CONFIG_DM9000) += dm9000.o
改为
obj-$(CONFIG_DM9000) += dm9dev9000c.o
3. make uImage
   使用新内核启动
4.
使用NFS启动
ifconfig eth0 192.168.1.17
ping 192.168.1.1   
二、虚拟网卡测试程序

1.

/* * 参考 drivers\net\cs89x0.c */#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
static struct net_device *vnet_dev;static int virt_net_init(void){ /* 1. 分配一个net_device结构体 */ vnet_dev = alloc_netdev(0, "vnet%d", ether_setup);; /* alloc_etherdev */ /* 2. 设置 */ /* 3. 注册 */ //register_netdevice(vnet_dev); register_netdev(vnet_dev); return 0;}static void virt_net_exit(void){ unregister_netdev(vnet_dev); free_netdev(vnet_dev);}module_init(virt_net_init);module_exit(virt_net_exit);MODULE_AUTHOR("thisway.diy@163.com,17653039@qq.com");MODULE_LICENSE("GPL");

2.Makefile

KERN_DIR = /work/system/linux-2.6.22.6all:    make -C $(KERN_DIR) M=`pwd` modules clean:    make -C $(KERN_DIR) M=`pwd` modules clean    rm -rf modules.orderobj-m    += virt_net.o

转载地址:http://mhhfa.baihongyu.com/

你可能感兴趣的文章
HP DL380G4服务器前面板指示灯的含义
查看>>
数据结构_树结构
查看>>
常用URL地址
查看>>
每天一个linux命令(19):find 命令概览
查看>>
MySQL kill操作
查看>>
windows下看端口占用
查看>>
Decommissioning a Domain Controller 降域控
查看>>
Character中的奇葩
查看>>
c++书籍推荐
查看>>
轻松监听Azure service health 状态
查看>>
获取SQL SERVER某个数据库中所有存储过程的参数
查看>>
在Linux下编译安装Apache2(2)
查看>>
Method Swizzling 处理一类简单的崩溃
查看>>
AngularJS学习!
查看>>
在Eclipse中搭建Python Django
查看>>
struts国际化
查看>>
Laravel 5.0 - Middleware (中间件)
查看>>
文件特殊权限及facl
查看>>
我的友情链接
查看>>
Android按两次返回键退出应用
查看>>