1.嵌入式开发如何入门

2.如何学习嵌入式Linux驱动

3.嵌入式linux 驱动对设备的识别过程?

4.Linux驱动程序开发实例的目录

5.Linux设备驱动开发入门与编程实践的目录

嵌入式linux驱动程序详解_嵌入式linux驱动程序开发实例教程

我有,使用百度网盘免费分享给你,链接是:

s://pan.baidu/s/1gOoPtcWX9IquGVqeRtalAA?pwd=1234

Linux设备驱动程序是高级应用程序与硬件设备之间的桥梁。驱动程序开发是软硬件相互结合的技术。本书是一本专门介绍Linux设备驱动程序开发的书籍,涵盖了Linux驱动程序基础、驱动模型、内存管理、内核同步机制、I2C驱动程序、LCD驱动程序、网络驱动程序、USB驱动程序、输入子系统驱动程序、块设备驱动程序、音频设备驱动等内容。本书以实例为主线,是为Linux设备驱动程序开发人员量身打造的学习精品书籍和实战指南。本书基于Linux4.5内核,提供了丰富的实例代码和详细的注释,并附赠完整源代码供读者下载。本书主要面向各种层次的嵌入式Linux软硬件开发工程师,也可以作为各类嵌入式系统培训机构的培训实验教材和高校计算机课程教辅书籍。

嵌入式开发如何入门

1、 编写Linux设备驱动要求工程师有非常好的硬件基础,懂得SRAM、Flash、SDRAM、磁盘的读写方式,UART、I2C、USB等设备的接口以及轮询、中断、DMA的原理,PCI总线的工作方式以及CPU的内存管理单元(MMU)等。

2、编写Linux设备驱动要求工程师有非常好的C语言基础,能灵活地运用C语言的结构体、指针、函数指针及内存动态申请和释放等。

3、编写Linux设备驱动要求工程师有一定的Linux内核基础,虽然并不要求工程师对内核各个部分有深入的研究,但至少要明白驱动与内核的接口。尤其是对于块设备、网络设备、Flash设备、串口设备等复杂设备,内核定义的驱动体系架构本身就非常复杂。

4、编写Linux设备驱动要求工程师有非常好的多任务并发控制和同步的基础,因为在驱动中会大量使用自旋锁、互斥、信号 量、等待队列等并发与同步机制。朱,有,鹏的驱动开发讲得还不错。

如何学习嵌入式Linux驱动

1、Linux基础

安装Linux操作系统Linux文件系统Linux常用命令Linux启动过程详解熟悉Linux服务能够独立安装Linux操作系统

能够熟练使用Linux系统的基本命令认识Linux系统的常用服务安装Linux操作系统Linux基本命令实践设置Linux环境变量定制Linux的服务

Shell编程基础使用vi编辑文件使用Emacs编辑文件使用其他编辑器

2、Shell编程基础

Shell简介认识后台程序Bash编程熟悉Linux系统下的编辑环境熟悉Linux下的各种Shell熟练进行shell编程熟悉vi基本操作

熟悉Emacs的基本操作比较不同shell的区别编写一个测试服务器是否连通的shell脚本程序编写一个查看进程是否存在的shell脚本程序

编写一个带有循环语句的shell脚本程序

3、Linux下的C编程基础

linuxC语言环境概述G使用方法Gdb调试技术AutoconfAutomakeMakefile代码优化

熟悉Linux系统下的开发环境熟悉G编译器熟悉Makefile规则编写Hello,World程序使用make命令编译程序编写带有一个循环的程序

调试一个有问题的程序

4、嵌入式系统开发基础

嵌入式系统概述交叉编译配置TFTP服务配置NFS服务下载Bootloader和内核

嵌入式Linux应用软件开发流程熟悉嵌入式系统概念以及开发流程建立嵌入式系统开发环境制作cross_g工具链编译并下载U-boot

编译并下载Linux内核编译并下载Linux应用程序

5、嵌入式系统移植

Linux内核代码平台相关代码分析ARM平台介绍平台移植的关键技术移植Linux内核到ARM平台了解移植的概念

能够移植Linux内核移植Linux2.6内核到ARM9开发板

6、嵌入式Linux下串口通信

串行I/O的基本概念嵌入式Linux应用软件开发流程Linux系统的文件和设备与文件相关的系统调用配置超级终端和MiniCOM

能够熟悉进行串口通信熟悉文件I/O编写串口通信程序编写多串口通信程序

7、嵌入式系统中多进程程序设计

Linux系统进程概述嵌入式系统的进程特点进程操作守护进程相关的系统调用了解Linux系统中进程的概念能够编写多进程程序编写多进程程序

编写一个守护进程程序sleep系统调用任务管理、同步与通信Linux任务概述任务调度管道信号共享内存任务管理API了解Linux系统任务管理机制

熟悉进程间通信的几种方式熟悉嵌入式Linux中的任务间同步与通信编写一个简单的管道程序实现文件传输编写一个使用共享内存的程序

8、嵌入式系统中多线程程序设计

线程的基础知识多线程编程方法线程应用中的同步问题了解线程的概念能够编写简单的多线程程序编写一个多线程程序

9、嵌入式Linux网络编程

网络基础知识嵌入式Linux中TCP/IP网络结构socket编程常用API函数分析Ping命令的实现基本UDP套接口编程许可证管理

PPP协议GPRS了解嵌入式Linux网络体系结构能够进行嵌入式Linux环境下的socket编程熟悉UDP协议、PPP协议熟悉GPRS

使用socket编写代理服务器使用socket编写路由器编写许可证服务器指出TCP和UDP的优缺点编写一个web服务器编写一个运行在

ARM平台的网络播放器

10、GUI程序开发

GUI基础嵌入式系统GUI类型编译QT进行QT开发熟悉嵌入式系统常用的GUI能够进行QT编程使用QT编写“Hello,World”程序

调试一个加入信号/槽的实例通过重载QWidget类方法处理

11、Linux字符设备驱动程序

设备驱动程序基础知识Linux系统的模块字符设备驱动分析fs_operation结构加载驱动程序了解设备驱动程序的概念

了解Linux字符设备驱动程序结构能够编写字符设备驱动程序编写Skull驱动编写键盘驱动编写I/O驱动分析一个看门狗驱动程序

对比Linux2.6内核与2.4内核中字符设备驱动的不同Linux块设备驱动程序块设备驱动程序工作原理典型的块设备驱动程序分析

块设备的读写请求队列了解Linux块设备驱动程序结构能够编写简单的块设备驱动程序比较字符设备与块设备的异同编写MMC卡驱动程序分析一个文件系统

对比Linux2.6内核与2.4内核中块设备驱动的不同

12、文件系统

虚拟文件系统文件系统的建立ramfs内存文件系统proc文件系统devfs文件系统MTD技术简介MTD块设备初始化

MTD块设备的读写操作了解Linux系统的文件系统了解嵌入式Linux的文件系统了解MTD技术能够编写简单的文件系统为ARM9开发板添加MTD支持

移植JFFS2文件系统通过proc文件系统修改操作系统参数分析romfs文件系统源代码创建一个cramfs文件系统

无论选择哪一方向,基本的linux的知识是需要具备的,其他还需要掌握的知识有ARM(最常用的一款嵌入式处理器)和C语言编程,每一方面知识的掌握熟练程度都最终决定了个人进行嵌入式linux开发的综合能力。

嵌入式linux 驱动对设备的识别过程?

学习嵌入式Linux驱动,首先我们需要的是去了解整个嵌入式开发的整个流程分为四个层次:底层硬件设计、嵌入式驱动开发、内核开发、应用层开发。其中底层硬件设计必须要有一定的硬件功底,我建议你若不是科班出身(数电、模电、高频学的比较好)的人不要去考虑。内核开发需要你有很好的软件功底(C语言、C++学的很好,有过一定的项目经验最好),这个事嵌入式驱动开发的人以后可以考虑发展的方向,不建议一开始就学。如果你是面临着急需找工作的人并且你有一定的商业头脑、创新思维,我认为学习应用层开发是最好不过的选择,但是你别忘了因为简单容易学所以学的人比较多。如果你把前面三个选择都否定了,而且你C语言学的还可以,有学过C51或者STM32这些简单的东西,你不妨看下去。如果你觉得这些对你没用或者不感兴趣,请就此打住不要再往下看不要再浪费你的时间了。亲,去做你该做的事吧!

一、入门者:了解嵌入式

了解嵌入式开发我觉得最好的东西还是《嵌入式系统设计师教程》,这本书写的很烂,无非是用来应付考试的。但是我认为对我们了解嵌入式开发需要学习些什么东西还是有一点用处的,可以在网上浏览一下,你就可以知道嵌入式大概要学的东西,不建议精读。另外如果想大致了解一下嵌入式开发的四个层次,可以看下韦东山韦老师的《作为一个新人,怎样学习嵌入式Linux》://blog.sina.cn/s/blog_13955cfdb0102v3it.html

二、初学者:学习使用Linux

我这里的初学者者指的是已经回了解了嵌入式,有欲望想往深处学习的码农们。这个时候我们已经找到了感觉了。嵌入式操作系统有Vxworks、WINCE、uCLinux、Embedded Linux等操作,但是我们一般选择Linux。原因有二:Linux代码开源,可供学习免费使用。Linux学习的资料非常多,很容易找到小伙伴。学习嵌入式Linux驱动,就必须先学习使用Linux。但是我们对于Linux的使用其实不必学的太多,多了反而会在这浪费的时间。像大家都说可以的《鸟哥的linux私房菜》我不建议大家读,我认为像《Linux就该这么学》这样范范而谈的书籍反而更适合我们初学者。我们对Linux的定位是:基本命令会用,不懂再查。

://.linuxprobe/chapter-00.html如果觉的适合自己可以去看下

二、菜鸟们:加强C语言,看得懂电路图

我相信到这一阶段你已经深深的爱上了Linux,当然你也可能恨死她了,恨她为什么有那么多命令,恨她为什么不去想Windows那么傻瓜式啊,点点就可以了,但是你别忘了其实Windows也有DOS命令行,只是你没有用过而已吧。我对没有去Linux命令界面敲过几行命令的人视为不会使用操作系统的人,你觉得啦?

既然你爱上她了(不爱请不要再往下看),那请问你为了一个爱你的人做件可能对你难的事,你愿意吗?愿意的话,我们就要去加强自己的C语言基础,我觉得书看的多,看的多,还不如看懂一本书,把一本书的程序题好好敲敲,你觉得啦?所以我还是推荐最好的入门的C语言书籍《C程序设计》谭浩强前辈写的。对于看得懂电路图我认为最好的是去下一个画电路板的软件随便找几个电路图画画,慢慢就会了,当然你也可以跳过,我相信如果你真的爱上这一行了以后的学习工作中会逼出来的。

三、码农们:选择一块合适的开发板,然后看书、看数据手册、敲代码、看

嵌入式Linux驱动开发是一个敲代码的过程,所以称之为码农。对于嵌入式Linux驱动开发来说是一个偏软件的工作,而码农们就是一个看书、看资料、看学习理论知识,然后自己实现的反反复复的过程。只有你不断Debug不断解决不断充实理论知识,才可能往更高层次走。对于书籍我推荐韦东山韦老师的《嵌入式Linux驱动开发完全手册》,当然我觉得成为中国化的S3C2440数据手册更好些(至于为什么学ARM9的S3C2440可以往下看),当然这本书也有他的不好之处:太过于实践,理论知识不全。我觉得配合杜春雷老师的《ARM体系结构与编程》看会非常好,有比较详细的对ARM的介绍。另外既然我们学习S3C2440的话,《S3C2440数据手册》我们是非看不可。另外老外写的《设备驱动开发》也就是所谓的LDD,还有就是宋宝华老师的《Linux设备驱动开发详解》,挺不错的。的话我力顶《嵌入式Linux驱动开发完全手册》的作者韦东山韦老师的,可以去百问网://.100ask.org/ 自行查看。开发板的话我觉得可以自行选择,最好选择S3c2440或者S3c2410的芯片,因为ARM9的资料最多,随便上网搜就是一大把。

四、大神们:研究Linux

毛德操/ 胡希明写的《Linux内核源代码情景分析》、 赵炯《Linux内核完全注释》、《unix环境高级编程》还有更多的可以去看一看瞧一瞧了,我相信你学到这里就可以自找出路了,我也目前在前面阶段,以后把这些学习完再做补充了。

我相信能够学习嵌入式Linux驱动的人都能够知道有好的学习资料学习能够事半功倍的,本人也是学习驱动的菜鸟,历经了学习的沧桑,今天在这里分享一下自己学习嵌入式Linux驱动过程中自认为好的资料,不好请勿喷。有兴趣的可以转载分享给你的朋友。以后有时间我会整理我在学习过程中的东西,加我关注以后一起学习叫流。

Linux驱动程序开发实例的目录

驱动程序识别设备时,有以下两种方法:

(1)驱动程序本身带有设备的信息,比如开始地址、中断号等:加载驱动程序时,就可以根据这些信息来识别设备。

(2)驱动程序本身没有设备的信息,但是内核中已经(或以后)根据其他方式确定了很多设备的信息;加载驱动程序时,将驱动程序与这些设备逐个比较,确定两者是否匹配(match)。如果驱动程序与某个设备匹配,就可以通过该驱动程序操作这个设备了。内核常使用第二种方法来识别设备,这可以将各种设备集中在-一个文件中管理,当开发板的配置改变时,便于修改代码。在内核文件include/linux/platform _device.h 中,定义了两个数据结构来表示这些设备和驱动程序: platform_ device 结构用来描述设备的名称、ID、所占用的(比如内存地址/大小、中断号)等; platform_ driver 结构用来描述各种操作函数, 比如枚举函数、移除设备函数、驱动的名称等。内核启动后,首先构造链表将描述设备的platform_device结构组织起来,得到一一个设备的列表:当加载某个驱动程序的platform_ driver 结构时,使用一.些匹配函数来检查驱动程序能否支持这些设备,常用的检查方法很简单:比较驱动程序和设备的名称。

Linux设备驱动开发入门与编程实践的目录

前言

第1章 Linux设备驱动程序模型 1

1.1 设备驱动程序基础 1

1.1.1 驱动程序的概念 1

1.1.2 驱动程序的加载方式 2

1.1.3 编写可加载模块 3

1.1.4 带参数的可加载模块 5

1.1.5 设备驱动程序的分类 6

1.2 字符设备驱动程序原理 7

1.2.1 file_operations结构 7

1.2.2 使用register_chrdev注册字符

设备 9

1.2.3 使用cdev_add注册字符设备 11

1.2.4 字符设备的读写 13

1.2.5 ioctl接口 14

1.2.6 seek接口 16

1.2.7 poll接口 18

1.2.8 异步通知 22

1.3 proc文件系统 24

1.3.1 proc文件系统概述 24

1.3.2 seq_file机制 25

1.3.3 使用proc文件系统 27

1.4 块设备驱动程序 32

1.4.1 Linux块设备驱动程序原理 32

1.4.2 简单的块设备驱动程序实例 35

1.5 网络设备驱动程序 39

1.5.1 网络设备的特殊性 39

1.5.2 sk_buff结构 40

1.5.3 Linux网络设备驱动程序架构 42

1.5.4 虚拟网络设备驱动程序实例 46

1.6 Linux 2.6设备管理机制 50

1.6.1 kobject和kset 50

1.6.2 sysfs文件系统 51

1.6.3 设备模型层次 52

1.6.4 platform的概念 54

第2章 Linux内核同步机制 58

2.1 锁机制 58

2.1.1 自旋锁 58

2.1.2 读写锁 60

2.1.3 RCU 61

2.2 互斥 64

2.2.1 原子操作 64

2.2.2 信号量 65

2.2.3 读写信号量 67

2.3 等待队列 68

2.3.1 等待队列原理 68

2.3.2 阻塞式I/O实例 68

2.3.3 完成 70

2.4 关闭中断 71

第3章 内存管理与链表 72

3.1 物理地址和虚拟地址 72

3.2 内存分配与释放 72

3.3 IO端口到虚拟地址的映射 73

3.3.1 静态映射 73

3.3.2 动态映射 75

3.4 内核空间到用户空间的映射 76

3.4.1 内核空间到用户空间的地址

映射原理 76

3.4.2 mmap地址映射实例 78

3.5 内核链表 80

3.5.1 Linux内核中的链表 80

3.5.2 内核链表实例 81

第4章 延迟处理 83

4.1 内核线程 83

4.2 软中断机制 85

4.2.1 软中断原理 85

4.2.2 tasklet 87

4.3 工作队列 89

4.3.1 工作队列原理 89

4.3.2 工作队列实例 91

4.4 内核时间 92

4.4.1 Linux中的时间概念 92

4.4.2 Linux中的延迟 93

4.4.3 内核定时器 93

第5章 简单设备驱动程序 96

5.1 寄存器访问 96

5.1.1 S3C6410地址映射 96

5.1.2 S3C6410看门狗驱动程序实例 98

5.1.3 S3C6410蜂鸣器驱动程序实例 102

5.2 电平控制 107

5.2.1 S3C6410 LED驱动程序实例 107

5.2.2 扫描型S3C6410按键驱动

程序实例 109

5.3 时序产生 112

5.3.1 时序图原理 112

5.3.2 AT24C02芯片原理 112

5.3.3 AT24C02驱动程序开发实例 115

5.4 硬中断处理 123

5.4.1 硬中断处理原理 123

5.4.2 中断型S3C6410按键驱动

程序实例 127

5.5 Linux I/O端口控制 132

5.5.1 Linux I/O端口读写 132

5.5.2 在应用层访问Linux I/O

端口 133

5.5.3 /dev/port设备 134

第6章 深入Linux内核 135

6.1 嵌入式Linux系统构成 135

6.2 Linux内核导读 136

6.2.1 Linux内核组成 136

6.2.2 Linux的代码结构 137

6.2.3 内核Makefile 138

6.2.4 S3C6410硬件初始化 139

6.3 Linux文件系统 141

6.3.1 虚拟文件系统 141

6.3.2 根文件系统 143

6.3.3 文件系统加载 143

6.3.4 ext3文件系统 145

6.4 Flas件系统 145

6.4.1 MTD设备 145

6.4.2 MTD字符设备 148

6.4.3 MTD块设备 150

6.4.4 cramfs文件系统 153

6.4.5 JFFS2文件系统 153

6.4.6 YAFFS文件系统 155

6.4.7 文件系统总结 156

6.5 Linux内核移植 156

6.5.1 体系配置 156

6.5.2 添加yaffs2 157

6.5.3 Nand flash驱动程序移植 157

6.5.4 配置启动参数 159

6.5.5 移植RTC驱动程序 160

6.6 根文件系统制作 162

6.6.1 Busybox 162

6.6.2 shell基础 165

6.6.3 根文件系统构建实例 166

6.7 udev模型 167

6.7.1 udev模型原理 167

6.7.2 mdev的使用 167

第7章 I2C总线驱动程序 169

7.1 Linux的I2C驱动程序架构 169

7.1.1 I2C适配器 169

7.1.2 I2C算法 170

7.1.3 I2C驱动程序结构 170

7.1.4 I2C从设备 171

7.1.5 i2c-dev设备层 171

7.2 Linux I2C驱动程序开发 174

7.2.1 S3C2410X的I2C控制器 174

7.2.2 S3C2410X的I2C驱动程序

分析 175

7.3 S3C2410的I2C访问实例 182

7.4 I2C客户端驱动程序 185

第8章 TTY与串口驱动程序 190

8.1 TTY概念 190

8.2 Linux TTY驱动程序体系 190

8.2.1 TTY驱动程序调用关系 190

8.2.2 TTY驱动程序原理 191

8.3 线路规程 194

8.4 串口驱动程序与TTY 196

8.4.1 串口设备驱动程序原理 196

8.4.2 S3C6410的串口驱动程序

实例 199

8.5 TTY应用层 202

第9章 网络设备驱动程序 205

9.1 DM9000网卡驱动程序

开发 205

9.1.1 DM9000原理 205

9.1.2 DM9000X驱动程序分析 207

9.1.3 DM9000网口驱动程序移植 215

9.2 NFS根文件系统搭建 219

9.2.1 主机配置 219

9.2.2 NFS根文件系统搭建实例 220

9.3 netlink Socket 224

9.3.1 netlink机制 224

9.3.2 netlink应用层编程 228

9.3.3 netlink驱动程序实例 229

第10章 framebuffer驱动程序 232

10.1 Linux framebuffer驱动

程序原理 232

10.1.1 framebuffer核心数据结构 232

10.1.2 framebuffer操作接口 234

10.1.3 framebuffer驱动程序的文件

接口 236

10.1.4 framebuffer驱动程序框架 236

10.2 S3C6410 显示控制器 238

10.3 S3C6410 LCD驱动程序实例 243

10.4 framebuffer应用层 250

10.5 Qt4界面系统移植 251

第11章 输入子系统驱动程序 253

11.1 Linux输入子系统概述 253

11.1.1 input_dev结构 253

11.1.2 输入 255

11.2 input_handler 256

11.2.1 Input Handler层 256

11.2.2 常用的Input Handler 259

11.3 输入设备应用层 261

11.4 键盘输入设备驱动程序

实例 262

11.5 event接口 267

11.6 触摸屏驱动程序实例 270

11.6.1 S3C6410触摸屏控制器 270

11.6.2 S3C6410触摸屏驱动程序

设计 273

11.7 触摸屏校准 282

11.7.1 触摸屏校准原理 282

11.7.2 利用TSLIB库校准触摸屏 282

第12章 USB驱动程序 284

12.1 USB体系概述 284

12.1.1 USB系统组成 284

12.1.2 USB主机 284

12.1.3 USB设备逻辑层次 285

12.2 Linux USB驱动程序体系 287

12.2.1 USB总体结构 287

12.2.2 USB设备驱动程序 287

12.2.3 主机控制器驱动程序 288

12.2.4 USB请求块urb 289

12.2.5 USB请求块的填充 291

12.3 S3C6410 USB主机控制器

驱动程序 292

12.3.1 USB主机控制器驱动程序

分析 292

12.3.2 S3C6410 USB驱动程序

加载 294

12.4 USB键盘设备驱动程序

分析 296

12.5 USB Gadget驱动程序 301

12.5.1 Linux USB Gadget驱动程序 301

12.5.2 Linux USB Gadget驱动程序

实例 302

第13章 音频设备驱动程序 303

13.1 ALSA音频体系 303

13.2 ALSA驱动层API 304

13.2.1 声卡和设备管理 304

13.2.2 PCM API 304

13.2.3 控制与混音API 305

13.2.4 AC API 306

13.2.5 SOC层驱动 307

13.3 ALSA驱动程序实例 308

13.3.1 S3C6410的AC控制

单元 308

13.3.2 S3C6410声卡电路原理 309

13.3.3 S3C6410的数字音频接口 310

13.3.4 wm13的数字音频接口 313

13.4 ALSA音频编程接口 316

13.4.1 ALSA PCM接口实例 316

13.4.2 ALSA MIDI接口实例 320

13.4.3 ALSA mixer接口实例 321

13.4.4 ALSA timer接口实例 322

第14章 video4linux2

驱动程序 327

14.1 video4linux2驱动程序

架构 327

14.1.1 video4linux2驱动程序的

注册 327

14.1.2 v4l2_fops接口 331

14.1.3 常用的结构 332

14.1.4 video4linux2的ioctl函数 333

14.2 S3C6410摄像头驱动程序

分析 333

14.2.1 电路原理 333

14.2.2 驱动程序分析 334

14.3 video4linux2应用层实例 339

第15章 SD卡驱动程序 346

15.1 Linux SD卡驱动程序体系 346

15.1.1 SD卡电路原理 346

15.1.2 MMC卡驱动程序架构 347

15.1.3 MMC卡驱动程序相关

结构 347

15.1.4 MMC卡块设备驱动程序 350

15.1.5 SD卡主机控制器接口驱动

程序 356

15.2 S3C6410 SD卡控制器驱动

程序分析 360

15.2.1 电路原理 360

15.2.2 S3C6410 SDHCI驱动

程序原理 360

15.2.3 SD卡的加载实例 364

参考文献 366

第1章嵌入式Linux系统开发概述

1.1嵌入式系统概述

1.1.1你身边的嵌入式系统

1.1.2什么是嵌入式系统

1.1.3嵌入式系统的发展

1.1.4嵌入式系统市场规模

1.1.5嵌入式系统发展趋势和面临的挑战

1.2嵌入式操作系统

1.2.1嵌入式操作系统的特点

1.2.2嵌入式操作系统发展概述

1.2.3Linux操作系统特点

1.2.4嵌入式Linux系统的特点

1.2.5国外嵌入式Linux发展现状

1.2.6国内嵌入式Linux发展现状

1.3ARM处理器平台介绍

1.3.1嵌入式处理器特点与分类

1.3.2ARM处理器介绍

1.3.3ARM体系结构

1.4嵌入式Linux的体系结构分析

1.4.1嵌入式系统的体系结构

1.4.2硬件抽象层的Linux

1.5基本编辑器vi的使用

1.5.1进入和退出vi

1.5.2vi的基本编辑命令

1.5.3vi的高级编辑命令

1.6高级编辑器Emacs的使用

1.6.1Emacs的启动与退出

1.6.2Emacs的基本操作

1.6.3Emacs的高级命令

1.7编译器GCC的使用

1.7.1GCC简介

1.7.2GCC的编译过程

1.7.3GCC的常用模式

7.4GCC的常用选项

1.7.5GCC的警告功能

1.8调试器GDB的使用

1.8.1GDB的调试过程

1.8.2GDB的基本命令

1.8.3GDB的高级命令

1.9Make工程管理器

1.9.1Make管理器简介

1.9.2Makefile的描述规则

1.9.3一个简单示例

1.9.4Make如何工作

1.9.5指定变量

1.9.6自动推导规则

1.9.7另类风格的Makefile

1.9.8清除工作目录过程文件

1.10本章小结

第2章嵌入式Linux内核分析与移植

2.1Linux内核版本

2.1.1日新月异的Linux内核版本

2.1.2Linux2.4内核特性

2.1.3Linux2.6内核针对嵌入式系统的改进

2.2Linux操作系统内核结构分析

2.2.1Linux核心源程序的文件组织结构

2.2.2Linux的内核组成

2.2.3Linux内核进程管理工作机制

2.2.4Linux内存管理工作机制

2.2.5Linux虚拟文件系统工作机制

2.2.6进程间通信

2.3搭建嵌入式Linux系统开发环境

2.3.1嵌入式平台介绍

2.3.2嵌入式Linux系统的组成及设计步骤

2.3.3嵌入式Linux开发工具链

2.4Linux内核配置基础

2.4.1Linux内核所支持的配置方式

2.4.2makemenuconfig配置方法

2.4.3Linux2.4内核配置文件config .in介绍

2.4.4Linux2.6内核Kconfig文件的用法

2.4.5Kconfig文件配置实例

2.5Linux内核配置选项

2.5.1Generalsetup

2.5.2Loadablemodulesupport

2.5.3Processortypeandfeatures

2.5.4Networkingsupport

2.5.5DeviceDrivers

2.6Linux内核编译基础

2.6.1Linux内核编译基本步骤

2.6.2Rules.make文件用法

2.6.3Makefile配置文件的用法

2.6.4配置、编译Linux内核命令说明

2.6.5Linux内核配置编译实例

2.7Linux内核移植

2.7.1Bootloader简介

2.7.2引导程序原理

2.7.3内核移植及代码分析

2.7.4VIVI结构分析

2.7.5VIVI移植实现

2.8本章小结

第3章Linux设备驱动程序开发概述

3.1Linux系统设备概述

3.1.1字符设备

3.1.2块设备

3.1.3网络设备

3.1.4Linux设备驱动程序的共性

3.2设备驱动程序的概念

3.3设备驱动程序与内核的接口

3.4内核为驱动程序提供的支持

3.4.1内存分配函数

3.4.2DMA

3.4.3I/O端口

3.4.4打印函数

3.5主要数据结构

3.5.1structdevicestruct

3.5.2structfileoperations

3.5.3structinode

3.6模块化的概念

3.7内存管理问题

3.7.1Linux内核对内存的管理方法

3.7.2kmalloc()和kfree()

3.7.3面向页的分配技术

3.7.4vmalloc()和相关函数

3.8中断响应和处理

3.8.1中断处理机制

3.8.2中断处理的数据结构

3.8.3中断处理中的3个重要概念

3.8.4申请和释放中断

3.8.5自动检测中断号

3.8.6快/慢速中断处理

3.8.7实现中断处理程序

3.8.8驱动程序下半部的设计

3.8.9安装共享的处理程序

3.9I/O端口

3.10DMA处理

3.11时间流

3.11.1时钟的申请与释放

3.11.2实现延迟

3.11.3任务队列

3.12编写、编译和调试

3.13本章小结

第4章Linux字符设备驱动程序开发

4.1Linux字符设备驱动程序结构

4.2字符设备驱动的相似点

4.3主设备号和次设备号

4.4字符设备驱动程序的组成

4.5字符驱动程序模型

4.6可靠性机制

4.7文件操作

4.8字符设备驱动程序中用到的主要数据结构

4.9字符设备的注册和注销

4.10使用内存和读写I/O端口

4.11字符设备驱动程序中用到的主要函数

4.12chardevxxx设备的驱动程序设计

4.13Linux2.6内核下的字符设备驱动介绍

4.13.1cdev结构体

4.13.2分配和释放设备号

4.13.3file_operations结构体

4.13.4字符设备驱动模块加载与卸载函数

4.13.5字符设备驱动的file_operations结构体中成员

4.14globalmem设备驱动

4.14.1头文件、宏及设备结构体

4.14.2加载与卸载设备驱动

4.14.3读写函数

4.14.4seek函数

4.14.5globalmem的ioctl()函数

4.14.6ioctl()命令

4.14.7预定义命令

4.14.8使用文件私有数据

4.14.9globalmem驱动在用户空间的验证

4.15本章小结

第5章基于DSP的PCI图像集卡驱动程序

5.1PCI总线介绍

5.1.1PCI总线概述

5.1.2PCI局部总线概述

5.1.3PCI局部总线的特点

5.1.4PCI总线信号

5.1.5PCI总线命令

5.1.6PCI总线配置空间

5.1.7PCI总线配置过程

5.1.8PCI总线的传输控制

5.2DSP图像卡的PCI接口设计

5.2.1系统结构介绍

5.2.2PCI2040的基本特点

5.2.3PCI2040芯片的功能单元

5.2.4PCI2040配置流程

5.2.5PCI总线与DSP的接口实现

5.2.6串行E2PROM的初始化

5.3DSP图像卡驱动程序实例分析

5.3.1主要的数据结构

5.3.2驱动程序流程

5.3.3初始化设备模块

5.3.4打开设备模块

5.3.5数据读写和控制信息模块

5.3.6中断处理模块

5.3.7释放设备模块

5.3.8卸载设备模块

5.4本章小结

第6章音频接口设计与Linux驱动程序

6.1嵌入式音频系统简介

6.1.1S3C2410微处理器简介

6.1.2S3C2410微处理器的结构框图及其特性

6.1.3系统设计概述

6.1.4系统时钟电路

6.1.5S3C2410存储控制器介绍

6.1.6SDRAM电路

6.1.7Flash缓冲电路设计

6.1.8NORFlash电路

6.1.9NANDFlash接口电路

6.1.10IIS数字音频电路

6.1.11串口电路

6.1.12JT接口电路

6.1.13LCD和触摸屏接口电路

6.2UDA1341TS芯片设备驱动程序设计

6.2.1UDA1341TS芯片介绍

6.2.2驱动程序中file_operations数据结构

6.2.3驱动程序的加载和卸载

6.3SOUND驱动的实现

6.3.1SOUND设备的打开和释放

6.3.2定义SOUND设备的读写函数

6.3.3SOUND设备的控制操作处理

6.3.4SOUND设备驱动程序的其他部分

6.3.5Mixer驱动的实现

6.4本章小结

第7章显示设备接口设计与Linux驱动程序

7.1嵌入式显示系统简介

7.2显示驱动的基础与原理

7.2.1时序信号

7.2.2TFTLCD的驱动技术

7.2.3TFTLCD驱动电路

7.2.4像素值的属性

7.2.5像素深度、像素值与颜色的映射关系

7.2.6像素值与显示内存的映射关系

7.2.7调色板的原理

7.2.8调色板的作用

7.2.9彩色LCD显示驱动的原理

7.3软、硬件平台简介

7.3.1硬件开发平台

7.3.2软件平台

7.3.3软件开发环境

7.4基于PXA255的显示功能的硬件实现

7.4.1PXA255处理器介绍

7.4.2PXA255的LCD控制器的特点

7.4.3LCD控制器的使用

7.4.4LCD控制寄存器配置

7.4.5设定DMA通道

7.4.6Sony彩屏的特性

7.4.7LCD与处理器的硬件连接方案

7.5显示驱动开发介绍

7.5.1显示驱动与字符设备的关系

7.5.2显示驱动的发展

7.5.3当前显示驱动的不足

7.6基于PXA255的显示驱动的实现

7.6.1显示驱动的系统分析

7.6.2驱动上层文件的功能

7.6.3驱动底层文件的功能

7.6.4驱动程序底层文件实现的基础

7.7基于PXA255的显示功能的软件方案

7.7.1上层文件的实现

7.7.2底层文件的实现方案

7.7.3驱动底层文件的实现

7.7.4针对XScale架构中其余处理器的移植

7.8本章小结

第8章ARMLinux块设备驱动程序开发

8.1块设备驱动程序开发概述

8.1.1块设备特点

8.1.2块设备基于缓冲区的数据交换

8.1.3块设备读写请求

8.1.4块设备驱动程序模型

8.1.5基于内存的块设备驱动程序

8.2Linux块设备驱动结构

8.2.1block_device_operations结构体

8.2.2gendisk结构体

8.2.3request与bio结构体

8.3块设备驱动主要函数

8.3.1块设备驱动程序的注册与注销

8.3.2Linux块设备驱动模块加载与卸载

8.3.3块设备的打开与释放

8.3.4块设备驱动的ioctl函数

8.3.5块设备驱动I/O请求处理

8.4RAMDISK驱动开发实例

8.4.1RAMDISK的硬件原理

8.4.2RAMDISK驱动模块加载与卸载

8.4.3RAMDISK设备驱动block_device_operations及成员函数

8.5IDE硬盘设备驱动开发实例

8.5.1IDE硬盘设备原理

8.5.2IDE硬盘设备驱动block_device_operations及成员函数

8.5.3IDE硬盘设备驱动I/O请求处理

8.5.4在内核中增加对新系统IDE设备的支持

8.6本章小结

第9章嵌入式Linux网络设备驱动程序开发

9.1嵌入式以太网基础知识

9.1.1以太网技术及其嵌入式应用

9.1.2嵌入式系统中主要处理的网络协议

9.1.3ARP(AddressResolutionProtocol)地址解析协议

9.1.4IP(InternetProtocol)网际协议

9.1.5TCP(TransferControlProtocol)传输控制协议

9.1.6UDP(UserDatagramProtocol)用户数据包协议

9.2基于CS8900A芯片的设备驱动设计

9.2.1CS8900A芯片结构

9.2.2CS8900A芯片特性

9.2.3CS8900A芯片工作原理

9.2.4CS8900A芯片工作模式

9.2.5网络设备驱动程序基本结构

9.3基于Linux的网络设备驱动开发常用的数据结构

9.3.1数据结构structnet_device

9.3.2数据结构structsk_buff393

9.4网络驱动程序的实现模式及系统调用方法

9.4.1网络驱动程序的实现模式与模块化

9.4.2内存获取与释放

9.4.3链路状态改变系统调用

9.4.4与网络层交互数据包的函数

9.5网络驱动程序的基本方法

9.5.1网络驱动程序的结构

9.5.2初始化(Initialize)

9.5.3打开(open)

9.5.4关闭(close)

9.5.5发送(hard_start_xmit)

9.5.6接收(reception)

9.5.7中断处理(interrupt)

9.5.8硬件帧头(hard_header)

9.5.9地址解析(XARP)

9.5.10参数设置和统计数据

9.5.11多播(set_multicast_list)

9.6本章小结

第10章嵌入式LinuxUSB驱动程序设计基础

10.1USB总线协议背景知识

10.1.1USB协议的产生

10.1.2USB的特点

10.1.3USB的广泛应用

10.1.4USB在嵌入式设备中的应用

10.1.5计算机常用外部总线比较

10.2USB总线技术介绍

10.2.1USB系统拓扑结构

10.2.2USB总线逻辑结构

10.2.3USB总线特性介绍

10.2.4USB总线电气机械特性

10.2.5USB的即插即用特性

10.2.6鲁棒性的实现

10.2.7USB电源管理

10.2.8总线通道

10.2.9传输协议

10.2.10传输类型

10.2.11设备框架

10.2.12USB主机协议

10.3LinuxUSB子系统结构

10.3.1文件系统

10.3.2Linux中USB子系统的软件结构及实现

10.3.3LinuxUSB内核的主要数据结构

10.3.4USB内核函数接口分析

10.4本章小结

第11章USB接口系统软件设计

11.1USB系统软件设计概述

11.1.1主机端设备驱动程序

11.1.2主机控制器驱动程序

11.1.3设备端驱动程序

11.1.4数据管道和数据块结构

11.2USB设备端软件的开发

11.2.1USB设备通用模块的软件开发

11.2.2USB设备协议模块的软件开发

11.2.3控制端点处理程序

11.2.4协议层程序

11.3USB主机端软件开发

11.3.1Linux内核对USB规范的支持

11.3.2USB时序

11.3.3主机控制器驱动程序设计

11.3.4主机控制器的初始化和管理

11.3.5传输执行和调度

11.3.6主机控制器的中断处理

11.3.7虚拟根集线器

11.3.8主机控制器驱动程序的任务

11.3.9URB在驱动软件中运作

11.3.10主机端设备驱动程序

11.4本章小结

第12章OTG驱动功能模块的设计与实现

12.1OTG概述

12.1.1OTG特性简介

12.1.2A设备

12.1.3B设备

12.1.4状态机

12.1.5SRP

12.1.6HNP

12.2设备模块的设计与实现

12.2.1USB设备的状态

12.2.2OTG驱动功能模块的设计

12.2.3ISP1761结构

12.2.4HAL的设计和实现

12.2.5HCD的设计和实现

12.2.6USBD接口模块

12.2.7ISP1761读写操作模块

12.2.8HCD初始化模块

12.2.9中断管理模块

12.2.10根集线器模块

12.2.11数据传输模块

12.2.12设备模块的设计和实现

12.2.13OTGFSM的设计和实现

12.3本章小结