首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Linux驱动之网卡驱动剖析

Linux 网络设备驱动架构 驱动架构自上而下分为4层: 协议接口层 设备接口层 设备驱动功能层 网络设备与媒介层 协议接口层 协议接口层主要功能是给上层协议提供接收和发送的接口。...传递的数据被描述为套接字缓冲区,用struct sk_buff结构描述,该结构体定义位于include/linux/skbuff.h中,用于在Linux网络子系统中的各层之间传输数据,该结构在整个网络收发过程中贯穿始终...(db, DM9000_TXPLL, skb->len); // DM9000_TXPLL: 0xFC iow(db, DM9000_TXPLH, skb->len >> 8); // DM9000...(db, 0xf5, (calc_mrr >> 8) & 0xff); iow(db, 0xf4, calc_mrr & 0xff); } } else { /* need to...dump the packet's data */ iow(db, 0xf5, (calc_mrr >> 8) & 0xff); iow(db, 0xf4, calc_mrr & 0xff

55.5K20

ioctl函数详解(Linux内核 )

ioctl 方法第二个参数 cmd 为用户与驱动的 “协议”,理论上可以为任意 int 型数据,可以为 0、1、2、3……,但是为了确保该 “协议” 的唯一性,ioctl 命令应该使用更科学严谨的方法赋值,在linux...type),(nr),0) #define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size))) #define _IOW..._IO(type,nr): 定义不带参数的 ioctl 命令 _IOR(type,nr,size): 定义带写参数的 ioctl 命令(copy_from_user) _IOW(type...命令及相关宏定义,可以理解为一份 “协议” 文件,代码如下: // ioctl-test.h #ifndef __IOCTL_TEST_H__ #define __IOCTL_TEST_H__ #include <linux...IOCINIT _IO(IOC_MAGIC, 0) /* 读寄存器 */ #define IOCRREG _IOR(IOC_MAGIC, 1, int) /* 写寄存器 */ #define IOCWREG _IOW

11.2K241

图解 | Binder浅析(二)

由于外设种类繁多,操作系统如Linux抽象出文件视图来方便用户使用外设。即对用户来说,通过读写外设文件,让操作系统将指令发送给外设控制器,来实现对外设的操作。 ?...在Linux中,各种外设文件放在/dev目录下: ?...ioctl这名字第一次出现在Unix第七版中,他在很多类unix系统(比如Linux、Mac OSX等)都有提供,不过不同系统的请求码对应的设备有所不同。...指令BINDER_SET_MAX_THREADS的定义如下: #define BINDER_SET_MAX_THREADS _IOW('b', 5, __u32) _IOW是一个宏,Linux内核提供了一些宏来方便用户定义指令...传入各种参数进行包装): // nr为序号,datatype 为数据类型,如 int _IO(type, nr ) //没有参数的命令 _IOR(type, nr, datatype) //从驱动中读数据 _IOW

75920

基于IMX6的GPIO驱动程序

Linux内核版本:linux-3.0.35 开发板: IMX6S MY-IMX6-EK200 编译环境:Ubuntu12 主要内容:IMX6S的IO驱动程序编写(ioctl) 实现功能...要按照Linux内核的约定方法为驱动程序选择ioctl编号,因为如果不按照这个约定进行编写,就有可能因为cmd参数冲突问题不能正确调用ioctl函数。...2、为了合理使用ioctl函数,需要学习cmd参数的设置方法,查看Linux源码可以看到一下内容。     ..._IOC(dir,type,nr,size)是封装好的参数设置方法,在它的上一层,又封装了_IOW()和_IOR()进行IO的写和读的cmd参数设置方法。代码截图如下: ?     ...3、使用linux-arm-gcc交叉编译应用程序,将编译好的可执行文件拷贝到开发板即可运行。

1.8K80
领券