嵌入式Linux设备驱动程序开发指南(原书第2版)【全本

您所在的位置:网站首页 嵌入式linux设备驱动开发 嵌入式Linux设备驱动程序开发指南(原书第2版)【全本

嵌入式Linux设备驱动程序开发指南(原书第2版)【全本

#嵌入式Linux设备驱动程序开发指南(原书第2版)【全本| 来源: 网络整理| 查看: 265

译者序

前言

作者简介

第1章 构建系统

1.1 引导加载程序

1.2 Linux内核

1.3 系统调用接口和C运行时库

1.4 系统共享库

1.5 根文件系统

1.6 Linux启动过程

1.7 构建嵌入式Linux系统

1.8 设置以太网通信

1.9 为NXP i.MX7D处理器构建嵌入式Linux系统

1.9.1 简介

1.9.2 主机软件包

1.9.3 设置repo工具

1.9.4 Yocto工程的安装和映像构建

1.9.5 Yocto之外的工作

1.9.6 构建Linux内核

1.9.7 安装TFTP服务器

1.9.8 安装NFS服务器

1.9.9 设置U-Boot环境变量

1.10 为Microchip SAMA5D2处理器构建嵌入式Linux系统

1.10.1 简介

1.10.2 主机软件包

1.10.3 Yocto工程的安装和映像构建

1.10.4 Yocto之外的工作

1.10.5 构建Linux内核

1.10.6 安装TFTP服务器

1.10.7 安装NFS服务器

1.10.8 设置U-Boot环境变量

1.11 为Broadcom BCM2837处理器构建Linux嵌入式系统

1.11.1 Raspbian

1.11.2 构建Linux内核

1.11.3 将文件复制到Raspberry Pi

1.12 使用Eclipse

1.12.1 用于内核源码的Eclipse配置

1.12.2 用于开发Linux驱动程序的Eclipse配置

第2章 Linux设备与驱动模型

2.1 总线核心驱动

2.2 总线控制器驱动

2.3 设备驱动

2.4 设备树简介

第3章 最简驱动程序

3.1 许可证

3.2 实验3-1:“helloworld”模块

3.3 代码清单3-1:helloworld_imx.c

3.4 代码清单3-2:Makefile

3.5 helloworld_imx.ko演示

3.6 实验3-2:“带参数的helloworld”模块

3.7 代码清单3-3:helloworld_imx_with_parameters.c

3.8 helloworld_imx_with_parameters.ko演示

3.9 实验3-3:“helloworld计时”模块

3.10 代码清单3-4:helloworld_imx_with_timing.c

3.11 helloworld_imx_with_timing.ko演示

第4章 字符设备驱动

4.1 实验4-1:“helloworld字符设备”模块

4.2 代码清单4-1:helloworld_imx_char_driver.c

4.3 代码清单4-2:Makefile

4.4 代码清单4-3:ioctl_test.c

4.5 helloworld_imx_char_driver.ko演示

4.6 将模块添加到内核构建

4.7 使用设备文件系统创建设备文件

4.8 实验4-2:“class字符设备”模块

4.9 代码清单4-4:helloworld_imx_class_driver.c

4.10 helloworld_imx_class_driver.ko演示

4.11 杂项字符设备驱动

4.12 实验4-3:“杂项字符设备”模块

4.13 代码清单4-5:misc_imx_driver.c

4.14 misc_imx_driver.ko演示

第5章 平台设备驱动

5.1 实验5-1:“平台设备”模块

5.2 代码清单5-1:hellokeys_imx.c

5.3 hellokeys_imx.ko演示

5.4 操作硬件的文档

5.5 硬件命名约定

5.6 引脚控制器

5.7 引脚控制子系统

5.8 设备树引脚控制器绑定

5.9 GPIO控制器驱动

5.10 GPIO描述符使用者接口

5.10.1 获取和释放GPIO

5.10.2 使用GPIO

5.10.3 GPIO映射到中断

5.10.4 GPIO设备树

5.11 在内核和用户态之间交换数据

5.12 MMIO(内存映射I/O)设备访问

5.13 实验5-2:“RGB LED平台设备”模块

5.13.1 i.MX7D处理器的硬件描述

5.13.2 SAMA5D2处理器的硬件描述

5.13.3 BCM2837处理器的硬件描述

5.13.4 i.MX7D处理器的设备树

5.13.5 SAMA5D2处理器的设备树

5.13.6 BCM2837处理器的设备树

5.13.7 “RGB LED平台设备”模块的代码描述

5.14 代码清单5-2:ledRGB_sam_platform.c

5.15 ledRGB_sam_platform.ko演示

5.16 平台驱动资源

5.17 Linux LED类

5.18 实验5-3:“RGB LED类”模块

5.18.1 i.MX7D、SAMA5D2和BCM2837处理器的设备树

5.18.2 “RGB LED类”模块的代码描述

5.19 代码清单5.3:ledRGB_sam_class_platform.c

5.20 ledRGB_sam_class_platform.ko演示

5.21 用户态中的平台设备驱动

5.22 用户定义的I/O:UIO

5.22.1 UIO如何运转

5.22.2 内核中的UIO API

5.23 实验5-4:“LED UIO平台”模块

5.23.1 i.MX7D、SAMA5D2和BCM2837处理器的设备树

5.23.2 “LED UIO平台”模块的代码描述

5.24 代码清单5-4:led_sam_UIO_platform.c

5.25 代码清单5-5:UIO_app.c

5.26 led_sam_UIO_platform.ko及UIO_app演示

第6章 I2C从端驱动

6.1 Linux I2C子系统

6.2 编写I2C从端驱动

6.2.1 注册I2C从端驱动

6.2.2 在设备树中声明I2C设备

6.3 实验6-1:“I2C I/O扩展设备”模块

6.3.1 i.MX7D处理器的硬件描述

6.3.2 SAMA5D2处理器的硬件描述

6.3.3 BCM2837处理器的硬件描述

6.3.4 i.MX7D处理器的设备树

6.3.5 SAMA5D2处理器的设备树

6.3.6 BCM2837处理器的设备树

6.3.7 “I2C I/O扩展设备”模块的代码描述

6.4 代码清单6-1:io_imx_expander.c

6.5 io_imx_expander.ko演示

6.6 sysfs文件系统

6.7 实验6-2:“I2C多显LED”模块

6.7.1 i.MX7D处理器的硬件描述

6.7.2 SAMA5D2处理器的硬件描述

6.7.3 BCM2837处理器的硬件描述

6.7.4 i.MX7D处理器的设备树

6.7.5 SAMA5D2处理器的设备树

6.7.6 BCM2837处理器的设备树

6.7.7 ACPI和设备树的统一设备属性接口

6.7.8 “I2C多显LED”模块的代码描述

6.8 代码清单6-2:ltc3206_imx_led_class.c

6.9 ltc3206_imx_led_class.ko演示

第7章 处理设备驱动中的中断

7.1 GPIO控制器在Linux内核的中断域

7.2 设备树中断处理

7.3 在Linux设备驱动中申请中断

7.4 实验7-1:“按钮中断设备”模块

7.4.1 i.MX7D处理器的硬件描述

7.4.2 SAMA5D2处理器的硬件描述

7.4.3 BCM2837处理器的硬件描述

7.4.4 i.MX7D处理器的设备树

7.4.5 SAMA5D2处理器的设备树

7.4.6 BCM2837处理器的设备树

7.4.7 “按钮中断设备”模块的代码描述

7.5 代码清单7-1:int_imx_key.c

7.6 int_imx_key.ko演示

7.7 延迟工作

7.7.1 软中断

7.7.2 tasklet

7.7.3 定时器

7.7.4 线程化的中断

7.7.5 工作队列

7.8 内核中的锁

7.8.1 锁和单处理器内核

7.8.2 在中断和进程上下文之间共享自旋锁

7.8.3 在用户上下文使用锁

7.9 内核中的睡眠

7.10 实验7-2:“睡眠设备”模块

7.10.1 i.MX7D处理器的设备树

7.10.2 SAMA5D2处理器的设备树

7.10.3 BCM2837处理器的设备树

7.10.4 “睡眠设备”模块的代码描述

7.11 代码清单7-2:int_imx_key_wait.c

7.12 int_imx_key_wait.ko演示

7.13 内核线程

7.14 实验7-3:“keyled类”模块

7.14.1 i.MX7D处理器的硬件描述

7.14.2 SAMA5D2处理器的硬件描述

7.14.3 BCM2837处理器的硬件描述

7.14.4 i.MX7D处理器的设备树

7.14.5 SAMA5D2处理器的设备树

7.14.6 BCM2837处理器的设备树

7.14.7 “keyled类”模块的代码描述

7.15 代码清单7-3:keyled_imx_class.c

7.16 keyled_imx_class.ko演示

第8章 在Linux驱动中分配内存

8.1 查询ARM的MMU转换表

8.2 Linux地址的类型

8.3 用户进程的虚拟地址到物理地址的映射

8.4 内核的虚拟地址到物理地址的映射

8.5 内核内存分配器

8.5.1 页面分配器

8.5.2 页面分配器接口

8.5.3 SLAB分配器

8.5.4 SLAB分配器接口

8.5.5 kmalloc内存分配器

8.6 实验8-1:“链表内存分配”模块

8.7 代码清单8-1:linkedlist_imx_platform.c

8.8 linkedlist_imx_platform.ko演示

第9章 在Linux设备驱动中使用DMA

9.1 缓存一致性

9.2 Linux DMA引擎API

9.3 实验9-1:“流式DMA”模块

9.4 代码清单9-1:sdma_imx_m2m.c

9.5 sdma_imx_m2m.ko演示

9.6 DMA分散/聚集映射

9.7 实验9-2:“分散/聚集DMA设备”模块

9.8 代码清单9-2:sdma_imx_sg_m2m.c

9.9 sdma_imx_sg_m2m.ko演示

9.10 用户态DMA

9.11 实验9-3:“用户态DMA”模块

9.12 代码清单9-3:sdma_imx_mmap.c

9.13 代码清单9-4:sdma.c

9.14 sdma_imx_mmap.ko演示

第10章 输入子系统设备驱动框架

10.1 输入子系统驱动程序

10.2 实验10-1:“输入子系统加速度计”模块

10.2.1 设备树

10.2.2 使用I2C交互的输入框架

10.2.3 使用输入设备的输入框架

10.3 代码清单10-1:i2c_imx_accel.c

10.4 i2c_imx_accel.ko演示

10.5 在Linux中使用SPI

10.6 Linux的SPI子系统

10.7 编写SPI从设备驱动程序

10.7.1 注册SPI从设备驱动程序

10.7.2 在设备树中声明SPI设备

10.8 实验10-2:“SPI加速度计输入设备”模块

10.8.1 i.MX7D处理器的硬件描述

10.8.2 SAMA5D2处理器的硬件描述

10.8.3 BCM2837处理器的硬件描述

10.8.4 i.MX7D处理器的设备树

10.8.5 SAMA5D2处理器的设备树

10.8.6 BCM2837处理器的设备树

10.8.7 “SPI加速度计输入设备”模块的代码描述

10.9 代码清单10-2:adxl345_imx.c

10.10 adxl345_imx.ko演示

第11章 设备驱动中的工业IO子系统

11.1 IIO设备的sysfs接口

11.2 IIO设备通道

11.3 iio_info数据结构

11.4 缓冲区

11.4.1 IIO缓冲区的sysfs接口

11.4.2 设置IIO缓冲区

11.4.3 触发器

11.4.4 触发式缓冲区

11.5 工业I/O事件

11.6 IIO工具

11.7 实验11-1:“IIO子系统DAC”模块

11.7.1 设备树

11.7.2 用作I2C交互的工业框架

11.7.3 用作IIO设备的工业框架

11.8 代码清单11-1:ltc2607_imx_dual_device.c

11.9 实验11-2:“SPIDEV双通道ADC用户”应用程序的“IIO子系统DAC”模块

11.9.1 i.MX7D处理器的硬件描述

11.9.2 SAMA5D2处理器的硬件描述

11.9.3 BCM2837处理器的硬件描述

11.9.4 i.MX7D处理器的设备树

11.9.5 SAMA5D2处理器的设备树

11.9.6 BCM2837处理器的设备树

11.10 代码清单11-2:LTC2422_spidev.c

11.11 ltc2607_imx_dual_device.ko配合LTC2422_spidev使用演示

11.12 实验11-3:“IIO子系统ADC”模块

11.12.1 设备树

11.12.2 用作SPI交互的工业框架

11.12.3 用作IIO设备的工业框架

11.13 代码清单11-3:ltc2422_imx_dual.c

11.14 代码清单11-4:ltc2422_app.c

11.15 ltc2422_imx_dual.ko配合ltc2422_app使用演示

11.16 实验11-4:“具备硬件触发功能的IIO子系统ADC”模块

11.16.1 i.MX7D、SAMA5D2和BCM2837处理器的设备树

11.16.2 驱动里的睡眠和唤醒

11.16.3 中断管理

11.17 代码清单11-5:ltc2422_imx_trigger.c

11.18 ltc2422_imx_trigger.ko配合LTC2422_app使用演示

第12章 在Linux设备驱动程序中使用regmap API

12.1 regmap的实现

12.2 实验12-1:“SPI regmap IIO设备”模块

12.3 代码清单12-1:adxl345_imx_iio.c

12.4 adxl345_imx_iio.ko演示

第13章 Linux USB设备驱动

13.1 USB 2.0总线拓扑

13.2 USB总线枚举和设备布局

13.3 USB数据传输

13.4 USB设备类别

13.5 USB描述符

13.5.1 USB设备描述符

13.5.2 USB配置描述符

13.5.3 USB接口描述符

13.5.4 USB端点描述符

13.5.5 USB字符串描述符

13.5.6 USB HID描述符

13.6 Linux USB子系统

13.7 编写Linux USB设备驱动程序

13.7.1 注册USB设备驱动程序

13.7.2 Linux主机端数据类型

13.7.3 USB请求块

13.8 实验13-1:USB HID设备应用程序

13.8.1 步骤1:创建一个新工程

13.8.2 步骤2:配置Harmony

13.8.3 步骤3:修改生成的代码

13.8.4 步骤4:声明USB状态机的状态

13.8.5 步骤5:添加新成员到APP_DATA类型

13.8.6 步骤6:声明接收缓冲区和发送缓冲区

13.8.7 步骤7:初始化新成员

13.8.8 步骤8:处理弹出

13.8.9 步骤9:处理HID事件

13.8.10 步骤10:创建USB状态机

13.8.11 步骤11:调度新的报告接收请求

13.8.12 步骤12:接收、准备和发送报告

13.8.13 步骤13:烧写应用程序

13.9 实验13-2:“USB LED”模块

13.10 代码清单13-1:usb_led.c

13.11 usb_led.ko演示

13.12 实验13-3:“USB LED和开关”模块

13.13 代码清单13-2:usb_urb_int_led.c

13.14 usb_urb_int_led.ko演示

13.15 实验13-4:“连接到USB多显LED的I2C”模块

13.16 代码清单13-3:usb_ltc3206.c

13.17 usb_ltc3206.ko演示

附录 将内核模块移植到Microchip SAMA5D27-SOM1上

参考文献

术语表



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3