目 录
第1章 为什么学习本书?1
1.1 本书读者对象1
1.2 本书主要内容2
1.3 学习方法2
1.4 本书的组织结构3
1.5 本书中的软件4
1.6 结束语5
第2章 Raspberry Pi7
2.1 型号7
2.2 共有的硬件9
2.3 选择哪一种型号?9
第3章 准备11
3.1 静态IP地址11
3.2 使用SSH12
3.3 虚拟网络计算机13
3.3.1 显示器编号13
3.3.2 几何尺寸13
3.3.3 深度14
3.3.4 像素格式14
3.3.5 密码设置14
3.3.6 服务器的启动14
3.3.7 VNC查看器14
3.3.8 停止VNC服务器15
3.4 原型站15
3.5 Adafruit Pi Cobbler16
3.6 Gertboard17
3.7 裸机17
第4章 电源19
4.1 计算功率19
4.2 电流需求20
4.3 外围设备电源20
4.4 B型输入电源21
4.5 A型输入电源22
4.6 3.3V电源22
4.7 供电的USB集线器22
4.8 电源适配器22
4.8.1 一款不合适的电源23
4.8.2 电子书适配器23
4.8.3 好的电源23
4.8.4 电压测试24
4.9 蓄电池电源25
4.9.1 要求25
4.9.2 余量25
4.9.3 LM7805调节25
4.9.4 DC-DC降压变换器26
4.10 供电不足的征兆28
4.11 断电28
第5章 头带、LED和复位29
5.1 状态指示LED灯29
5.1.1 OK或ACT LED29
5.1.2 PWR LED29
5.1.3 FDX LED30
5.1.4 LNK LED30
5.1.5 10M或10/100 LED30
5.2 P1头30
5.2.1 安全模式32
5.2.2 逻辑电平33
5.2.3 复位时GPIO的配置33
5.2.4 单总线驱动器33
5.3 P5头33
5.4 复位34
第6章 SDRAM37
6.1 /proc/meminfo37
6.1.1 MemTotal(总存储器)39
6.1.2 MemFree(空闲存储器)39
6.1.3 Buffers(缓冲区)40
6.1.4 Cached(高速缓存的)40
6.1.5 SwapCached(交换的缓冲区)40
6.1.6 Active(活跃的存储器空间)40
6.1.7 Inactive(不活跃的存储器空间)40
6.1.8 Active(anon)41
6.1.9 Inactive(anon)41
6.1.10 Active(file)41
6.1.11 Inactive(file)41
6.1.12 Unevictable(不可回收的)42
6.1.13 Mlocked(被锁定的)42
6.1.14 SwapTotal(交换的总数)42
6.1.15 SwapFree(自由交换的数量)42
6.1.16 Dirty42
6.1.17 Writeback43
6.1.18 AnonPages43
6.1.19 Mapped43
6.1.20 Shmem43
6.1.21 Slab43
6.1.22 SReclaimable44
6.1.23 SUnreclaim44
6.1.24 KernelStack44
6.1.25 PageTables44
6.1.26 NFS_Unstable44
6.1.27 Bounce45
6.1.28 WritebackTmp45
6.1.29 CommitLimit45
6.1.30 Committed_AS46
6.1.31 VmallocTotal47
6.1.32 VmallocUsed47
6.1.33 VmallocChunk47
6.2 物理存储器47
6.3 存储器映射48
6.3.1 地址50
6.3.2 长度50
6.3.3 保护50
6.3.4 标志50
6.3.5 文件描述符50
6.3.6 偏移51
6.3.7 返回值51
6.3.8 volatile关键字51
6.4 虚拟存储器52
6.5 关于SDRAM的后一点看法52
第7章 CPU53
7.1 鉴别53
7.2 超频54
7.3 执行56
7.4 线程57
7.4.1 pthread头文件57
7.4.2 pthread错误处理57
7.4.3 pthread_create(3)58
7.4.4 pthread_attr_t59
7.4.5 pthread_join(3)60
7.4.6 pthread_detach(3)61
7.4.7 pthread_self(3)62
7.4.8 pthread_kill(3)62
7.5 mutex63
7.5.1 pthread_mutex_create(3)63
7.5.2 pthread_mutex_destroy(3)63
7.5.3 pthread_mutex_lock(3)64
7.5.4 pthread_mutex_unlock(3)64
7.6 条件变量65
7.6.1 pthread_cond_init(3)66
7.6.2 pthread_cond_destroy(3)67
7.6.3 pthread_cond_wait(3)67
7.6.4 pthread_cond_signal(3)68
7.6.5 pthread_cond_broadcast(3)68
第8章 USB69
8.1 电源70
8.2 供电集线器70
8.3 USB API支持71
8.3.1 libusb71
8.3.2 Include文件71
第9章 以太网75
9.1 有线以太网75
9.1.1 /etc/work/interfaces76
9.1.2 改变到静态IP76
9.1.3 测试静态IP地址77
9.1.4 USB适配器78
9.1.5 /etc/hosts文件78
9.2 无线以太网78
第10章 SD卡存储83
10.1 SD卡媒介83
10.2 SD卡接口83
10.3 SD卡基础84
10.4 Raspbian区块尺寸84
10.5 容量和性能86
10.6 传送模式86
10.6.1 SPI总线模式86
10.6.2 1位SD模式87
10.6.3 4位SD模式88
10.7 耗损均衡88
第11章 UART91
11.1 RS-232转换器91
11.2 RS-23293
11.2.1 起始位93
11.2.2 数据位94
11.2.3 奇偶位94
11.2.4 停止位94
11.2.5 波特率95
11.2.6 中断96
11.2.7 流控制96
11.3 Raspberry Pi UART98
11.4 ARM PL011 UART98
11.4.1 RTS/CTS访问98
11.4.2 PL011 UART特性99
11.5 独占串行线路的使用100
11.5.1 步骤100
11.5.2 验证101
11.6 串行API101
11.6.1 头文件101
11.6.2 open(2)101
11.6.3 结构体termios102
11.6.4 tcgetattr(3)104
11.6.5 tcsetattr(3)105
11.6.6 tcsendbreak(3)105
11.6.7 tcdrain(3)106
11.6.8 tcflush(3)106
11.6.9 tcflow(3)107
11.6.10 cfmakeraw(3)107
11.6.11 cfgetispeed(3)110
11.6.12 cfgetospeed(3)110
11.6.13 cfsetispeed(3)111
11.6.14 cfsetospeed(3)111
11.6.15 cfsetspeed(3)111
11.6.16 read(2)112
11.6.17 write(2)113
11.6.18 readv(2)和writev(2)114
11.6.19 EINTR错误115
第12章 GPIO117
12.1 引脚和名称117
12.2 复位后的配置118
12.3 上拉电阻120
12.3.1 配置上拉电阻120
12.3.2 测试上拉状态124
12.4 逻辑电平125
12.5 驱动能力125
12.5.1 输入引脚126
12.5.2 输出引脚126
12.5.3 驱动LED128
12.5.4 测试驱动能力130
12.6 GPIO电流预算132
12.7 配置132
12.7.1 交替功能选择132
12.7.2 输出引脚133
12.7.3 输入引脚133
12.7.4 交替功能133
12.8 Sysfs GPIO访问134
12.8.1 export134
12.8.2 unexport135
12.8.3 gpioX135
12.8.4 芯片级137
12.9 GPIO测试器137
12.10 GPIO输入测试138
12.11 可能的波动140
12.12 读取事件140
12.13 直接寄存器访问145
12.13.1 gpio_init( )146
12.13.2 gpio_config( )146
12.13.3 gpio_write( )146
12.13.4 gpio_read( )147
12.13.5 gpio_io.c147
12.14 GPIO晶体管驱动器149
12.14.1 驱动器设计149
12.14.2 替代品151
12.14.3 电感负载151
12.14.4 驱动器小结152
12.15 GPIO实用程序152
12.15.1 显示GPIO设置153
12.15.2 读GPIO154
12.15.3 写GPIO154
12.15.4 修改驱动层154
第13章 单总线驱动器155
13.1 单总线与供电155
13.2 线上供电155
13.3 主机和从机156
13.4 协议156
13.4.1 复位157
13.4.2 数据输入/输出157
13.5 从机支持158
13.6 读取温度158
13.6.1 总线主机160
13.6.2 从机设备160
13.6.3 读取温度162
13.7 单总线GPIO引脚162
第14章 I2C总线165
14.1 I2C概述165
14.2 SDA和SCL166
14.3 多主机和仲裁166
14.4 总线信号传输167
14.5 数据位167
14.6 消息格式168
14.7 哪些I2C总线?169
14.8 I2C总线速度169
14.9 工具170
14.10 I2C API170
14.10.1 内核模块支持170
14.10.2 头文件171
14.10.3 open(2)171
14.10.4 ioctl(2,I2C_FUNC)172
14.10.5 ioctl(2,I2C_RDWR)172
第15章 SPI总线175
15.1 SPI基础175
15.2 SPI模式176
15.3 信号传输176
15.4 从机选择177
15.5 驱动支持178
15.6 SPI API179
15.6.1 头文件179
15.6.2 打开设备180
15.6.3 SPI模式宏180
15.6.4 字的每一位181
15.6.5 时钟频率182
15.6.6 数据输入/输出182
15.6.7 关闭185
15.6.8 写185
15.6.9 读185
15.7 SPI测试185
第16章 引导189
16.1 引导ARM Linux189
16.2 启动顺序190
16.3 引导文件190
16.4 config.txt191
16.4.1 复合视频设置191
16.4.2 高精度视频192
16.4.3 过扫描视频198
16.4.4 帧缓冲器设置198
16.4.5 通用视频选项199
16.4.6 授权的多媒体数字编解码器200
16.4.7 测试200
16.4.8 存储器200
16.4.9 启动引导选项201
16.4.10 超频205
16.4.11 保单与超频206
16.4.12 电压设置210
16.5 cmdline.txt212
16.5.1 Serial console=213
16.5.2 Virtual console=214
16.5.3 kgdboc=214
16.5.4 root=214
16.5.5 rootfstype=215
16.5.6 elevator=215
16.5.7 rootwait=215
16.5.8 nfsroot=216
16.5.9 ip=217
16.6 应急内核217
第17章 初始化219
17.1 运行等级219
17.2 /etc/inittab220
17.2.1 inittab的行为initdefault220
17.2.2 常规启动顺序221
17.2.3 inittab的行为wait223
17.2.4 inittab的行为once223
17.2.5 inittab的行为respawn224
17.3 改变运行等级224
17.3.1 telinit224
17.3.2 运行等级的修改225
17.3.3 单用户模式225
17.3.4 关机和重启225
17.4 创建新的服务225
第18章 vcgencmd227
18.1 vcgencmd命令227
18.2 选项measure_clock228
18.3 选项measure_volts229
18.4 选项measure_temp230
18.5 选项codec_enabled230
18.6 选项version231
18.7 选项get_lcd_info231
18.8 选项get_config231
第19章 Linux控制台233
19.1 可用的控制台233
19.2 串行控制台234
第20章 交叉编译235
20.1 术语235
20.2 操作系统236
20.3 宿主、客户、本地和目标236
20.3.1 平台的限制237
20.3.2 没有VirtualBox (本机)237
20.3.3 使用VirtualBox(Ubuntu/Linux)237
20.4 规划你的交叉开发环境237
20.5 构建交叉编译环境238
20.5.1 下载crosstool-NG238
20.5.2 暂存目录239
20.5.3 解压源码文件(tarball)239
20.5.4 创建/opt/x-tools目录239
20.5.5 安装软件包依赖239
20.5.6 配置crosstool-NG(源代码安装的步)240
20.6 编译crosstool-ng240
20.7 将程序安装至系统中240
20.8 路径240
20.9 交叉编译配置241
20.9.1 路径和其他选项241
20.9.2 目标选项243
20.9.3 操作系统243
20.9.4 二进制实用程序244
20.9.5 C语言编译器244
20.9.6 保存配置245
20.10 构建交叉编译器246
第21章 交叉编译内核249
21.1 镜像工具249
21.2 下载内核250
21.3 编辑Makefile251
21.4 make mrproper指令252
21.5 内核配置252
21.6 make menuconfig指令(图形化的内核配置)253
21.7 make指令253
21.8 准备内核镜像253
21.9 安装内核镜像254
21.10 模块255
21.11 固件256
21.12 SD卡VirtualBox(虚拟机)的安装257
第22章 DHT11传感器259
22.1 特征259
22.2 电路260
22.3 协议260
22.3.1 通用协议260
22.3.2 数据位数261
22.3.3 数据格式261
22.3.4 软件262
22.3.5 选择的方法263
22.4 运行示例264
22.5 源代码265
第23章 MCP23017 GPIO扩展器271
23.1 DC特征271
23.1.1 GPIO输出电流272
23.1.2 GPIO输入272
23.1.3 待机电流273
23.1.4 输入逻辑电平273
23.1.5 输出逻辑电平273
23.2 复位时序274
23.3 电路274
23.4 I2C总线275
23.5 接线和测试275
23.6 软件配置277
23.7 主程序283
23.8 i2c_funcs.c模块288
23.9 sysgpio.c模块291
23.10 运行示例294
23.11 响应时间296
第24章 Nunchuk手柄299
24.1 项目概况299
24.2 Nunchuk手柄的特点299
24.3 连接器引脚输出300
24.4 测试连接301
24.5 NunchukI2C协议302
24.5.1 加密302
24.5.2 读取传感器的数据302
24.6 Linux uinput界面303
24.6.1 使用头文件304
24.6.2 打开设备节点304
24.6.3 配置事件304
24.6.4 创建节点308
24.6.5 发布EV_KEY事件309
24.6.6 发布EV_REL事件310
24.6.7 发布EV_SYN事件310
24.6.8 关闭uinput311
24.7 X-Windows(图形用户界面)311
24.8 输入实用程序312
24.9 测试Nunchuk312
24.9.1 测试./Nunchuk313
24.9.2 Lsinput实用程序314
24.9.3 input-events实用程序314
24.10 程序315
第25章 实时时钟325
25.1 DS1307概述325
25.1.1 X1和X2引脚326
25.1.2 SQW/OUT引脚326
25.2 电源327
25.3 3伏特兼容性328
25.4 微小的RTC修改328
25.5 DS1307总线速度331
25.6 RTC和RAM地址映射331
25.7 阅读日期和时间332
25.8 I2C通信333
25.9 接线334
25.10 运行示例334
25.11 终测试335
25.12 启动脚本335
第26章 VS1838B红外接收器345
26.1 操作参数345
26.2 VS1838B电路346
26.3 软件347
26.3.1 信号元件348
26.3.2 组织机构代码349
26.3.3 命令行选项349
第27章 步进电机363
27.1 软盘步进电机363
27.2 驱动器电路365
27.3 驱动驱动器368
27.3.1 输入电平368
27.3.2 复位/启动电源369
27.4 操作模式370
27.4.1 波驱动(0模式)370
27.4.2 全步进驱动(1模式)370
27.4.3 半步进驱动(2模式)370
27.5 软件371
第28章 H桥驱动器381
28.1 L298驱动器381
28.1.1 传感电阻382
28.1.2 使能A和B382
28.1.3 In1和In2输入382
28.1.4 保护二极管382
28.2 L298 PCB383
28.3 从GPIO驱动384
28.4 双极步进模式386
28.4.1 单相波模式386
28.4.2 双相波模式386
28.4.3 半步模式387
28.5 选择驱动GPIO388
28.6 项目示意图388
28.7 程序运行389
第29章 远程控制面板399
29.1 切换输入399
29.2 CD4013400
29.3 触发器测试401
29.4 LED灯402
29.5 ?MQ402
29.5.1 执行安装402
29.5.2 编译和链接403
29.6 感测站的设计403
29.7 感测站程序404
29.8 控制台程序404
29.9 传感器源代码405
29.10 控制台源代码413
第30章 脉冲宽度调制419
30.1 PWM介绍419
30.2 PWM参数420
30.3 PWM硬件外设420
30.4 PWM软件420
30.5 仪表电路420
30.6 pwm程序421
30.6.1 PWM硬件设置命令423
30.6.2 基于硬件显示CPU使用百分比(率)424
30.6.3 PWM程序软件430
30.6.4 有多少PWM?432
30.6.5 运行PWM软件命令433
30.6.6 基于软件显示CPU使用百分比433
附录A 术语表437
附录B 电源标准443
附录C 电子学参考445
附录D Raspbian apt命令447
附录E ARM编译选项451
附录F Mac OS X技巧453
参考文献455
· · · · · · (
收起)