
LINUX设备驱动
TYW----子曰小玖
人生最重要的不是所在的位置,而是所朝的方向。
展开
-
Nand Flash基础知识与坏块管理机制的研究
概述Flash名称的由来,Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次性地将一个block,常见的块的大小是128KB/256KB,全部擦除为1,也就是里面的内容全部都是0xFF了,由于是一下子就擦除了,相对来说,擦除用的时间很短,可以用一闪而过来形容,所以,转载 2017-04-27 14:00:38 · 674 阅读 · 0 评论 -
《Linux Device Drivers》 第十七章 网络驱动程序——note
简介 网络接口是第三类标准Linux设备,本章将描述网络接口是如何与内核其余的部分交互的 网络接口必须使用特定的内核数据结构注册自身,以备与外界进行数据线包交换时调用 对网络接口的常用文件操作是没有意义的,因此在它们身上无法体现Unix的“一切都是文件”的思想 网络驱动程序异步自外部世界的数据包 网络设备向内核请求把外部获得的数据包发送给内核 Linux内核中的网络子系统被设...转载 2018-08-17 09:26:41 · 244 阅读 · 0 评论 -
《Linux Device Drivers》第十六章 块设备驱动程序——note
简介 一个块设备驱动程序主要通过传输固定大小的随机数据来访问设备 Linux内核视块设备为与字符设备相异的基本设备类型 Linux块设备驱动程序接口使得块设备可以发挥其最大的功效,但是其复杂程序又是编程者必须面对的一个问题 一个数据块指的是固定大小的数据,而大小的值由内核确定 数据块的大小通常是4096个字节,但是可以根据体系结构和所使用的文件系统进行改变 与数据块对应的是扇...转载 2018-08-17 09:26:05 · 186 阅读 · 0 评论 -
《Linux Device Drivers》第十五章 内存映射和DMA——note
简介 许多类型的驱动程序编程都需要了解一些虚拟内存子系统如何工作的知识 当遇到更为复杂、性能要求更为苛刻的子系统时,本章所讨论的内容迟早都要用到 本章的内容分成三个部分 讲述mmap系统调用的实现过程 讲述如何跨越边界直接访问用户空间的内存页 讲述了直接内存访问(DMA)I/O操作,它使得外设具有直接访问系统内存的能力 Linux的内存管理 地址类型 L...转载 2018-08-17 09:25:20 · 265 阅读 · 0 评论 -
《Linux Device Drivers》第十四章 Linux 设备模型
简介 2.6内核的设备模型提供一个对系统结构的一般性抽象描述,用以支持多种不同的任务 电源管理和系统关机 与用户空间通信 热插拔设备 设备类型 对象生命周期 kobject、kset和子系统 kobject是组成设备模型的基本结构 对象的引用计数 sysfs表述 数据结构关联 热插拔事件处理 kobject基础知识 &...转载 2018-08-17 09:24:31 · 155 阅读 · 0 评论 -
《Linux Device Drivers》第十三章 USB驱动程序——note
1. USB主机在Linux驱动中,USB驱动处于最底层的是USB主机控制器硬件,在其之上运行的是USB主机控制器驱动,主机控制器之上为USB核心层,再上层为USB设备驱动层(插入主机上的U盘、鼠标、USB转串口等设备驱动)。因此,在主机侧的层次结构中,要实现的USB驱动包括两类:USB主机控制器驱动和USB设备驱动,前者控制插入其中的USB设备,后者控制USB设备如何...转载 2018-08-16 09:56:53 · 269 阅读 · 0 评论 -
《Linux Device Drivers》第十二章 PCI驱动程序——note
简介 本章给出一个高层总线架构的综述 讨论重点是用于访问Peripheral Component Interconnect(PCI,外围设备互联)外设的内核函数 PCI总线是内核中得到最好支持的总线 本章主要介绍PCI驱动程序如果寻找其硬件和获得对它的访问 本章也会介绍ISA总线 PCI接口 PCI是一组完整的规范,定义了计算机的各个不同部分之间应该如何交互 PCI规...转载 2018-08-16 09:55:36 · 295 阅读 · 0 评论 -
《Linux Device Drivers》第十一章 内核的数据类型——note
简介 由于Linux的多平台特性,任何一个重要的驱动程序都应该是可移植的 与内核代码相关的核心问题是应该能够同时访问已知长度的数据项,并充分利用不同处理器的能力 内核使用的数据类型主要被分成三类 类似int这样的标准C语言类型 类似u32这样的有确定大小的类型 像pid_t这样的用于特定内核对象的类型 本章将讨论在什么情况下使用这三种类型以及如何使用 使用...转载 2018-08-16 09:55:01 · 182 阅读 · 0 评论 -
《Linux Device Drivers》第十章 中断处理——note
概述:系统要及时的感知硬件的状态,通常有两种方式:一种是轮询;一种是通过响应硬件中断。前者会浪费处理器的时间,而后者不会。准备并口 在没有节设定产生中断之前,并口是不会产生中断的 并口的标准规定设置端口2(px37a、0x27a或者其它端口)的第4位将启用中断报告,0×10 当处于启用中断状态,每当引脚10的电平发生从低到高改变时,并口就会产生一个中断 引脚9是并口数据字节中的最高...转载 2018-08-16 09:54:09 · 268 阅读 · 0 评论 -
《Linux Device Drivers》 第九章 与硬件通信
概述,本章正式接触真正的硬件。 将介绍对设备提供I/O访问的方法和函数,用于从设备读取数据或将数据写入到设备 并详细说明I/O端口和I/O内存 I/O端口和I/O内存 每种外设都通过读写寄存器进行控制 在硬件层,内存区域和I/O区域没有概念上的区别:它们都通过向地址总线和控制总线发送电平信号进行访问,再通过数据总线读写数据 I/O寄存器和常规内存 I/O寄存器和RAM的最...转载 2018-08-16 09:53:15 · 280 阅读 · 0 评论 -
《Linux Device Drivers》第八章 分配内存——note
本章主要介绍Linux内核的内存管理。kmalloc函数的内幕 不对所获取的内存空间清零 分配的区域在物理内存中也是连续的 flags参数 <linux/slab.h> <linux/gfp.h> GFP_KERNEL 在空闲内存较少时把当前进程转入休眠以等待一个页面 分配内存的函数必须是可重入的 GFP_A...转载 2018-08-16 09:52:19 · 271 阅读 · 0 评论 -
《Linux Device Drivers》 第七章 时间、延时及延缓操作——note
度量时间差 内核通过定时器中断来跟踪时间流 时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据HZ的值设定,在常见的x86 PC平台上,默认定义为1000 <linux/param.h> <linux/timex.h> jiffies_64 unsigned long jiffies 使用jiffies计数器 <linux/ji...转载 2018-08-16 09:51:36 · 312 阅读 · 0 评论 -
《Linux Device Drivers》第六章 高级字符驱动程序操作——note
ioctl 支持的操作,例如 简单数据传输 控制动作,例如用户空间发起弹出介质动作 反馈硬件的状态,例如报告错误信息 参数配置,例如改变波特率 执行自破坏 用户空间的ioctl方法原型:int ioctl(int fd, unsigned long cmd, …);每个ioctl命令就是一个独立的系统调用,而且是非公开的 驱动程序的ioctl方法原型:i...转载 2018-08-16 09:50:34 · 384 阅读 · 0 评论 -
《Linux Device Drivers》第五章 并发和竞态——note
并发及其管理 竞态通常作为对资源的共享访问结果而产生 当两个执行线程需要访问相同的数据结构(或硬件资源)时,并发的可能性就永远存在 只要可能就应该避免资源的共享,但共享通常是必须的,硬件本质上就是共享的 访问管理的常见技术称为“锁定”或者“互斥” 信号量和互斥体 建立临界区:在任意给定的时刻,代码只能被一个线程执行 可以使用一种锁定机制,当进程在等待对临界区的访问时,此机...转载 2018-08-16 09:49:49 · 278 阅读 · 0 评论 -
《Linux Device Drivers》第四章 调试技术——note
1.本章知识点内核中和调试相关的选项 CONFIG_DEBUG_KERNEL CONFIG_DEBUG_SLAB CONFIG_DEBUG_PAGEALLOC CONFIG_DEBUG_SPINLOCK CONFIG_DEBUG_SPINLOCK_SLEEP CONFIG_INIT_DEBUG CONFIG_DEBUG_INFO CONFIG_MAGIC_SYSR...转载 2018-08-16 09:49:07 · 308 阅读 · 0 评论 -
《Linux Device Drivers》第三章 字符设备驱动程序——note
主设备号和次设备号 那些名称被称为特殊文件、设备文件,或者简单称之为文件系统树的节点,它们通常位于/dev目录 通常而言,主设备号标识设备对应的驱动程序 一个主设备号对应一个驱动程序 设备编号的内部表达 dev_t(<linux/types.h>) dev_t是一个32位的数,12位表示主设备号,其余20位表示次设备号 <linux/kdev_t.h...转载 2018-08-15 16:19:46 · 178 阅读 · 0 评论 -
《Linux Device Drivers》第二章 构造和运行模块——note
1 代码是一个完整的 "hello world"模块:#include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "Hello, world...转载 2018-08-15 16:18:51 · 220 阅读 · 0 评论 -
《Linux Device Drivers》第一章 设备驱动程序简介——note
https://blog.csdn.net/luopingfeng/article/details/241791231 引言Linux内核黑客习惯深入Linux内核代码,找到精神食粮,并有能力增加某个新功能或者优化某个子系统的性能。 2 设备驱动程序的定义驱动程序就是使硬件工作的一种特殊软件,它运行在操作系统的内核空间(虚拟地址0xC0000000到0xFFFFFFFF),封装...转载 2018-08-15 16:18:02 · 1585 阅读 · 0 评论 -
《Linux Device Drivers》第十八章 TTY驱动程序——note
简介 tty设备的名称是从过去的电传打字机缩写而来,最初是指连接到Unix系统上的物理或虚拟终端 Linux tty驱动程序的核心紧挨在标准字符设备驱动层之下,并提供了一系列的功能,作为接口被终端类型设备使用 有三种类型的tty驱动程序:控制台、串口和pty /proc/tty/drivers 当前注册并存在于内核的tty设备在/sys/class/tty下都有自己的子目录 ...转载 2018-08-17 09:27:24 · 214 阅读 · 0 评论