linux虚拟网卡驱动
2017-11-13 13:14
387 查看
之前的前两篇写w5500网卡驱动是我的思路有偏差,用的是一种取巧的方法,在linux的用户空间利用spidev直接进行w5500的设置与tcp连接,这只能叫做是一个w5500的应用程序驱动,虽然能达到相应的目的,但是感觉是一种取巧的方法,没能充分利用到linux内核强大的任务多线程能力,所以决定编写调试一个w5500的内核网络设备驱动,自己也借此学习linux的网络设备驱动等相关知识。
现在硬件也有所升级,mcu由stm32f407升级为stm32f429,内部内存存储升为2M,外部又加了2M的sram,这样内存是完全能够满足的,stm32f407和stm32f429是完全兼容的,把之前的f407Uclinux内核做相对应的修改即可在stm32f429运行
由于对linux网络设备驱动的知识缺乏了解就去查阅了相应的资料,看了书和韦东山老师的视频,有了一点认识,于是先做一个简单的虚拟网卡驱动来试验一下。
步骤:
1. 分配一个net_device结构体
2. 设置:
2.1 发包函数: hard_start_xmit //高版本linux有所修改
2.2 收到数据时(在中断处理函数里)用netif_rx上报数据
2.3 其他设置
3. 注册: register_netdevice
具体思路大致是这样并没有错误,但是随着linux内核版本的升级,网络设备驱动的相关函数和数据结构都发生了不少变化,我用的是2.6.33这个版本的linux内核,直接编译韦老师的驱动代码会冒出很多编译错误,这里面的发包函数hard_start_xmit我已经找不到了,net_device_ops结构体的新加入,它里面的.ndo_start_xmit函数,就是发包函数,所以要对net_device_ops结构体进行填充。
于是参照韦老师视频的虚拟网卡设备驱动程序进行相应的修改,几经调试终于实现了。
参考的韦老师的程序,具体程序在这里下载http://download.csdn.net/download/jccg89104/10116263
在linux内核设置中选择相应选项
编译内核,把内核映像拷入单片机,然后进行相应操作
测试:
1. ifconfig // 查看,无网络设备
2. ifconfig vnet0 3.3.3.3
ifconfig // 查看,出现vnet0,可见虚拟网卡的ip已经设置为3.3.3.3
3.
ping 3.3.3.4 // 试ping3.3.3.4成功,并且有回应,因为在程序中已做相关修改回应处理
经过这个虚拟网卡设备驱动的编写调试,对linux网络设备驱动有了一个清楚的理解,接下来就要去编写和调试w5500网卡设备驱动了!!
现在硬件也有所升级,mcu由stm32f407升级为stm32f429,内部内存存储升为2M,外部又加了2M的sram,这样内存是完全能够满足的,stm32f407和stm32f429是完全兼容的,把之前的f407Uclinux内核做相对应的修改即可在stm32f429运行
由于对linux网络设备驱动的知识缺乏了解就去查阅了相应的资料,看了书和韦东山老师的视频,有了一点认识,于是先做一个简单的虚拟网卡驱动来试验一下。
步骤:
1. 分配一个net_device结构体
2. 设置:
2.1 发包函数: hard_start_xmit //高版本linux有所修改
2.2 收到数据时(在中断处理函数里)用netif_rx上报数据
2.3 其他设置
3. 注册: register_netdevice
具体思路大致是这样并没有错误,但是随着linux内核版本的升级,网络设备驱动的相关函数和数据结构都发生了不少变化,我用的是2.6.33这个版本的linux内核,直接编译韦老师的驱动代码会冒出很多编译错误,这里面的发包函数hard_start_xmit我已经找不到了,net_device_ops结构体的新加入,它里面的.ndo_start_xmit函数,就是发包函数,所以要对net_device_ops结构体进行填充。
于是参照韦老师视频的虚拟网卡设备驱动程序进行相应的修改,几经调试终于实现了。
参考的韦老师的程序,具体程序在这里下载http://download.csdn.net/download/jccg89104/10116263
在linux内核设置中选择相应选项
编译内核,把内核映像拷入单片机,然后进行相应操作
测试:
1. ifconfig // 查看,无网络设备
2. ifconfig vnet0 3.3.3.3
ifconfig // 查看,出现vnet0,可见虚拟网卡的ip已经设置为3.3.3.3
3.
ping 3.3.3.4 // 试ping3.3.3.4成功,并且有回应,因为在程序中已做相关修改回应处理
经过这个虚拟网卡设备驱动的编写调试,对linux网络设备驱动有了一个清楚的理解,接下来就要去编写和调试w5500网卡设备驱动了!!
相关文章推荐
- 11-S3C2440驱动学习(五)嵌入式linux-网络设备驱动(一)虚拟网卡驱动程序
- [Linux驱动开发] 网络设备之虚拟网卡
- 70 linux网络设备驱动之虚拟网卡及arp应答的实现
- 嵌入式Linux驱动学习之路(二十五)虚拟网卡驱动程序
- linux驱动之网卡驱动-虚拟网卡驱动编写
- 以snull为例分析linux网卡驱动的技术文档[转载]二
- 【转】linux下一个网卡配置多个ip【虚拟ip】
- Linux-千兆网卡驱动实现机制浅析
- Linux配置无线网卡驱动实现无线上网
- 基于Linux PCI总线驱动模型的网卡驱动分析
- 所有linux支持的ATI网卡驱动 下载
- 移植Linux3.4.2版本内核到mini2440(二)--添加网卡、UVC摄像头、LCD驱动
- Linux 字符设备驱动开发基础(六)—— VFS 虚拟文件系统解析
- linux下安装网卡驱动
- Linux下通过修改网卡驱动的参数调整Intel网卡的性能
- Linux下串口、网卡驱动
- 解决安装Linux之后没有网卡驱动
- (Linux 技术)Fedora 16下编译无线网卡驱动成功
- Linux安装无线网卡驱动,实现Linux无线上网 转
- linux网卡驱动程序详解(转)