Linux设备驱动
文章平均质量分 82
tigerly
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux设备驱动程序学习(1) -字符设备驱动程序
Linux设备驱动程序学习(1)-字符设备驱动程序今天进入《Linux设备驱动程序(第3版)》第三章字符设备驱动程序的学习。这一章主要通过介绍字符设备scull(Simple Character Utility for Loading Localities,区域装载的简单字符工具)的驱动程序编写,来学习Linux设备驱动的基本知识。scull可以为真正的设备驱动程序提供样板。转载 2014-04-03 15:09:30 · 479 阅读 · 0 评论 -
Linux设备驱动程序学习(12)-Linux设备模型(底层原理简介)
Linux设备驱动程序学习(12)-Linux设备模型(底层原理简介)以《LDD3》的说法:Linux设备模型这部分内容可以认为是高级教材,对于多数程序作者来说是不必要的。但是我个人认为:对于一个嵌入式Linux的底层程序员来说,这部分内容是很重要的。以我学习的ARM9为例,有很多总线(如SPI、IIC、IIS等等)在Linux下已经被编写成了子系统,无需自转载 2014-04-03 15:30:38 · 615 阅读 · 0 评论 -
Linux设备驱动程序学习(20)-内存映射和DMA-基本概念
原文地址:Linux设备驱动程序学习(20)-内存映射和DMA-基本概念 作者:tekkamanninja 这部分主要研究 Linux 内存管理的基础知识, 重点在于对设备驱动有用的技术. 因为许多驱动编程需要一些对于虚拟内存(VM)子系统原理的理解。 而这些知识主要分为三个部分: 1、 mmap系统调用的实现原理:它允许设备内存直接映射到一个用户进程地址空间.转载 2014-04-04 10:25:27 · 1869 阅读 · 0 评论 -
Linux设备驱动程序学习(15)-Linux设备模型(热插拔、mdev 与 firmware)
Linux设备驱动程序学习(15)-Linux设备模型(热插拔、mdev 与 firmware)热插拔有 2 个不同角度来看待热插拔: 从内核角度看,热插拔是在硬件、内核和内核驱动之间的交互。 从用户角度看,热插拔是内核和用户空间之间,通过调用用户空间程序(如hotplug、udev 和 mdev)的交互。 当需要通知用户内核发生了某种热插拔事件时,内核才调用这转载 2014-04-04 10:25:59 · 815 阅读 · 0 评论 -
Linux设备驱动程序学习(22)-Linux下PCI设备驱动程序开发
一、PCI总线系统体系结构PCI是外围设备互连(Peripheral Component Interconnect)的简称,作为一种通用的总线接口标准,它在目前的计算机系统中得到了非常广泛的应用。PCI提供了一组完整的总线接口规范,其目的是描述如何将计算机系统中的外围设备以一种结构化和可控化的方式连接在一起,同时它还刻画了外围设备在连接时的电气特性和行为规约,并且详细定义了计算机系统中的各转载 2014-04-04 10:26:17 · 807 阅读 · 0 评论 -
Linux设备驱动程序学习(10)-时间、延迟及延缓操作(Jit.c)
以下代碼基本演示了Linux设备驱动程序学习(10)-时间、延迟及延缓操作的所有知識点击(此处)折叠或打开/* * jit.c -- the just-in-time module * * Copyright (C) 2001,2003 Alessandro Rubini and Jonathan Corbet * Cop转载 2014-04-03 15:15:05 · 1022 阅读 · 0 评论 -
Linux设备驱动程序学习(0)-Hello, world模块
原文地址:Linux设备驱动程序学习(0)-Hello, world模块 作者:tekkamanninjaLinux设备驱动程序学习(0)-设备驱动介绍& Hello, world!模块设备驱动程序的作用设备驱动程序就是这个进入Linux内核世界的大门。设备驱动程序在Linux内核中扮演着特殊的角色。它是一个独立的“黑盒子”,使某个特定硬件响应一个定义好的内部编转载 2014-04-03 15:07:04 · 1338 阅读 · 0 评论 -
Linux设备驱动程序学习(10)-时间、延迟及延缓操作(Jiq.c)
共享隊列点击(此处)折叠或打开/* * jiq.c -- the just-in-queue module * * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet * Copyright (C) 2001 O'Reilly & Associates转载 2014-04-03 15:16:30 · 677 阅读 · 0 评论 -
Linux设备驱动程序学习(8)-分配内存
Linux设备驱动程序学习(8)-分配内存内核为设备驱动提供了一个统一的内存管理接口,所以模块无需涉及分段和分页等问题。 我已经在第一个scull模块中使用了 kmalloc 和 kfree 来分配和释放内存空间。kmalloc 函数内幕kmalloc 是一个功能强大且高速(除非被阻塞)的工具,所分配到的内存在物理内存中连续且保持原有的数据(不清零)。原型:转载 2014-04-03 15:24:34 · 774 阅读 · 0 评论 -
Linux设备驱动程序学习(13)-Linux设备模型(总线、设备、驱动程序和类)
Linux设备驱动程序学习(13)-Linux设备模型(总线、设备、驱动程序和类)文章的例子和实验使用《LDD3》所配的lddbus模块(稍作修改)。提示:在学习这部分内容是一定要分析所有介绍的源代码,知道他们与上一部分内容(kobject、kset、attribute等等)的关系,最好要分析一个实际的“flatform device”设备,不然会只学到表象转载 2014-04-03 15:32:26 · 459 阅读 · 0 评论 -
Linux设备驱动程序学习(21)-内存映射和DMA-数据结构
原文地址:Linux设备驱动程序学习(21)-内存映射和DMA-数据结构 作者:tekkamanninja 前面学习了内核内存管理的基本概念,现在再来看看内核用怎样的数据结构来管理这些物理内存和映射。 内核源码:Linux-3.0一、物理页在内存中的数据结构及内存映射 由于历史原因, 内核使用逻辑地址来引用物理内存页。 但后来增加了对高内存的支转载 2014-04-04 10:25:43 · 1376 阅读 · 0 评论 -
Linux设备驱动程序学习(6)-高级字符驱动程序操作[(4)异步通知fasync]
异步通知fasync异步通知fasync是应用于系统调用signal和sigaction函数,下面我会使用signal函数。简单的说,signal函数就是让一个信号与与一个函数对应,没当接收到这个信号就会调用相应的函数。一、什么是异步通知个人认为,异步通知类似于中断的机制,如下面的将要举例的程序,当设备可写时,设备驱动函数发送一个信号给内核,告知内核有数据可转载 2014-04-03 15:23:32 · 553 阅读 · 0 评论 -
Linux设备驱动程序学习(7)-内核的数据类型(深入分析Linux内核链表)
深入分析Linux内核链表一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。通常链表数据结构至少应包含两转载 2014-04-03 15:18:36 · 697 阅读 · 0 评论 -
Linux设备驱动程序学习(10)-时间、延迟及延缓操作
Linux设备驱动程序学习(10)-时间、延迟及延缓操作 度量时间差 时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据 HZ 值来设定,HZ 是一个体系依赖的值,在 中定义或该文件包含的某个子平台相关文件中。作为通用的规则,即便如果知道 HZ 的值,在编程时应当不依赖这个特定值,而始终使用HZ。对于当前版本,我们应完全信任内核开发者,他们已经选择转载 2014-04-03 15:13:30 · 1493 阅读 · 0 评论 -
Linux设备驱动程序学习(11)-中断处理
Linux设备驱动程序学习(11)-中断处理可以让设备在产生某个事件时通知处理器的方法就是中断。一个“中断”仅是一个信号,当硬件需要获得处理器对它的关注时,就可以发送这个信号。 Linux 处理中断的方式非常类似在用户空间处理信号的方式。 大多数情况下,一个驱动只需要为它的设备的中断注册一个处理例程,并当中断到来时进行正确的处理。本质上来讲,中断处理例程和其他的代码并行运行。因此,它们不可转载 2014-04-03 15:28:44 · 714 阅读 · 0 评论 -
Linux设备驱动程序学习(14)-Linux设备模型(各环节的整合)
Linux设备驱动程序学习(14)-Linux设备模型(各环节的整合) 通过一个设备在内核中生命周期的各个阶段,可以更好地理解Linux设备模型。我将通过分析lddbus和sculld的源码来了解Linux设备模型中各环节的整合。《LDD3》中的(PCI总线)各环节的整合这部分内容作为参考资料,因为嵌入式Linux比较少用到PCI总线。看这部分内容一定要先熟悉一下 lddb转载 2014-04-04 10:25:08 · 673 阅读 · 0 评论 -
Linux设备驱动程序学习(2)-调试技术
原文地址:Linux设备驱动程序学习(2)-调试技术 作者:tekkamanninjaLinux设备驱动程序学习(2)-调试技术今天进入《Linux设备驱动程序(第3版)》第四章调试技术的学习。 一、内核中的调试支持在前面已经建议过:学习编写驱动程序要构建安装自己的内核(标准主线内核)。最重要的原因之一是:内核开发者已经建立了多项用于调试的功能。但是由于转载 2014-04-03 15:08:22 · 544 阅读 · 0 评论 -
Linux设备驱动程序学习(2)-调试技术(补充)
Linux 调试技术本文讨论了四种调试 Linux 程序的情况。在第 1 种情况中,我们使用了两个有内存分配问题的样本程序,使用 MEMWATCH 和 Yet Another Malloc Debugger(YAMD)工具来调试它们。在第 2 种情况中,我们使用了 Linux 中的 strace 实用程序,它能够跟踪系统调用和信号,从而找出程序发生错误的地方。在第 3 种情况中,我们使转载 2014-04-03 15:10:41 · 689 阅读 · 0 评论 -
Linux设备驱动程序学习(3)-并发和竞态
Linux设备驱动程序学习(3)-并发和竞态今天进入《Linux设备驱动程序(第3版)》第五章并发和竞态的学习。对并发的管理是操作系统编程中核心的问题之一。 并发产生竞态,竞态导致共享数据的非法访问。因为竞态是一种极端低可能性的事件,因此程序员往往会忽视竞态。但是在计算机世界中,百万分之一的事件可能没几秒就会发生,而其结果是灾难性的。一、并发及其管理竞态通常是作转载 2014-04-03 15:11:50 · 559 阅读 · 0 评论 -
Linux设备驱动程序学习(7)-内核的数据类型
Linux设备驱动程序学习(7)-内核的数据类型由于前面的学习中有用到 第十一章 内核数据结构类型 的知识,所以我先看了。要点如下:将linux 移植到新的体系结构时,开发者遇到的若干问题都与不正确的数据类型有关。坚持使用严格的数据类型和使用 -Wall -Wstrict-prototypes 进行编译可能避免大部分的 bug。内核数据使用的数据类型主要分为 3转载 2014-04-03 15:17:33 · 1229 阅读 · 0 评论 -
Linux设备驱动程序学习(5)-高级字符驱动程序操作[(2)阻塞型I/O和休眠]
Linux设备驱动程序学习(5)-高级字符驱动程序操作[(2)阻塞型I/O和休眠] 这一部分主要讨论:如果驱动程序无法立即满足请求,该如何响应?(65865346)一、休眠进程被置为休眠,意味着它被标识为处于一个特殊的状态并且从调度器的运行队列中移走。这个进程将不被在任何 CPU 上调度,即将不会运行。 直到发生某些事情改变了那个状态。安全地转载 2014-04-03 15:21:15 · 590 阅读 · 0 评论 -
Linux设备驱动程序学习(6)-高级字符驱动程序操作[(3)设备文件的访问控制]
Linux设备驱动程序学习(6)-高级字符驱动程序操作[(3)设备文件的访问控制] 提供访问控制对于一个设备节点来的可靠性来说有时是至关重要的。这部分的内容只是在open和release方法上做些修改,增加一些检查机制既可。独享设备最生硬的访问控制方式是只允许一个设备一次被一个进程打开(独享),这是一个设备驱动最简单的访问控制。实现十分简单,具体的代码看实验源码吧!转载 2014-04-03 15:22:11 · 500 阅读 · 0 评论 -
Linux设备驱动程序学习(9)-与硬件通信
在学习有关I/O总线的内容时,最好先看看相关的知识:从PC总线到ARM的内部总线 I/O 端口和 I/O 内存每种外设都是通过读写寄存器来进行控制。在硬件层,内存区和 I/O 区域没有概念上的区别: 它们都是通过向在地址总线和控制总线发出电平信号来进行访问,再通过数据总线读写数据。因为外设要与I\O总线匹配,而大部分流行的 I/O 总线是基于个人计算机模转载 2014-04-03 15:27:22 · 925 阅读 · 0 评论 -
Linux设备驱动程序学习(3-补)-Linux中的循环缓冲区
Linux设备驱动程序学习(3-补)-Linux中的循环缓冲区参考资料:《Linux内核中的循环缓冲区》作者:西邮 王聪 严重感谢文章作者! 但是(可能是源码版本问题)有些结论并不正确: “而kfifo_init只会接受一个已分配好空间的fifo->buffer,不能和kfifo_free搭配,用kfifo_init分配的kfifo只能用kfree释放。” 阅转载 2014-04-03 15:29:40 · 613 阅读 · 0 评论 -
Linux设备驱动程序学习(4)-高级字符驱动程序操作[(1)ioctl and llseek]
Linux设备驱动程序学习(4)-高级字符驱动程序操作[(1)ioctl and llseek]今天进入《Linux设备驱动程序(第3版)》第六章高级字符驱动程序操作的学习。一、ioctl大部分设备除了读写能力,还可进行超出简单的数据传输之外的操作,所以设备驱动也必须具备进行各种硬件控制操作的能力. 这些操作常常通过 ioctl 方法来支持,它有和用户空间版本不同的转载 2014-04-03 15:20:06 · 1039 阅读 · 0 评论
分享