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

Linux驱动之网卡驱动剖析

Linux 网络设备驱动架构 驱动架构自上而下分为4层: 协议接口层 设备接口层 设备驱动功能层 网络设备与媒介层 协议接口层 协议接口层主要功能是给上层协议提供接收发送的接口。...传递的数据被描述为套接字缓冲区,用struct sk_buff结构描述,该结构体定义位于include/linux/skbuff.h中,用于在Linux网络子系统中的各层之间传输数据,该结构在整个网络收发过程中贯穿始终...源码分析 笔者基于的是 S5PV210 的 DM9000 驱动,会大体上对 DM9000 的驱动源码进行分析, 分析源码位于DM9000 源码 platform 框架分析 DM9000 的驱动是基于 platform...s5p_dm9000_resources, .dev = { .platform_data = &s5p_dm9000_platdata, } }; 根据平台总线的原理,驱动设备匹配上后...在 kernel 2.5 之后引入了新的处理方式,叫 NAPI,综合了中断方式轮询方式。

55.4K20

Linux驱动开发: USB驱动开发

四、 linux内核下USB相关的API函数与数据结构 前面介绍了USB相关一些基础概念与重要的数据结构,接下来就分析在linux内核中如何编写一个USB 驱动程序,编写与一个USB设备驱动程序的方法其他总线驱动方式类似...,驱动程序把驱动程序对象注册到USB子系统中,稍后再使用制造商设备标识来判断是否安装了硬件。...当然,这些制造商设备标识需要我们编写进USB 驱动程序中。 USB 驱动程序依然遵循设备模型 —— 总线、设备、驱动。...I2C 总线设备驱动编写一样,所有的USB驱动程序都必须创建的主要结构体是 struct usb_driver,它们向USB 核心代码描述了USB 驱动程序。...(中断传输方式) 5.1 USB驱动注册框架代码 #include #include #include /*

69.2K20

事件驱动消息驱动

事件驱动消息驱动 消息驱动事件驱动很类似,都是先有一个事件,然后产生一个相应的消息,再把消息放入消息队列,由需要的项目获取。...---- 事件驱动往往轮询机制相关,它们通常被统称为 event loop。重点在于并不会给每一个事件分配一个轮询来探知其变化,而是设置一个中央轮询中心,用这个轮询中心去轮询每个注册的对象。...事件驱动方式 事件发生时主线程把事件放入事件队列,在另外线程不断循环消费事件列表中的事件,调用事件对应的处理逻辑处理事件。事件驱动方式也被称为消息通知方式,其实是设计模式中观察者模式的思路。...事件驱动模型可以用下图表示(来源于《Software Architecture Patterns》): ?...事件队列事件处理器除了在各自的线程模型是否阻塞上有所区别以外,在实现者上也有所区别。通常事件队列包括分发器、事件通道都是由类库替我们完成的,而事件处理器的逻辑则需要更偏向业务的程序员完成。

4.8K31

Linux 设备驱动的相遇

这一节结合设备信息集合的详细讲解来认识一下设备驱动是如何绑定的。...所谓设备信息集合,就是根据不同的外设寻找各自的外设信息,我们知道一个完整的开发板有 CPU 各种控制器(如 I2C 控制器、SPI 控制器、DMA 控制器等),CPU 控制器可以统称为 SOC,除此之外还有各种外设...设备驱动又是如何绑定的呢?我们带着这些疑问进入本节的主题。...大的圆圈中就是我们常说的 soc,里面包括 CPU 各种控制器 A、B、I2C、SPI,soc 外面接了外设 E F。...第一节中讲了总线、设备驱动模型的原理,即任何驱动都是通过对应的总线设备发生联系的,故虽然 soc 内部没有具体的总线,但是内核通过 platform 这条虚拟总线,把控制器一个一个找到,一样遵循了内核高内聚

2.4K40

Linux驱动开发: 块设备驱动开发

块设备是与字符设备并列的概念, 这两类设备在 Linux驱动的结构有较大差异,总体而言, 块设备驱动比字符设备驱动要复杂得多,在 I/O 操作上表现出极大的不同,缓冲、 I/O 调度、请求队列等都是与块设备驱动相关的概念...在Linux中,驱动对块设备的输入或输出(I/O)操作,都会向块设备发出一个请求,在驱动中用request结构体描述。...GFP_KERNELGFP_ATOMIC, GFP_ATOMIC: 用来从中断处理进程上下文之外的其他代码中分配内存. 从不睡眠 GFP_KERNEL: 内核内存的正常分配....绝大多数硬盘都是固定硬盘,被永久性地密封固定在硬盘驱动器中。...磁头是在高速旋转的盘片上悬浮的,悬浮力来自盘片旋转带动的气流,磁头必须悬浮而不是接触盘面,避免盘面磁头发生相互接触的磨损。

31.8K30

Linux SPI 驱动

6.重复3~5 由此完成了一个周期内的数据交换,这里的难点在哪里呢,这里核心的难点在于,一定要关注到,MOMI的同时工作,这里并非是一个周期内只有一条线进行数据采集,而是两根线同时都在进行半周期数据的发送半周期的数据采集的动作...代码部分均来自于linuxkernel开源代码https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/?...首先我们看下这里的spidev_write,这个接口承担了userspace的系统调用接口,由字符设备驱动 fops注册 image.png spidev_sync_write有个核心的数据结构用来支撑双工通信...五、总结 个人理解现在这个科技发展的风口下,手机、IOT、车机等终端设备齐放异彩的大背景下,新终端生态的搭建、基础智能设备的整合、大健康的趋势下,Sensor的发展是一个非常关键的驱动力,基础驱动软件能力的掌握也是重中之重...,linux给了我们一个很好的平台让我们能在前辈的肩上进行各种高质量的代码学习,我们也需抓住这个机会,在做好本质工作的基础上静心努力钻研,不断前行,祝愿各位也祝愿我自己在技术的道路上越走越远。

18.2K12

Linux——Linux驱动之基本理论常识总结(什么是Linux驱动Linux驱动需要掌握哪些?)

1 什么是Linux驱动? 做过嵌入式的都知道裸机程序带操作系统的程序,这里就不展开讲了,初学者最开始接触的都是裸机程序,main中while大循环跑天下。...说到这里,从顶层到底层正好是A到D的顺序,驱动程序就是联接操作系统硬件之间的桥梁,驱动程序多半都是硬件打交道的,如何让硬件更好、稳定的运行起来,这就是看驱动程序的好坏了,它对上需要提供硬件操作的相关接口...Linux驱动可参考的资源 Linux本身就是一个开源软件,开源的好处大家都知道,资料丰富,我们做Linux驱动开发,能找到技术支持相应资源的有如下,列出的,对于新手来说,建议最佳的顺序是从1到5:...,我们自己参照移植即可; 5)Linux官方:https://www.kernel.org,有Linux原始的内核代码; Linux驱动如何学习理解,借用大神总结的话,在此记录下,我初次看时感觉很受用...,理解的很到位: 上层是文件系统应用,中层是Linux内核,下层是底层硬件,Linux驱动是介于文件系统底层硬件之间的,是嵌入到内核中的程序,应用是嵌入到文件系统中的程序,比如Android APP

8K30

Linux驱动开发: Linux下RTC实时时钟驱动

Linux内核版本: 3.5 1.1 Linux下RTC时间的读写分析 1.1.1 系统时间与RTC实时时钟时间 Linux系统下包含两个时间:系统时间RTC时间。...每次Linux系统启动后在启动过程中会检测挂载RTC驱动,在挂载后会自动从RTC芯片中读取时间并设置到系统时间中去。...linux命令中的datetime等命令都是用来设置系统时间的,而hwclock命令是用来设置读写RTC时间的。.../include/linux/rtc.h 定义了与RTC有关的数据结构 Linux内核源码自带的RTC驱动代码存放位置: \linux-3.5\drivers\rtc\目录下全是RTC驱动示例代码...设置RTC时间相关的命令测试 通过命令测试,设置时间获取时间都调用了底层的RTC函数接口,剩下的工作就是完善驱动代码了。

38K10

linux 驱动移植_免驱动led灯好吗

因为我们是做led驱动的移植,而不是自己编写led的驱动代码。我们要移植的代码是linux-3.3.5源代码目录下的driver/leds的leds-gpio.c。...在这个虚拟的总线模型里,把总线、设备驱动是分开的。这样做的好处是,基本上可以保证驱动的设备无关性,也使驱动有更好的移植性。...platform总线给设备驱动的注册提供了载体,一般驱动里面用到的资源都是从注册在platform总线上的设备中获取的,而设备一般就是注册的具体的电路板的资源了。...通常来说,总线上会注册多个设备驱动,那它们怎么区分彼此是对方的菜呢?要不然不就乱套了吗?好吧,注册在platform总线上的匹配方式是通过名字来完成的。...看到这个结构体里的.name=”leds-gpio”了吧,这就是上面提到的驱动设备匹配的名字。现在咱们的led这个设备算是定义好了,但还没注册到platform总线上。

2K20

Linux设备驱动程序(三)——字符驱动

主编号标识设备相连的驱动,例如 /dev/null /dev/zero 都由驱动 1 来管理,而虚拟控制台串口终端都由驱动 4 管理;次编号被内核用来决定引用哪个设备,依据你的驱动是如何编写的,你可以从内核得到一个你的设备的直接指针...这个类型在中定义。 设备号由主设备号次设备号构成。内核提供三个宏来实现这三个东西的转换。...file_operation 结构是一个字符驱动如何建立这个连接,这个结构,定义在 ,是一个函数指针的集合。...scull 驱动引入 2 个核心函数来管理 Linux 内核中的内存,这些函数定义在,是: void *kmalloc(size_t size, int flags); void...一个负值表示发生一个错误,read一样,有效的错误码是定义在 中。

38941

Linux笔记】Linux驱动基础

上一篇分享的:从单片机工程师的角度看嵌入式Linux中有简单提到Linux的三大类驱动: ? 我们学习编程的时候都会从hello程序开始。...同样的,学习Linux驱动我们也从最简单的hello驱动学起。...驱动应用层 还记得实习那会儿我第一次接触嵌入式Linux项目的时候,我的导师让我去学习项目的其它模块,然后尝试着写一个串口相关的应用。...但是,在嵌入式Linux中,驱动应用的分层是特别明显的,最直观的感受就是驱动程序是一个.c文件里,应用程序是另一个.c文件。...以上就是分享关于驱动一些内容,通过以上分析,我们知道,其是有套路(就是常说的驱动框架)可寻的,比如: #include #include <linux/kernel.h

25.8K54

linux设备驱动第四篇:linux驱动调试方法

在普通的c应用程序中,我们经常使用printf来输出信息,或者使用gdb来调试程序,那么驱动程序如何调试呢?...下面就根据一个简单的实例来说明如何调试驱动程序。...如何根据oops定位代码行 我们借用linux设备驱动第二篇:构造运行模块里面的hello world程序来演示出错的情况,含有错误代码的hello world如下: #include <linux/...以上就是通过oops信息来定位驱动崩溃的行号。...printk的使用方法类似printf,只是要注意一下打印级别,详细介绍在linux设备驱动第二篇:构造运行模块中已有描述,另外需要注意的是大量使用printk会严重拖慢系统,所以使用过程中也要注意。

10.3K171

规划驱动架构故障驱动架构

前言 在我看来架构驱动通常分为两种,规划驱动故障驱动。 前者更能体现出架构师在业务角度技术角度的前瞻性能力,后者多是出现在业务高速发展阶段,大部分时间只能疲于应付吧。...期望在测试及灰度阶段发现性能可用性的潜在问题,但大部分还是难以避免线上的故障。 架构想要什么 架构的关键词:高可用,高并发,大数据,分布式,自动化。...故障驱动的架构师总是希望通过系统升级迭代,搞定那些线上暴露出的问题,修复他,对于那些还未发生,认为是不存在的。 当然大部分架构的发展是来自于业务需求,那我们是否还需要主动驱动架构?...规划系统 所以我们要明确的目标将实施方案写进规划,讨论,落地,执行,折腾。...每次在分布式中间件,持续集成持续交付,DevOPS等折腾后,行业内伙伴学习交流,关注发展历程技术选型,将这些计入标准细节。每次都会有收获有启发。

1.1K20
领券