主页 详情

《Linux驱动开发入门与实战 第2版》_郑强等编著_13476553_9787302337768

【书名】:《Linux驱动开发入门与实战 第2版》
【作者】:郑强等编著
【出版社】:北京:清华大学出版社
【时间】:2014
【页数】:435
【ISBN】:9787302337768
【SS码】:13476553

最新查询

内容简介

第1篇 Linux驱动开发基础

第1章 Linux驱动开发概述

1.1 Linux设备驱动的基本概念

1.1.1 设备驱动程序概述

1.1.2 设备驱动程序的作用

1.1.3 设备驱动的分类

1.2 Linux操作系统与驱动的关系

1.3 Linux驱动程序开发

1.3.1 用户态和内核态

1.3.2 模块机制

1.3.3 编写设备驱动程序需要了解的知识

1.4 编写设备驱动程序的注意事项

1.4.1 应用程序开发与驱动程序开发的差异

1.4.2 GUN C开发驱动程序

1.4.3 不能使用C库开发驱动程序

1.4.4 没有内存保护机制

1.4.5 小内核栈

1.4.6 重视可移植性

1.5 Linux驱动的发展趋势

1.5.1 Linux驱动的发展

1.5.2 驱动的应用

1.5.3 相关学习资源

1.6 小结

第2章 嵌入式处理器和开发板简介

2.1 处理器的选择

2.1.1 处理器简述

2.1.2 处理器的种类

2.2 ARM处理器

2.2.1 ARM处理器简介

2.2.2 ARM处理器系列

2.2.3 ARM处理器的应用

2.2.4 ARM处理器的选型

2.2.5 ARM处理器选型举例

2.3 S3C2440开发板

2.3.1 S3C2440开发板简介

2.3.2 S3C2440开发板的特性

2.3.3 其他开发板

2.4 小结

第3章 构建嵌入式驱动程序开发环境

3.1 虚拟机和Linux安装

3.1.1 在Windows上安装虚拟机

3.1.2 在虚拟机上安装Linux

3.1.3 设置共享目录

3.2 代码阅读工具Source Insight

3.2.1 Source Insight简介

3.2.2 阅读源代码

3.3 小结

第4章 构建嵌入式Linux操作系统

4.1 Linux操作系统的介绍

4.1.1 Linux操作系统

4.1.2 Linux操作系统的优点

4.2 Linux内核子系统

4.2.1 进程管理

4.2.2 内存管理

4.2.3 文件系统

4.2.4 设备管理

4.2.5 网络功能

4.3 Linux源代码结构分析

4.3.1 arch目录

4.3.2 drivers目录

4.3.3 fs目录

4.3.4 其他目录

4.4 内核配置选项

4.4.1 配置编译过程

4.4.2 常规配置

4.4.3 模块配置

4.4.4 块设备层配置

4.4.5 CPU类型和特性配置

4.4.6 电源管理配置

4.4.7 总线配置

4.4.8 网络配置

4.4.9 设备驱动配置

4.4.10 文件系统配置

4.5 嵌入式文件系统基础知识

4.5.1 嵌入式文件系统

4.5.2 嵌入式系统的存储介质

4.5.3 JFFS文件系统

4.5.4 YAFFS文件系统

4.6 构建根文件系统

4.6.1 根文件系统概述

4.6.2 Linux根文件系统目录结构

4.6.3 BusyBox构建根文件系统

4.7 小结

第5章 构建第一个驱动程序

5.1 开发环境配置之内核升级

5.1.1 为什么升级内核

5.1.2 内核升级

5.1.3 make menconfig的注意事项

5.2 Hello World驱动程序

5.2.1 驱动模块的组成

5.2.2 Hello World模块

5.2.3 编译Hello World模块

5.2.4 模块的操作

5.2.5 Hello World模块加载后文件系统的变化

5.3 模块参数和模块之间通信

5.3.1 模块参数

5.3.2 模块的文件格式ELF

5.3.3 模块之间的通信

5.3.4 模块之间的通信实例

5.4 将模块加入内核

5.4.1 向内核添加模块

5.4.2 Kconfig

5.4.3 Kconfig的语法

5.4.4 应用实例:在内核中新增加add_sub模块

5.4.5 对add_sub模块进行配置

5.5 小结

第6章 简单的字符设备驱动程序

6.1 字符设备驱动程序框架

6.1.1 字符设备和块设备

6.1.2 主设备号和次设备号

6.1.3 申请和释放设备号

6.2 初识cdev结构

6.2.1 cdev结构体

6.2.2 file_operations结构体

6.2.3 cdev和file_operations结构体的关系

6.2.4 inode结构体

6.3 字符设备驱动的组成

6.3.1 字符设备加载和卸载函数

6.3.2 file_operations结构体和其成员函数

6.3.3 驱动程序与应用程序的数据交换

6.3.4 字符设备驱动程序组成小结

6.4 VirtualDisk字符设备驱动

6.4.1 VirtualDisk的头文件、宏和设备结构体

6.4.2 加载和卸载驱动程序

6.4.3 cdev的初始化和注册

6.4.4 打开和释放函数

6.4.5 读写函数

6.4.6 seek()函数

6.4.7 ioctl()函数

6.5 小结

第2篇 Linux驱动开发核心技术

第7章 设备驱动中的并发控制

7.1 并发与竞争

7.2 原子变量操作

7.2.1 原子变量操作

7.2.2 原子整型操作

7.2.3 原子位操作

7.3 自旋锁

7.3.1 自旋锁概述

7.3.2 自旋锁的使用

7.3.3 自旋锁的使用注意事项

7.4 信号量

7.4.1 信号量概述

7.4.2 信号量的实现

7.4.3 信号量的使用

7.4.4 自旋锁与信号量的对比

7.5 完成量

7.5.1 完成量概述

7.5.2 完成量的实现

7.5.3 完成量的使用

7.6 小结

第8章 设备驱动中的阻塞和同步机制

8.1 阻塞和非阻塞

8.2 等待队列

8.2.1 等待队列概述

8.2.2 等待队列的实现

8.2.3 等待队列的使用

8.3 同步机制实验

8.3.1 同步机制设计

8.3.2 实验验证

8.4 小结

第9章 中断与时钟机制

9.1 中断简述

9.1.1 中断的概念

9.1.2 中断的宏观分类

9.1.3 中断产生的位置分类

9.1.4 同步和异步中断

9.1.5 中断小结

9.2 中断的实现过程

9.2.1 中断信号线(IRQ)

9.2.2 中断控制器

9.2.3 中断处理过程

9.2.4 中断的安装与释放

9.3 按键中断实例

9.3.1 按键设备原理图

9.3.2 有寄存器设备和无寄存器设备

9.3.3 按键设备相关端口寄存器

9.4 按键中断实例程序分析

9.4.1 按键驱动程序组成

9.4.2 初始化函数s3c2440_buttons_init()

9.4.3 中断处理函数isr_button()

9.4.4 退出函数s3c2440_buttons_exit()

9.5 时钟机制

9.5.1 时间度量

9.5.2 时间延时

9.6 小结

第10章 内外存访问

10.1 内存分配

10.1.1 kmalloc()函数

10.1.2 vmalloc()函数

10.1.3 后备高速缓存

10.2 页面分配

10.2.1 内存分配

10.2.2 物理地址和虚拟地址之间的转换

10.3 设备I/O端口的访问

10.3.1 Linux I/O端口读写函数

10.3.2 I/O内存读写

10.3.3 使用I/O端口

10.4 小结

第3篇 LinuX驱动开发实用实战

第11章 设备驱动模型

11.1 设备驱动模型概述

11.1.1 设备驱动模型的功能

11.1.2 sysfs文件系统

11.1.3 sysfs文件系统的目录结构

11.2 设备驱动模型的核心数据结构

11.2.1 kobject结构体

11.2.2 设备属性kobj_type

11.3 注册kobject到sysfs中的实例

11.3.1 设备驱动模型结构

11.3.2 kset集合

11.3.3 kset与kobject的关系

11.3.4 kset相关的操作函数

11.3.5 注册kobject到sysfs中的实例

11.3.6 实例测试

11.4 设备驱动模型的三大组件

11.4.1 总线

11.4.2 总线属性和总线方法

11.4.3 设备

11.4.4 驱动

11.5 小结

第12章 RTC实时时钟驱动

12.1 RTC实时时钟硬件原理

12.1.1 RTC实时时钟

12.1.2 RTC实时时钟的功能

12.1.2 RTC实时时钟的工作原理

12.2 RTC实时时钟架构

12.2.1 加载卸载函数

12.2.2 RTC实时时钟的平台驱动

12.2.3 RTC驱动探测函数

12.2.4 RTC实时时钟的使能函数s3c_rtc_enable()

12.2.5 RTC实时时钟设置频率函数s3c_rtc_setfreq()

12.2.6 RTC设备注册函数rtc-device_register()

12.3 RTC文件系统接口

12.3.1 文件系统接口rtc_class_ops

12.3.2 RTC实时时钟打开函数s3c_rtc_open()

12.3.3 RTC实时时钟关闭函数s3c_rtc_release()

12.3.4 RTC实时时钟获得时间函数s3c_rtc_gettime()

12.3.5 RTC实时时钟设置时间函数s3c_rtc_settime()

12.3.6 RTC驱动探测函数s3c_rtc_getalarm()

12.3.7 RTC实时时钟设置报警时间函数s3c_rtc_setalarm()

12.3.8 RTC设置脉冲中断使能函数s3c_rtc_setpie()

12.3.9 RTC时钟脉冲中断判断函数s3c_rtc_proc()

12.4 小结

第13章 看门狗驱动程序

13.1 看门狗硬件原理

13.1.1 看门狗

13.1.2 看门狗工作原理

13.2 平台设备模型

13.2.1 平台设备模型

13.2.2 平台设备

13.2.3 平台设备驱动

13.2.4 平台设备驱动的注册和注销

13.2.5 混杂设备

13.2.6 混杂设备的注册和注销

13.3 看门狗设备驱动程序分析

13.3.1 看门狗驱动程序的一些变量定义

13.3.2 看门狗模块的加载和卸载函数

13.3.3 看门狗驱动程序探测函数

13.3.4 设置看门狗复位时间函数s3c2410wdt_set_heartbeat()

13.3.5 看门狗的开始函数s3c2410wdt_start()和停止函数s3c24_10wdt_stop()

13.3.6 看门狗驱动程序移除函数s3c2410wdt_remove()

13.3.7 平台设备驱动s3c2410wdt_driver中的其他重要函数

13.3.8 混杂设备的file.operations中的函数

13.3.9 看门狗中断处理函数s3c2410wdt_irq()

13.4 小结

第14章 IIC设备驱动程序

14.1 IIC设备的总线及其协议

14.1.1 IIC总线的特点

14.1.2 IIC总线的信号类型

14.1.3 IIC总线的数据传输

14.2 IIC设备的硬件原理

14.3 IIC设备驱动程序的层次结构

14.3.1 IIC设备驱动的概述

14.3.2 IIC设备层

14.3.3 i2c_driver和i2c_client的关系

14.3.4 IIC总线层

14.3.5 IIC设备层和总线层的关系

14.3.6 写IIC设备驱动的步骤

14.4 IIC子系统的初始化

14.4.1 IIC子系统初始化函数i2c_init()

14.4.2 IIC子系统退出函数i2c_exit()

14.5 适配器驱动程序

14.5.1 s3c2440对应的适配器结构体

14.5.2 IIC适配器加载函数i2c_add_adapter()

14.5.3 IDR机制

14.5.4 适配器卸载函数i2c_del_adapter()

14.5.5 IIC总线通信方法s3c24xx_i2c_algorithm结构体

14.5.6 适配器的传输函数s3c24xx_i2c_doxfer()

14.5.7 适配器的中断处理函数s3c24xx_i2c_irq()

14.5.8 字节传输函数i2s_s3c_irq_nextbyte()

14.5.9 适配器传输停止函数s3c24xx_i2c_stop()

14.5.10 中断处理函数的一些辅助函数

14.6 IIC设备层驱动程序

14.6.1 IIC设备驱动模块加载和卸载

14.6.2 探测函数s3c24xx_i2c_probe()

14.6.3 移除函数s3c24xx_i2c_remove()

14.6.4 控制器初始化函数s3c24xx_i2c_init()

14.6.5 设置控制器数据发送频率函数s3c24xx_i2c_clockrate()

14.7 小结

第15章 LCD设备驱动程序

15.1 FrameBuffer概述

15.1.1 FrameBuffer的概念

15.1.2 FrameBuffer与应用程序的交互

15.1.3 FrameBuffer显示原理

15.1.4 LCD显示原理

15.2 FrameBuffer的结构分析

15.2.1 FrameBuffer架构和其关系

15.2.2 FrameBuffer驱动程序的实现

15.2.3 FrameBuffer架构及其关系

15.3 LCD驱动程序分析

15.3.1 LCD模块的加载和卸载函数

15.3.2 LCD驱动程序的平台数据

15.3.3 LCD模块的探测函数

15.3.4 移除函数

15.4 小结

第16章 触摸屏设备驱动程序

16.1 触摸屏设备工作原理

16.1.1 触摸屏设备概述

16.1.2 触摸屏设备的类型

16.1.3 电阻式触摸屏

16.2 触摸屏设备硬件结构

16.2.1 s3c2440触摸屏接口概述

16.2.2 s3c2440触摸屏接口的工作模式

16.2.3 s3c2440触摸屏设备寄存器

16.3 触摸屏设备驱动程序分析

16.3.1 触摸屏设备驱动程序组成

16.3.2 s3c2440触摸屏驱动模块的加载和卸载函数

16.3.3 s3c2440触摸屏驱动模块的探测函数

16.3.4 触摸屏设备配置

16.3.5 触摸屏设备中断处理函数

16.3.6 s3c2440触摸屏驱动模块的remove()函数

16.4 测试触摸屏驱动程序

16.5 小结

第17章 输入子系统设计

17.1 input子系统入门

17.1.1 简单的实例

17.1.2 注册函数input_register_device()

17.1.3 向子系统报告事件

17.2 handler注册分析

17.2.1 输入子系统的组成

17.2.2 input_handler结构体

17.2.3 注册input_handler

17.2.4 input_handle结构体

17.2.5 注册input_handle

17.3 input子系统

17.3.1 子系统初始化函数input_init()

17.3.2 文件打开函数input_open_file()

17.4 evdev输入事件驱动分析

17.4.1 evdev的初始化

17.4.2 evdev设备的打开

17.5 小结

第18章 块设备驱动程序

18.1 块设备简介

18.1.1 块设备总体概述

18.1.2 块设备的结构

18.2 块设备驱动程序的架构

18.2.1 块设备加载过程

18.2.2 块设备卸载过程

18.3 通用块层

18.3.1 通用块层

18.3.2 alloc_disk()函数对应的gendisk结构体

18.3.3 块设备的注册和注销

18.3.4 请求队列

18.3.5 设置gendisk属性中的block_device_operations结构体

18.4 不使用请求队列的块设备驱动

18.4.1 不使用请求队列的块设备驱动程序的组成

18.4.2 宏定义和全局变量

18.4.3 加载函数

18.4.4 卸载函数

18.4.5 自定义请求处理函数

18.4.6 驱动的测试

18.5 I/O调度器

18.5.1 数据从内存到磁盘的过程

18.5.2 块I/O请求(bio)

18.5.3 请求结构(request)

18.5.4 请求队列(request_queue)

18.5.5 请求队列、请求结构、bio等之间的关系

18.5.6 四种调度算法

18.6 自定义I/O调度器

18.6.1 Virtual_blkdev块设备的缺陷

18.6.2 指定noop调度器

18.6.3 Virtual_blkdev的改进实例

18.6.4 编译和测试

18.7 脱离I/O调度器

18.7.1 请求队列中的bio处理函数

18.7.2 通用块层函数调用关系

18.7.3 对Virtual_blkdev块设备的改进

18.7.4 编译和测试

18.8 块设备的物理结构

18.8.1 为Virtual_blkdev块设备添加分区

18.8.2 对新的Virtual_blkdev代码的分析

18.8.3 编译和测试

18.8.4 分区数的计算

18.8.5 设置Virtual_blkdev的结构

18.8.6 编译和测试

18.9 小结

第19章 USB设备驱动程序

19.1 USB概述

19.1.1 USB概念

19.1.2 USB的特点

19.1.3 USB总线拓扑结构

19.1.4 USB驱动总体架构

19.2 USB设备驱动模型

19.2.1 USB驱动初探

19.2.2 USB设备驱动模型

19.2.3 USB驱动结构usb_driver

19.3 USB设备驱动程序

19.3.1 USB设备驱动加载和卸载函数

19.3.2 探测函数probe()的参数usb_interface

19.3.3 USB协议中的设备

19.3.4 端点的传输方式

19.3.5 设置

19.3.6 探测函数storage_probe()

19.4 获得USB设备信息

19.4.1 设备关联函数associate_dev()

19.4.2 获得设备信息函数get_device_info()

19.4.3 得到传输协议get_transport()函数

19.4.4 获得协议信息函数get_protocol()

19.4.5 获得管道信息函数get_pipes()

19.5 资源的初始化

19.5.1 storage_probe()函数调用过程

19.5.2 资源获取函数usb_stor_acquire_resources()

19.5.3 USB请求块(urb)

19.6 控制子线程

19.6.1 控制线程

19.6.2 扫描线程usb_stor_scan_thread()

19.6.3 获得LUN函数usb_stor_Bulk_max_lun()

19.7 小结


书查询(www.shuchaxun.com)本网页唯一编码:
2f6d1360c80b9b3cb1990d522b7317bb#5c70094ed53a6dde19476baab34942fe#146581629#Linux驱动开发入门与实践_13476553.pdf