设备驱动简介 -- ldd3读书笔记
来源:互联网 发布:淘宝兼职平面模特 编辑:程序博客网 时间:2024/05/22 15:21
1. 概述
读《Linux Device Drivers 3》(影印版)(简称 ldd3)已经到第九章了,感觉前面的也忘的差不多了。所以准备把以前读过的内容做一下笔记,并且主要侧重代码的注释与理解。因为我也是一个Linux内核新手,所以将一步一步的介绍在学习驱动过程中的每一个细节。希望这些博客在巩固知识的同时,能够帮助到其他像我一样摸索在Linux驱动和内核学习领域的入门新手。
这一篇博客算是后续系列博客的开篇,主要介绍一下与Linux的设备驱动相关的概念以及驱动环境的搭建。
2. Linux驱动简介
以前还没有接触过驱动之前,就听我的同学说,他以后要做驱动开发,因为驱动处于底层,技术更新比较慢,这样他就不用整天跟着流行技术跑了。当时就感觉驱动是高大上的技术,下定决心也要学习底层的东西。后来我的同学去了华为,不知道他有没有在做驱动,反正我是下定决心学习要学习Linux内核。
简单的说,驱动就是用来管理硬件的内核代码。驱动程序的本质就是内核代码,用来为上层的应用程序提供支持。学习了驱动程序之后,才明白了上层的应用到底是如何工作的。驱动程序既可以以模块的形式独立存在,在需要的时候再被加载到内核中;又可以被编译到内核中,直接使用。两种方式各有优缺点,模块化的驱动使得内核的体积更小,而内置的驱动可以不用每次启动系统后都加载需要的模块。一般来说,如果某个模块是你所经常需要用到的,建议将这个模块编译到内核中。不过现在模块化已经深入人心,所以ldd3这本书介绍的驱动主要是模块化(module)的。
驱动可以划分为三类:字符设备驱动,块设备驱动和网络驱动。
字符设备驱动是最常见的一类驱动,例如写一个控制LED的驱动程序就属于字符设备驱动。这类驱动就像一个文件一样,通过文件系统中的一个节点(存在于/dev目录之下)进行访问。字符设备驱动实现的操作应该包括open,close,read和write,对它的操作是基于字节流的,就像是在一个操作一个文件(可能没有lseek操作)。
块设备驱动通常与存储设备有关,在块设备上可以安装一个文件系统,例如硬盘等。在大多数unix系统上,块设备驱动的操作不是基于字节流,而是基于块,一个块一般为512字节。不过在Linux系统中,已经掩盖这个特点,使得块驱动一次可以传输任意的数据,这也就和字符设备完全一样了。另外,应用程序对于块设备驱动的访问也是通过/dev下的文件系统节点来进行的。
网络设备在这里就先不介绍了。
3. 驱动开发环境搭建
关于 ldd3 的代码可以使用下面的命令从 git 仓库进行拷贝:
git clone https://github.com/duxing2007/ldd3-examples-3.x
将仓库克隆到本地之后,进入到仓库的目录,运行 make 命令进行编译,就可以使用了。这个仓库包含了 ldd3 每一章介绍的代码示例,很有参考价值。关于仓库中具体模块的使用,以及在编译过程中出现的错误,将会在以后的博客中介绍。
- LDD3 读书笔记---设备驱动简介
- 设备驱动简介 -- ldd3读书笔记
- LDD3读书笔记------总线, 设备, 和驱动,类
- LDD3读书笔记(第14章 tty设备驱动)
- LDD3读书笔记--字符驱动
- LDD3 字符设备驱动
- 字符设备驱动相关函数及数据结构简介 (ldd3)
- 字符设备驱动相关函数及数据结构简介 (ldd3)
- LDD3学习笔记(1):设备驱动简介
- LDD3读书笔记-----Linux 设备模型
- 总线设备驱动模型 ----LDD3
- 《Linux设备驱动》读书笔记:第一章:设备驱动简介
- LDD3读书笔记-----高级字符驱动操作
- LDD3笔记:第三章 字符设备驱动
- 学习Ldd3--字符设备驱动(第三章)
- ldd3笔记_字符设备驱动
- linux设备驱动读书笔记
- linux设备驱动读书笔记
- 单向链表逆序
- Cocoa编码规范 -[译]Coding Guidelines for Cocoa
- 数据结构之设置尾指针的单向循环链表(参考整理严蔚敏数据结构)
- hdu - 2870 - Largest Submatrix(dp / 单调栈)
- Android 流量分析 tcpdump & wireshark
- 设备驱动简介 -- ldd3读书笔记
- 游戏资源思路技术的储备
- 实现提交代码github自动通知jenkins编译部署
- Cocos2d-x 定时器的浅析
- 数据导入和导出ORACLE+MySQL
- UVa 253 - Cube painting
- 业界资讯:用as3 写后台服务?
- STL中用ERASE()方法遍历删除元素
- 高级处理机制