「Efficient Android Threading 笔记」- C1 Android Components and the Need for Multiprocessing Android RecyclerView Android Socket Programming Supporting Multiple Screens Make a Reusable UI in Android App Development 如何在 Android Studio 中包含 *.so library,并使用库中定义的方法? 使用 SpannableString 格式化字符串,实现前景色、下划线、超链接、图文混排等 如何使用 bound service 完成进程间通信? 创建自定义视图 Creating custom views 通过 Android Theme & Style 定制应用的样式 「译」Android ViewPropertyAnimator 介绍 Android Animation Interpolator - Android 动画插值器源码笔记 「译」Android Animation in Honeycomb by Chet Haase(Android 3.0系统中的动画机制) 从 Android Sample ApiDemos 中学习 android.animation API 的用法 如何学习 Android Animation? 如何实现 Android ListView「上拉加载更多」? 「译」向Big Nerd Ranch提问:为什么Fragment在Android App开发中非常重要? 分类整理我在 SegmentFault 上针对某些问题作的回答 Android Servcie 后台服务总结笔记 如何在Android设备旋转时暂存数据以保护当前的交互状态? Android Message Handler 消息处理机制总结笔记 如何获取FragmentTabHost中指定标签页的Fragment? Fragment子类必须包含一个public无参构造器 如何更新及替换ViewPager中的Fragment? 如何使用Android UI Fragment开发“列表-详情”界面? 一个Android音频文本同步的英文有声读物App的开发过程 「Android编程权威指南笔记」Android应用本地化 通过jfeinstein10/SlidingMenu实现Android侧滑菜单 为Ubuntu14.04部署Android App的Eclipse开发环境 「Android编程权威指南笔记」使用ListFragment显示列表 「Android编程权威指南笔记」SDK版本与兼容 「Android编程权威指南笔记」Android布局和组件 「Android编程权威指南笔记」UI Fragment 「Android编程权威指南笔记」Activity 第一次开发iOS App和Android的对比总结笔记 「App Training笔记」创建第一个应用 「App Training笔记」开发入门训练大纲 Android APP - 从远程FTP服务器下载文件到本地

Linux设备驱动程序开发

2013年12月18日

第 1 部分:字符设备驱动程序 Character Device Drivers

问题:

  • 应用程序如何与字符设备驱动程序交互?比如,用户空间的open是如何一步一步调用驱动程序的open?
  • 当完成一个设备的驱动程序后,必须调用API注册到kernel。问题是kernel提供了什么?做了什么?使得交互成为可能。

理解上述问题需要具备如下知识:

在此基础上,将围绕“创建并注册一个新的字符设备”展开如下论述:

  • 如何实现 how to create a new character device driver;
  • 如何注册 how to register character device driver;
  • 幕后的内核机制 mechanism in kernel.

第 2 部分:串行设备驱动程序(TTY、UART、Line Disciplin) Serial Device Drivers

TTY设备驱动程序的内核数据结构定义 struct tty_driver, 开发针对特定设备的 TTY 驱动程序,仅2步:

  • 定义 tty_driver, 关键是完成操作硬件设备的入口函数集 struct tty_operations;
  • 注册 tty_driver, 通过调用 TTY I/O Core(内核为支持 tty driver 而定义的一系列数据结构和函数) API.

完成上述2个步骤使得用户空间可通过设备文件访问硬件,使用设备驱动程序提供的各种操作[ ELDD-6.3, LDD3-18 ].

TODO

第 3 部分:I2C设备驱动程序

TODO

第 4 部分:通用驱动程序模型 The Generic Driver Model

TODO

第 5 部分:参考书目

  • LKA – 《深入linux内核结构 Professional Linux Kernel Architecture》Wolfgang著,郭旭译,人民邮电出版社201006.
    讨论底层基础设施的实现。

  • ELDD – 《精通Linux设备驱动程序开发 Essential Linux Device Drivers》宋宝华译,人民邮电出版社201006.

  • ILDD – 《深入Linux设备驱动程序内核机制 Internals of Linux Device Drivers》陈学松著,电子工业出版社201201.
    强烈推荐 ILDD,作者并没有大量复制内核代码占据篇幅,而是以问题为导向,从代码中提取关键部分,通过关键数据结构和代码执行流程,条理清晰地阐述某个功能的实现。作者画的流程图使问题更容易理解。(书中2.7节解决了笔者的一个问题后,有上述感悟)

  • LDD3 – 《Linux设备驱动程序第3版 Linux Device Drivers》魏永明译,中国电力出版社200601.
    使用例程创建新的驱动程序。

编辑历史

  • 2013-12-18 初稿,完成“字符设备驱动程序”笔记整理 by li2 上海闸北
  • 2014-01-05 使用markdown编辑格式

知识共享许可协议
li2的博客WeiYi.Li 创作,采用 知识共享 署名-非商业性使用 4.0 国际 许可协议进行许可。
© 2011-2017. All rights reserved by WeiYi.Li. Powerd by Jekyll & LinAnYa's Theme