[套装书]嵌入式Linux设备驱动程序开发指南(原书第2版)+Linux嵌入式实时应用开发实战(原书第3版)(2册)

作者
阿尔贝托·利贝拉尔·德·洛斯里奥斯 Doug Abbott
丛书名
电子与嵌入式系统设计译丛
出版社
机械工业出版社
ISBN
9782106221112
简要
简介
内容简介书籍计算机书籍 ---------------------------8081490 - 嵌入式Linux设备驱动程序开发指南(原书第2版)--------------------------- 嵌入式微处理器功能强大、节能和低成本与嵌入式Linux系统的灵活性结合,促使业界许多公司基于嵌入式微处理器开发出了很多新产品。本书教读者基于设备树嵌入式Linux系统如何开发设备驱动程序。读者将学习编写不同类型的Linux驱动程序,以及与内核和用户空间交互的应用程序程序接口(API)和方法。本书以实战为核心,阐述了Linux内核基础知识,将编写大约30个驱动程序并移植到三种不同的微处理器上。本书在实验部分中基于NXP i.MX7D、Microchip SAMA5D2和Broadcom BCM2837三种不同微处理器详细阐述了驱动程序的开发的实现,读者可参考实验部分选择开发和测试自己的驱动程序。在阅读本书之前,建议读者先购买一个基于这些微处理器之一的开发板,板上至少应有一个SPI和I2C控制器,例如Raspberry Pi3模型B板。 ---------------------------3770944 - Linux嵌入式实时应用开发实战(原书第3版)--------------------------- 本书介绍目前广泛应用于嵌入式产品的Linux系统开发,包括Linux系统特性、环境配置、交叉开发环境中的应用编程,以及Linux开发组件和工具,并辅以相关参考资料,对于初次在嵌入式和实时领域应用Lmux的工程技术人员来说,是一本十分详尽的指导书。
目录
[套装书具体书目]
3770944 - Linux嵌入式实时应用开发实战(原书第3版) - 9787111488576 - 机械工业出版社 - 定价 59
8081490 - 嵌入式Linux设备驱动程序开发指南(原书第2版) - 9787111684558 - 机械工业出版社 - 定价 159



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


译者序
前言
作者简介
第1章 构建系统1
1.1 引导加载程序1
1.2 Linux内核3
1.3 系统调用接口和C运行时库6
1.4 系统共享库7
1.5 根文件系统8
1.6 Linux启动过程9
1.7 构建嵌入式Linux系统10
1.8 设置以太网通信11
1.9 为NXP i.MX7D处理器构建嵌入式Linux系统11
1.9.1 简介12
1.9.2 主机软件包12
1.9.3 设置repo工具13
1.9.4 Yocto工程的安装和映像构建13
1.9.5 Yocto 之外的工作15
1.9.6 构建Linux内核18
1.9.7 安装TFTP服务器20
1.9.8 安装NFS服务器20
1.9.9 设置U-Boot环境变量21
1.10 为Microchip SAMA5D2处理器构建嵌入式Linux系统21
1.10.1 简介22
1.10.2 主机软件包22
1.10.3 Yocto工程的安装和映像构建22
1.10.4 Yocto 之外的工作25
1.10.5 构建Linux内核25
1.10.6 安装TFTP服务器27
1.10.7 安装NFS服务器27
1.10.8 设置U-Boot环境变量28
1.11 为Broadcom BCM2837处理器构建Linux嵌入式系统28
1.11.1 Raspbian28
1.11.2 构建Linux内核29
1.11.3 将文件复制到Raspberry Pi31
1.12 使用Eclipse33
1.12.1 用于内核源码的Eclipse配置33
1.12.2 用于开发Linux驱动程序的Eclipse配置38
第2章 Linux设备与驱动模型42
2.1 总线核心驱动42
2.2 总线控制器驱动45
2.3 设备驱动45
2.4 设备树简介46
第3章 最简驱动程序50
3.1 许可证51
3.2 实验3-1:“helloworld”模块51
3.3 代码清单3-1:helloworld_imx.c52
3.4 代码清单3-2:Makefile52
3.5 helloworld_imx.ko演示53
3.6 实验3-2:“带参数的helloworld”模块53
3.7 代码清单3-3:helloworld_imx_with_parameters.c54
3.8 helloworld_imx_with_parameters.ko演示54
3.9 实验3-3:“helloworld计时”模块55
3.10 代码清单3-4:helloworld_imx_with_timing.c55
3.11 helloworld_imx_with_timing.ko演示56
第4章 字符设备驱动57
4.1 实验4-1:“helloworld字符设备”模块59
4.2 代码清单4-1:helloworld_imx_char_driver.c63
4.3 代码清单4-2:Makefile65
4.4 代码清单 4-3:ioctl_test.c65
4.5 helloworld_imx_char_driver.ko演示66
4.6 将模块添加到内核构建66
4.7 使用设备文件系统创建设备文件67
4.8 实验4-2:“class字符设备”模块68
4.9 代码清单4-4:helloworld_imx_class_driver.c70
4.10 helloworld_imx_class_driver.ko演示72
4.11 杂项字符设备驱动72
4.12 实验4-3:“杂项字符设备”模块73
4.13 代码清单4-5:misc_imx_driver.c74
4.14 misc_imx_driver.ko演示75
第5章 平台设备驱动76
5.1 实验5-1:“平台设备”模块78
5.2 代码清单5-1:hellokeys_imx.c81
5.3 hellokeys_imx.ko演示82
5.4 操作硬件的文档82
5.5 硬件命名约定83
5.6 引脚控制器84
5.7 引脚控制子系统86
5.8 设备树引脚控制器绑定92
5.9 GPIO 控制器驱动96
5.10 GPIO描述符使用者接口98
5.10.1 获取和释放GPIO98
5.10.2 使用GPIO99
5.10.3 GPIO映射到中断99
5.10.4 GPIO设备树100
5.11 在内核和用户态之间交换数据100
5.12 MMIO(内存映射I/O)设备访问101
5.13 实验5-2:“RGB LED平台设备”模块103
5.13.1 i.MX7D处理器的硬件描述103
5.13.2 SAMA5D2处理器的硬件描述105
5.13.3 BCM2837处理器的硬件描述107
5.13.4 i.MX7D处理器的设备树107
5.13.5 SAMA5D2处理器的设备树111
5.13.6 BCM2837处理器的设备树114
5.13.7 “RGB LED平台设备”模块的代码描述115
5.14 代码清单5-2:ledRGB_sam_platform.c119
5.15 ledRGB_sam_platform.ko演示124
5.16 平台驱动资源124
5.17 Linux LED类126
5.18 实验5-3:“RGB LED类”模块128
5.18.1 i.MX7D、SAMA5D2和BCM2837处理器的设备树128
5.18.2 “RGB LED类”模块的代码描述130
5.19 代码清单5.3:ledRGB_sam_class_platform.c134
5.20 ledRGB_sam_class_platform.ko演示137
5.21 用户态中的平台设备驱动137
5.22 用户定义的I/O:UIO139
5.22.1 UIO如何运转140
5.22.2 内核中的UIO API141
5.23 实验5-4:“LED UIO平台”模块142
5.23.1 i.MX7D、SAMA5D2和BCM2837处理器的设备树143
5.23.2 “LED UIO平台”模块的代码描述144
5.24 代码清单5-4:led_sam_UIO_platform.c146
5.25 代码清单5-5:UIO_app.c148
5.26 led_sam_UIO_platform.ko及UIO_app演示150
第6章 I2C从端驱动151
6.1 Linux I2C 子系统152
6.2 编写I2C 从端驱动155
6.2.1 注册I2C从端驱动155
6.2.2 在设备树中声明I2C设备157
6.3 实验6-1:“I2C I/O 扩展设备”模块159
6.3.1 i.MX7D处理器的硬件描述159
6.3.2 SAMA5D2 处理器的硬件描述159
6.3.3 BCM2837处理器的硬件描述160
6.3.4 i.MX7D处理器的设备树161
6.3.5 SAMA5D2处理器的设备树162
6.3.6 BCM2837处理器的设备树163
6.3.7 “I2C I/O扩展设备”模块的代码描述164
6.4 代码清单6-1:io_imx_expander.c167
6.5 io_imx_expander.ko演示170
6.6 sysfs文件系统171
6.7 实验6-2:“I2C多显LED”模块174
6.7.1 i.MX7D处理器的硬件描述175
6.7.2 SAMA5D2处理器的硬件描述176
6.7.3 BCM2837处理器的硬件描述176
6.7.4 i.MX7D处理器的设备树177
6.7.5 SAMA5D2处理器的设备树178
6.7.6 BCM2837处理器的设备树180
6.7.7 ACPI和设备树的统一设备属性接口181
6.7.8 “I2C多显LED”模块的代码描述182
6.8 代码清单6-2:ltc3206_imx_led_class.c186
6.9 ltc3206_imx_led_class.ko演示192
第7章 处理设备驱动中的中断194
7.1 GPIO控制器在Linux内核的中断域196
7.2 设备树中断处理203
7.3 在Linux设备驱动中申请中断206
7.4 实验7-1:“按钮中断设备”模块207
7.4.1 i.MX7D处理器的硬件描述208
7.4.2 SAMA5D2处理器的硬件描述208
7.4.3 BCM2837处理器的硬件描述208
7.4.4 i.MX7D 处理器的设备树208
7.4.5 SAMA5D2 处理器的设备树209
7.4.6 BCM2837 处理器的设备树210
7.4.7 “按钮中断设备”模块的代码描述211
7.5 代码清单7-1:int_imx_key.c213
7.6 int_imx_key.ko演示215
7.7 延迟工作215
7.7.1 软中断216
7.7.2 tasklet217
7.7.3 定时器218
7.7.4 线程化的中断221
7.7.5 工作队列223
7.8 内核中的锁226
7.8.1 锁和单处理器内核227
7.8.2 在中断和进程上下文之间共享自旋锁227
7.8.3 在用户上下文使用锁227
7.9 内核中的睡眠228
7.10 实验7-2:“睡眠设备”模块229
7.10.1 i.MX7D处理器的设备树230
7.10.2 SAMA5D2处理器的设备树231
7.10.3 BCM2837处理器的设备树232
7.10.4 “睡眠设备”模块的代码描述233
7.11 代码清单7-2:int_imx_key_wait.c236
7.12 int_imx_key_wait.ko演示239
7.13 内核线程239
7.14 实验7-3:“keyled类”模块240
7.14.1 i.MX7D处理器的硬件描述240
7.14.2 SAMA5D2处理器的硬件描述241
7.14.3 BCM2837处理器的硬件描述241
7.14.4 i.MX7D 处理器的设备树242
7.14.5 SAMA5D2处理器的设备树245
7.14.6 BCM2837处理器的设备树247
7.14.7 “keyled类”模块的代码描述249
7.15 代码清单7-3:keyled_imx_class.c255
7.16 keyled_imx_class.ko演示264
第8章 在Linux驱动中分配内存266
8.1 查询ARM的MMU转换表267
8.2 Linux地址的类型271
8.3 用户进程的虚拟地址到物理地址的映射273
8.4 内核的虚拟地址到物理地址的映射273
8.5 内核内存分配器275
8.5.1 页面分配器275
8.5.2 页面分配器接口275
8.5.3 SLAB分配器276
8.5.4 SLAB分配器接口278
8.5.5 kmalloc内存分配器279
8.6 实验8-1:“链表内存分配”模块280
8.7 代码清单8-1:linkedlist_imx_platform.c283
8.8 linkedlist_imx_platform.ko演示287
第9章 在Linux设备驱动中使用DMA288
9.1 缓存一致性288
9.2 Linux DMA引擎API289
9.3 实验9-1:“流式DMA”模块295
9.4 代码清单9-1:sdma_imx_m2m.c302
9.5 sdma_imx_m2m.ko演示 306
9.6 DMA分散/聚集映射306
9.7 实验9-2:“分散/聚集DMA设备”模块 307
9.8 代码清单9-2:sdma_imx_sg_m2m.c310
9.9 sdma_imx_sg_m2m.ko演示 315
9.10 用户态DMA315
9.11 实验9-3:“用户态DMA”模块317
9.12 代码清单9-3:sdma_imx_mmap.c319
9.13 代码清单9-4:sdma.c323
9.14 sdma_imx_mmap.ko演示324
第10章 输入子系统设备驱动框架325
10.1 输入子系统驱动程序326
10.2 实验10-1:“输入子系统加速度计”模块327
10.2.1 设备树329
10.2.2 使用I2C交互的输入框架330
10.2.3 使用输入设备的输入框架331
10.3 代码清单10-1:i2c_imx_accel.c334
10.4 i2c_imx_accel.ko演示336
10.5 在Linux中使用SPI337
10.6 Linux的SPI子系统339
10.7 编写SPI从设备驱动程序 342
10.7.1 注册SPI从设备驱动程序 342
10.7.2 在设备树中声明SPI设备343
10.8 实验10-2:“SPI加速度计输入设备”模块346
10.8.1 i.MX7D 处理器的硬件描述347
10.8.2 SAMA5D2处理器的硬件描述 347
10.8.3 BCM2837处理器的硬件描述 348
10.8.4 i.MX7D处理器的设备树348
10.8.5 SAMA5D2处理器的设备树 349
10.8.6 BCM2837处理器的设备树350
10.8.7 “SPI加速度计输入设备”模块的代码描述351
10.9 代码清单10-2:adxl345_imx.c360
10.10 adxl345_imx.ko演示371
第11章 设备驱动中的工业IO 子系统373
11.1 IIO设备的sysfs接口375
11.2 IIO设备通道375
11.3 iio_info数据结构377
11.4 缓冲区378
11.4.1 IIO缓冲区的sysfs接口378
11.4.2 设置IIO缓冲区379
11.4.3 触发器380
11.4.4 触发式缓冲区380
11.5 工业I/O事件382
11.6 IIO工具386
11.7 实验11-1:“IIO子系统DAC”模块386
11.7.1 设备树387
11.7.2 用作I2C交互的工业框架389
11.7.3 用作IIO设备的工业框架389
11.8 代码清单11-1:ltc2607_imx_dual_device.c394
11.9 实验11-2:“SPIDEV双通道ADC用户”应用程序的“IIO子系统DAC”模块397
11.9.1 i.MX7D处理器的硬件描述399
11.9.2 SAMA5D2处理器的硬件描述399
11.9.3 BCM2837处理器的硬件描述399
11.9.4 i.MX7D处理器的设备树400
11.9.5 SAMA5D2处理器的设备树400
11.9.6 BCM2837处理器的设备树401
11.10 代码清单 11-2:LTC2422_spidev.c401
11.11 ltc2607_imx_dual_device.ko配合LTC2422_spidev使用演示404
11.12 实验11-3:“IIO子系统ADC”模块406
11.12.1 设备树406
11.12.2 用作SPI交互的工业框架407
11.12.3 用作IIO设备的工业框架408
11.13 代码清单11-3:ltc2422_imx_dual.c411
11.14 代码清单11-4:ltc2422_app.c413
11.15 ltc2422_imx_dual.ko配合ltc2422_app使用演示414
11.16 实验11-4:“具备硬件触发功能的IIO子系统ADC”模块415
11.16.1 i.MX7D、SAMA5D2和BCM2837处理器的设备树415
11.16.2 驱动里的睡眠和唤醒418
11.16.3 中断管理420
11.17 代码清单11-5:ltc2422_imx_trigger.c420
11.18 ltc2422_imx_trigger.ko配合LTC2422_app使用演示423
第12章 在Linux设备驱动程序中使用regmap API424
12.1 regmap的实现425
12.2 实验12-1:“SPI regmap IIO 设备”模块428
12.3 代码清单12-1:adxl345_imx_iio.c437
12.4 adxl345_imx_iio.ko演示446
第13章 Linux USB设备驱动450
13.1 USB 2.0总线拓扑450
13.2 USB总线枚举和设备布局451
13.3 USB数据传输453
13.4 USB设备类别454
13.5 USB描述符454
13.5.1 USB设备描述符455
13.5.2 USB配置描述符456
13.5.3 USB接口描述符457
13.5.4 USB端点描述符458
13.5.5 USB字符串描述符459
13.5.6 USB HID描述符459
13.6 Linux USB子系统461
13.7 编写Linux USB设备驱动程序462
13.7.1 注册USB设备驱动程序462
13.7.2 Linux主机端数据类型463
13.7.3 USB请求块465
13.8 实验13-1:USB HID设备应用程序468
13.8.1 步骤1:创建一个新工程468
13.8.2 步骤2:配置Harmony469
13.8.3 步骤3:修改生成的代码471
13.8.4 步骤4:声明USB状态机的状态471
13.8.5 步骤5:添加新成员到APP_DATA类型472
13.8.6 步骤6:声明接收缓冲区和发送缓冲区473
13.8.7 步骤7:初始化新成员473
13.8.8 步骤8:处理弹出474
13.8.9 步骤9:处理HID事件474
13.8.10 步骤10:创建USB状态机475
13.8.11 步骤11:调度新的报告接收请求477
13.8.12 步骤12:接收、准备和发送报告478
13.8.13 步骤13:烧写应用程序479
13.9 实验13-2:“USB LED”模块479
13.10 代码清单13-1:usb_led.c483
13.11 usb_led.ko演示485
13.12 实验13-3:“USB LED和开关”模块486
13.13 代码清单13-2:usb_urb_int_led.c490
13.14 usb_urb_int_led.ko演示495
13.15 实验13-4:“连接到USB多显LED的I2C”模块496
13.16 代码清单13-3:usb_ltc3206.c505
13.17 usb_ltc3206.ko演示510
附录 将内核模块移植到MicrochipSAMA5D27-SOM1上513
参考文献526
术语表528



---------------------------3770944 - Linux嵌入式实时应用开发实战(原书第3版)---------------------------


《Linux嵌入式实时应用开发实战(原书第3版)》
译者序
前言
第一部分 入 门 指 导
第1章 嵌入式和实时空间 / 2
1.1 什么是嵌入式 / 2
1.2 什么是实时 / 3
1.3 为什么Linux适用 / 3
1.3.1 开源 / 4
1.3.2 移植和定制 / 5
1.4 哪里用嵌入式Linux / 5
1.5 开源协议 / 6
1.6 资源 / 8
第2章 安装Linux / 9
2.1 发行版 / 9
2.1.1 Debian GNU/Linux / 10
2.1.2 Fedora / 10
2.1.3 Red Hat企业版Linux / 11
2.1.4 SUSE / 11
2.1.5 Ubuntu / 11
2.2 硬件需求 / 12
2.3 安装方案 / 12
2.3.1 单机版 / 12
2.3.2 双启动 / 12
2.3.3 虚拟化 / 15
2.4 DVD 还是激活CD / 15
2.5 安装过程 / 15
2.5.1 磁盘分区 / 16
2.5.2 包的选择 / 17
2.6 资源 / 18
第3章 Linux入门 / 19
3.1 运行Linux——KDE / 19
3.1.1 文件管理器 / 20
3.1.2 shell 窗口 / 20
3.2 Linux属性 / 21
3.3 保护模式架构 / 22
3.3.1 实模式 / 22
3.3.2 保护模式 / 23
3.3.3 平面与分段的存储器模型 / 24
3.3.4 分页 / 24
3.4 Linux进程模型 / 25
3.4.1 fork()函数 / 25
3.4.2 execve()函数 / 27
3.5 Linux文件系统 / 27
3.5.1 文件权限 / 28
3.5.2 “根”用户 / 29
3.5.3 /proc文件系统 / 29
3.5.4 文件系统等级标准 / 30
3.5.5 挂载文件系统 / 32
3.6 系统配置 / 33
3.7 shell / 33
3.8 获得帮助 / 36
3.9 资源 / 37
第4章 主机开发环境 / 38
4.1 交叉开发工具——GNU工具链 / 38
4.1.1 GCC / 38
4.1.2 make / 39
4.1.3 GDB / 40
4.2 安装软件 / 40
4.2.1 DVD上有什么 / 40
4.2.2 安装交叉工具链 / 41
4.2.3 安装根文件系统 / 42
4.3 终端仿真器minicom / 42
4.4 网络 / 44
4.4.1 网络地址 / 44
4.4.2 无线怎么样 / 46
4.4.3 网络文件系统 / 47
4.4.4 普通文件传输协议 / 48
4.5 资源 / 49
第5章 硬件 / 50
5.1 嵌入式硬件 / 50
5.2 ARM单板计算机 / 50
5.3 其他的板怎么样 / 51
5.3.1  BeagleBoard / 51
5.3.2 Gumstix / 52
5.3.3 Raspberry Pi / 53
5.4 设置Mini2440 / 53
5.5 Flash存储器和文件系统 / 54
5.5.1 Flash存储器——NAND和NOR / 54
5.5.2 Flash中的根文件系统 / 55
5.6 板的准备工作 / 56
5.6.1 例程 / 56
5.6.2 factory_images / 57
5.6.3 脚本文件 / 57
5.6.4 过程 / 58
5.6.5 最后几步 / 60
5.6.6 哪里会出错 / 61
5.7 boot loader / 61
5.8 资源 / 62
第6章 Eclipse 集成开发环境/ 63
6.1 概述 / 63
6.1.1 插件 / 65
6.1.2 工作台 / 66
6.2 安装 / 67
6.3 使用Eclipse / 67
6.4 C开发环境——CDT / 68
6.4.1 创建一个新工程 / 68
6.4.2 给工程添加源代码 / 69
6.4.3 编程助手 / 70
6.4.4 代码模板 / 71
6.4.5 自动补齐 / 71
6.5 程序 / 71
6.6 生成工程 / 72
6.7 使用CDT调试 / 72
6.7.1 调试视图 / 74
6.7.2 变量视图 / 75
6.7.3 断点视图 / 75
6.7.4 存储器视图 / 75
6.8 完成调试 / 76
6.9 总结 / 76
6.10 资源 / 76
第二部分 交叉开发环境中的应用编程
第7章 从用户空间访问硬件 / 78
7.1 回顾 / 78
7.2 ARM I/O架构 / 78
7.3 我们的第一个程序——从Linux访问I/O / 80
7.3.1 创建一个工程 / 80
7.3.2 目标执行环境 / 81
7.4 led 程序 / 82
7.5 一个数据采集的例子 / 84
7.6 资源 / 86
第8章 调试嵌入式软件 / 87
8.1 使用Eclipse进行远程调试 / 87
8.2 thermostat / 91
8.3 主机工作站作为调试环境 / 92
8.4 调试器服务框架(DSF) / 96
8.4.1 安装SSH / 96
8.4.2 为根添加一个口令 / 98
8.4.3 配置RSE / 98
8.4.4 使用RSE调试 / 100
8.5 资源 / 101
第9章 Posix 线程 / 102
9.1 线程 / 103
9.2 同步——互斥量 / 105
9.2.1 互斥量属性 / 106
9.2.2 解决资源共享问题而引入的问题——优先级倒置 / 107
9.3 通信——条件变量 / 109
9.4 线程终止和取消 / 109
9.5 Pthread实现 / 111
9.6 更新thermostat / 113
9.6.1 Linux设备驱动 / 113
9.6.2 底层I/O API / 114
9.6.3 thermostat.c中需要的改变 / 115
9.7 调试多线程程序 / 116
9.8 资源 / 116
第10章 嵌入式网络 / 117
10.1 Sockets / 117
10.1.1 服务器进程 / 118
10.1.2 客户进程 / 118
10.1.3 socket 属性 / 119
10.2 一个简单的例子 / 119
10.2.1 服务器 / 119
10.2.2 客户 / 120
10.3 远程thermostat / 121
10.4 嵌入式网络服务器 / 123
10.4.1 HTTP的背景 / 123
10.4.2 使用了网络的thermostat / 124
10.4.3 动态网络内容 / 125
10.4.4 表单和POST方法 / 126
10.4.5 生成和尝试 / 126
10.5 一个“真正的”网络服务器——boa / 127
10.6 嵌入式E-mail / 128
10.7 其他应用级协议 / / 131
10.8 资源 / 131
第11章 配置和生成内核 / 132
11.1 开始 / 132
11.1.1 内核版本编号 / 133
11.1.2 内核源树 / 133
11.2 内核makefile / 135
11.3 修补内核 / 135
11.4 配置内核——make config、menuconfig、xconfig / 136
11.4.1 xconfig 选项 / 140
11.4.2 .config 文件 / 140
11.5 表象背后——真正发生了什么 / 141
11.6 生成内核 / 142
11.7 引导新内核 / 143
11.8 资源 / 144
第12章 内核模块和设备驱动 / 145
12.1 内核模块 / 145
12.1.1 一个模块的例子 / 146
12.1.2 破坏内核 / 147
12.1.3 内核模块和GPL / 148
12.1.4 生成内核模块 / 148
12.1.5 模块的作用 / 149
12.2 什么是设备驱动 / 150
12.3 Linux设备驱动 / 151
12.3.1 /dev / 151
12.3.2 底层用户空间I/O API / 152
12.3.3 内部驱动结构 / 152
12.3.4 驱动数据结构 / 152
12.3.5 init()和exit() / 153
12.3.6 open()和release() / 154
12.3.7 read()和write() / 154
12.3.8 生成和运行驱动 / 155
12.4 调试内核代码 / 156
12.4.1 printk / 156
12.4.2 /proc文件 / 157
12.5 处理中断 / 158
12.5.1 注册中断handler / 159
12.5.2 探测中断 / 160
12.5.3 延迟处理——“bottom half” / 161
12.6 将你的驱动生成至内核 / 162
12.7 资源 / 164
第三部分 组件和工具
第13章 BusyBox和Linux初始化 / 166
13.1 BusyBox简介 / 166
13.2 配置和安装BusyBox / 167
13.2.1 BusyBox设置 / 169
13.2.2 小程序 / 169
13.2.3 生成和安装 / 170
13.3 使用BusyBox / 171
13.4 thermostat 显示示例 / 171
13.4.1 ANSI终端Escape 序列 / 172
13.4.2 thermostat 显示 / 172
13.4.3 ncurses库 / 173
13.5 用户空间初始化 / 173
13.5.1 第一步boot loader / 173
13.5.2 u-boot / 173
13.5.3 Linux内核 / 174
13.5.4 init进程 / 174
13.6 资源 / 175
第14章 u-boot boot loader和准备发布 / 176
14.1 u-boot / 176
14.1.1 背景 / 176
14.1.2 安装和配置u-boot / 177
14.1.3 测试一个新的u-boot / 178
14.1.4 通过JTAG重新编程NOR / 178
14.2 创建一个flash文件系统 / 179
14.2.1 关于flash分区的更多考虑 / 180
14.2.2 扁平设备树 / 181
14.3 资源 / 182
第15章 源代码控制——git / 183
15.1 背景 / 183
15.2 git介绍 / 184
15.2.1 文件状态和生命周期 / 186
15.2.2 分支和合并 / 187
15.3 配置git / 188
15.4 图形化git / 189
15.5 资源 / 192
第16章 build工具 / 193
16.1 Buildroot / 193
16.2 开源嵌入式 / 195
16.2.1 开始 / 196
16.2.2 个人观点 / 197
16.3 安卓 / 197
16.3.1 应用开发 / 198
16.3.2 平台开发 / 199
16.4 总结 / 199
16.5 资源 / 200
附录A u-boot命令 / 201
附录B 为什么软件不应该有版权 / 207

推荐

车牌查询
桂ICP备20004708号-3