首页
学习
活动
专区
工具
TVP
发布

Linux驱动网卡驱动剖析

Linux 网络设备驱动架构 驱动架构自上而下分为4层: 协议接口层 设备接口层 设备驱动功能层 网络设备与媒介层 协议接口层 协议接口层主要功能是给上层协议提供接收和发送的接口。...传递的数据被描述为套接字缓冲区,用struct sk_buff结构描述,该结构体定义位于include/linux/skbuff.h中,用于在Linux网络子系统中的各层之间传输数据,该结构在整个网络收发过程中贯穿始终...设备驱动功能层 类似于字符设备,struct net_device结构体也提供了一个操作函数集struct net_device_ops来描述对网卡的各种操作。...ndo_poll_controller = dm9000_poll_controller, #endif }; dm9000 open 过程分析 当用户执行命令ifconfig eth0 up后会调用网卡驱动的...DM9000 发送过程分析 应用程序调用send函数去发送数据,内核协议栈会将数据构造成struct sk_buff后放入等待队列,调用start_xmit通知网卡发送数据。

54.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

Linux内核驱动编写

# 前言 开发过单片机的小伙伴可以看一下我之前的一篇文章从单片机开发到linux内核驱动,以浅显易懂的方式带你敲开Linux驱动开发的大门。...# 正文 用户空间的每个函数(用于使用设备或者文件的),在内核空间中都有一个对应的功能相似并且可将内核的信息向用户空间传递的函数。 下表为几种设备驱动事件和它们在内核和用户空间对应的接口函数。...memory.c /** * * 驱动初始化 */ /* Necessary includes for device drivers */ #include <linux...这个函数工作在内核空间,用于为该驱动程序的缓冲区分配内存。 * 它和我们熟悉的malloc函数很相似。 * 最后,如果注册主设备号或者分配内存失败,模块将退出。...在内核维护的设备和驱动列表中寻找你在驱动模块中注册的设备和驱动

7K20

26.Linux-网卡驱动介绍以及制作虚拟网卡驱动(详解)

3.网卡驱动初始化 而我们的网卡驱动程序,只需要编写网络设备接口层,填充net_device数据结构的内容并将net_device注册入内核,设置硬件相关操作,使能中断处理等 3.1其中net_device...结构体 4.网卡驱动发包过程 在内核中,当上层要发送一个数据包时, 就会调用网络设备层里net_device数据结构的成员hard_start_xmit()将数据包发送出去。...,如果等于ISQ_RECEIVER_EVENT,表示为接收中断,然后进入接收数据函数,通过netif_rx()将数据上交给上层 参考的内核中自带的网卡驱动:/drivers/net/cs89x0.c...本节便开始来写一个简单的虚拟网卡驱动,也就是说不需要硬件相关操作,所以就没有中断函数,我们通过linux的ping命令来实现发包,然后在发包函数中伪造一个收的ping包函数,实现能ping通任何ip地址...下节便开始学习网卡芯片DM9000C 如何编写移植DM9000C网卡驱动程序: http://www.cnblogs.com/lifexy/p/7777961.html

10.1K101

Linux内核设备驱动Linux内核基础笔记整理

Linux内核驱动模块机制 静态加载, 把驱动模块编进内核, 在内核启动时加载 动态加载, 把驱动模块编为ko, 在内核启动后,需要用时加载 2....编写内核驱动 #include #include static int __init test_init(void) { return...0; //返回0表示成功, 返加负数退出加载模块 } //__init 当内核驱动初始化完后, 释放此函数的代码指令空间 static void __exit test_exit(void) { ....驱动模块的Makefile obj-m += test.o //源码文件为test.c modules:make -C 内核源码目录 M=驱动代码所在目录 modules modules install...:make -C 内核源码目录 M=驱动代码所在目录 modules_install INSTALL_MOD_PATH=/文件系统路径 clean:make -C 内核源码目录 M=驱动代码所在目录

1.8K51

linux内核驱动模型详解_arduino驱动安装

转载请标明出处floater的csdn blog,http://blog.csdn.net/flaoter Linux SPI驱动分为核心层,控制器驱动层和设备驱动层。...核心层是Linux的SPI核心部分,提供了核心数据结构的定义,总线、设备和驱动的注册、注销管理等,提供与上层的统一接口。...linux将I2C、SPI、USB等总线驱动隔离成控制器驱动和设备驱动,使两者相对独立。 本文以qcom的spi控制器为例,对spi控制器驱动进行解析。kernel代码版本是3.18。...linux驱动与设备是一对多的关系,在spi_master设备注册时,控制器的结构体信息会提供给spi_master作为私有数据。...总线传输涉及到几个重要的结构体,队列,内核工作线程和厂商的总线传输实现几个方面。

11K40

linux内核编译AX99100驱动

linux内核版本:4.14 pcie转四路串口芯片:亚信的AX99100 linux内核里是没有这块芯片的驱动的,这里自己添加驱动进去进行编译。...1.从亚信官网下载该芯片的linux驱动https://www.asix.com.tw/cs/download.php?...sub=driverdetail&PItemID=256 2.在 linux/drivers/tty/serial/的目录下新建一个99xx的目录,把解压之后的文件里除了.cache.mk、Makefile...下的Kconfig,增加 source "drivers/tty/serial/99xx/Kconfig" 7.在linux目录下,使用你自己的编译器进入menuconfig进行内核配置(make menuconfig...Device Drivers > Character devices > Serial drivers目录下,勾选以下两个刚才添加的选项,并把8250的两个选项取消选中 9.进行编译,这样就把AX99100的驱动编译进内核里了

8.1K31

谈谈Linux内核驱动的coding style

最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离Linux内核的coding style要求还是差很多。...当初自己对内核文档里的CodingStyle一文只是粗略的浏览,真正写代码的时候在很多细节上会照顾不周。不过, 在不遵守规则的程序员队伍里,我并不是孤独的。...如果去看drivers/staging下的代码,就会发现很多驱动程序都没有严格遵守内核的coding style,而且在很多驱动程序的TODO文件里,都会把"checkpatch.pl fixes"作为自己的目标之一...在Linux内核的coding style里,switch和case要求有相同的缩进。本例的代码很少,错误也只有这一个,手动修改很方便。如果类似的缩紧错误很多怎么办?...比如,Linux内核的coding style要求,行尾不能有空格(包括Tab),去除这些空格就可以借助sed。 我自己的习惯很差,经常在代码的行尾留下一些空格。

1.7K10

Linux内核设备驱动内核的调试技术笔记整理

/****************** * 内核的调试技术 ******************/ (1)内核源代码中的一些与调试相关的配置选项 内核的配置选项中包含了一些与内核调试相关的选项,都集中在...具体的调试选项说明可参见驱动一书,或通过menuconfig的help说明查看。...通常,发送完oops后,内核会处于一种不稳定状态。...在某些情况下,oops会导致内核混乱,而混乱的结果就是死机,这些情况可能包括: *oops发生在持有锁的代码中 *oops发生在和硬件设备通讯的过程中 *oops在中断上下文中发生 *oops发生在idle...进程(0)或init进程(1),因为内核没有这两个进程没法工作 如果oops在其他进程运行时发生,内核会杀死该进程并尝试着继续运行。

2.1K41

封装 ESXI 网卡驱动

封装 ESXI 网卡驱动 ? 下载需要用的软件 1.查看电脑网卡信息 ?...2.下载网卡驱动 然后去 https://vibsdepot.v-front.de/wiki/index.php/List_of_currently_available_ESXi_packages 查看列表下载对应的网卡驱动...拿到 ESXi脱机捆绑包 后,我们在这个目录新建一个文件夹命名为\Drivers,把刚刚的驱动文件放在里面。 接下来开始把驱动封装进去 ....-pkgDir 指定本地打包的驱动文件目录 补充: ? 另外就是 esxi 7.x 在我这个电脑不能加这个网卡。...所以就是先不要用新版本 参考链接 参考链接1:给ESXI ISO镜像添加驱动包完全实践_太阳花先生可爱多的专栏-CSDN博客 参考链接2:制作VMware 6.X/7.X安装源安装 - 华为服务器 操作系统

7.3K10

Linux内核的LED设备驱动框架【转】

驱动框架的概念 内核驱动部分维护者针对每个种类的驱动设计一套成熟的、标准的、典型的驱动实现,并把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开发工程师来实现,这就叫驱动框架...因此,Linux中LED的驱动框架把所有LED设备的共性给实现了,把不同的地方留给驱动工程师去做。...内核在启动过程中,内核需要按照先后顺序去进行初始化操作。因此,内核给是给启动时要调用的所有初始化函数归类,然后每个类按照一定的次序去调用执行。...内核开发者在编写内核代码时只要将函数设置合适的级别,这些函数就会被链接的时候放入特定的段,内核启动时再按照段顺序去依次执行各个段即可。...详见Linux设备管理:sysfs文件系统的功能及其应用。 led_class_attrs结构体数组设置了leds设备类的属性,即led硬件操作的对象和方法。

2.5K10
领券