目 錄
第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
· · · · · · (
收起)