第1章 Linux的開發環境 1
1.1 開發環境概述 1
1.2 串口終端工具 2
1.3 TFTP 6
1.4 NFS 7
1.5 SAMBA共享 8
1.6 Linux係統的軟件發布協議 9
第2章 程序生成和GCC 11
2.1 程序生成工具概述 11
2.1.1 GUN的GCC工具 11
2.1.2 ELF文件格式 14
2.2 GCC工具的使用 16
2.2.1 示例工程 16
2.2.2 編譯、匯編和連接 18
2.2.3 預處理和匯編 20
2.2.4 歸檔工具(ar)和靜態庫 20
2.2.5 動態庫 22
2.2.6 ELF格式文件信息讀取(readelf) 22
2.2.7 符號信息工具(nm) 25
2.2.8 字符串工具(strings) 26
2.2.9 去除符號(strip) 27
2.2.10 目標文件復製(objcopy) 28
2.2.11 目標文件信息(objdump) 28
第3章 工程管理和make機製 33
3.1 make工具 33
3.2 Makefile的基本原則 34
3.2.1 Makefile的變量 34
3.2.2 Makefile的條件執行 36
3.2.3 Makefile中的函數 36
3.3 Makefile使用示例 39
3.3.1 簡單的Makefile 39
3.3.2 依賴關係實例 39
3.3.3 隱含規則的編譯實例 41
3.3.4 指定依賴的編譯實例 44
3.4 自動生成Makefile 46
3.4.1 autoconf工具介紹 46
3.4.2 automake工具介紹 46
3.4.3 其他工具 47
3.4.4 自動生成Makefile的流程 47
第4章 調試和GDB 49
4.1 嵌入式係統的調試技術 49
4.1.1 調試技術 49
4.1.2 硬件調試 50
4.1.3 代碼調試 51
4.2 Linux的基本信息 51
4.3 GDB調試和遠程調試 52
4.4 GDB的安裝與使用 57
4.4.1 使用gdbstub實現調試用戶程序 57
4.4.2 GDB和GDB Server的編譯 59
4.5 使用gdbserver調試 61
第5章 Linux係統的結構 65
5.1 Linux操作係統基本概念 65
5.1.1 Linux的進程信息 65
5.1.2 Linux的文件係統和文件信息 70
5.1.3 文件的另外三位屬性 71
5.2 Linux係統的組成和構建 72
5.2.1 Linux係統的組成 72
5.2.2 嵌入式Linux的構建 73
5.3 Linux係統的啓動流程 74
第6章 BootLoader及其構建 76
6.1 嵌入式Linux的BootLoader 76
6.1.1 BootLoader的開發要點 76
6.1.2 BootLoader的結構 78
6.2 U-Boot的使用 80
6.2.1 U-Boot概述 80
6.2.2 U-Boot的結構 81
6.2.3 U-Boot的生成 83
6.2.4 U-Boot的啓動流程 84
6.3 U-Boot的命令 86
6.3.1 U-Boot命令概述 86
6.3.2 增加命令 88
6.4 U-Boot的移植 91
6.4.1 U-Boot的移植概述 92
6.4.2 U-Boot的擴展 92
6.4.3 闆級支持 94
第7章 Linux內核及其構建 97
7.1 Linux內核概述 97
7.1.1 Linux內核結構 97
7.1.2 Linux源文件結構 98
7.2 嵌入式Linux的配置和編譯 99
7.2.1 Linux內核配置結構 99
7.2.2 Linux內核的配置 99
7.2.3 Linux內核的生成 107
7.3 Linux內核的啓動過程 108
7.4 特定係統的Linux的構建 114
7.4.1 Linux內核的移植 114
7.4.2 ARM處理器上運行的Linux係統 115
7.4.3 S3C6410 Linux內核的構建 117
7.4.4 S3C6410 Linux內核的移植內容 118
第8章 文件係統及其構建 123
8.1 Linux文件係統特性 123
8.2 Linux文件係統的結構 125
8.2.1 文件係統的主要接口 125
8.2.2 文件係統的實現 130
8.2.3 默認的公共實現 134
8.3 幾種Linux使用的文件係統 136
8.3.1 EXT 2/3(擴展文件係統2/3) 136
8.3.2 NFS(網絡文件係統) 136
8.3.3 ROMFS(隻讀文件係統) 137
8.3.4 CRAMFS(壓縮ROM文件係統) 137
8.3.5 JFFS2(日誌Flash文件係統) 138
8.3.6 YAFFS(另一種Flash文件係統) 138
8.3.7 UBIFS(非排序塊映像文件係統) 139
8.4 Linux文件係統的構建 140
8.4.1 根文件係統的結構 140
8.4.2 製作根文件係統映像 141
8.4.3 內核啓動中根文件係統的參數 142
第9章 Linux用戶空間的核心 143
9.1 嵌入式係統中的操作係統和係統關係 143
9.2 C語言庫 144
9.3 Shell工具Busybox 147
9.3.1 Busybox配置和編譯 148
9.3.2 Busybox的源代碼結構 150
第10章 Linux用戶空間的編程 152
10.1 Linux用戶空間編程概述 152
10.2 文件的相關內容 154
10.2.1 文件的打開、關閉和讀寫等 155
10.2.2 文件的控製、映射和查詢等 157
10.2.3 文件的其他操作 158
10.3 進程相關的內容 159
10.3.1 fork和exec 159
10.3.2 管道 161
10.3.3 System V IPC 162
10.3.4 POSIX IPC 165
10.4 信號相關的內容 166
10.5 pthread綫程 168
10.5.1 綫程的基本使用 169
10.5.2 綫程的屬性 171
10.5.3 綫程互斥量 172
10.5.4 綫程條件量 173
10.5.5 綫程取消 175
10.6 dlopen機製 176
10.6.1 dlopen的結構和意義 176
10.6.2 在C語言中使用dlopen 178
10.6.3 在C++中使用dlopen 180
第11章 Linux用戶空間的中間件 185
11.1 基於嵌入式Linux的係統與中間件 185
11.2 網絡協議相關 186
11.2.1 Linux套接字編程的基礎 186
11.2.2 TCP和UDP協議的流程 189
11.2.3 TCP編程實例 189
11.2.4 UDP編程實例 193
11.2.5 深入網絡編程 196
11.2.6 用作IPC的UNIX Socket 198
11.3 GUI應用開發 201
11.3.1 Qt係統 203
11.3.2 MiniGUI應用程序 209
11.3.3 MicroWindows(Nano-X Window) 216
11.4 數據庫 217
11.4.1 關於嵌入式數據庫 217
11.4.2 SQLite 218
第12章 Linux驅動基礎 228
12.1 Linux驅動概述 228
12.1.1 驅動的理念和結構 228
12.1.2 驅動程序對用戶空間的接口 230
12.2 設備文件和相關文件係統 230
12.2.1 設備文件 230
12.2.2 sys文件係統 231
12.2.3 proc文件係統 233
第13章 Linux的內核編程 237
13.1 Linux內核編程概述 237
13.2 內核模塊的編寫 237
13.2.1 Linux內核中的模塊 237
13.2.2 內核模塊的編譯結構 239
13.3 內核編程接口 241
13.3.1 Linux編程風格 241
13.3.2 Linux編程主要接口 242
第14章 Linux的驅動核心架構 248
14.1 用戶空間的接口 248
14.1.1 用戶空間的驅動調用接口 248
14.1.2 係統調用 248
14.1.3 驅動的主要調用函數 249
14.2 字符設備和塊設備的框架 250
14.2.1 文件操作file_operations 250
14.2.2 字符設備的基本框架 251
14.2.3 塊設備的框架 252
14.2.4 字符設備和塊設備的默認file_operations實現 254
14.3 網絡協議和網絡設備的框架 258
14.3.1 網絡係統的核心 259
14.3.2 網絡協議的實現 261
14.3.3 網絡設備的框架 263
14.4 proc文件係統的框架 264
14.4.1 proc文件係統的編程接口 264
14.4.2 proc文件係統的實現 266
14.5 sys文件係統的框架 266
14.5.1 sys文件係統的編程接口 266
14.5.2 sys文件係統的實現 267
第15章 Linux驅動的要點 269
15.1 驅動程序的核心實現 269
15.2 設備、驅動和資源 273
15.3 中斷的處理 276
15.4 中斷的下半部 277
15.4.1 軟中斷 277
15.4.2 軟中斷之tasklet 278
15.4.3 軟中斷之定時器 279
15.5 競態處理 280
15.5.1 自鏇鎖 280
15.5.2 信號量 280
15.6 阻塞處理 281
15.7 異步操作 282
第16章 幾個典型的簡單驅動 283
16.1 設備驅動概述 283
16.2 內存設備驅動 284
16.2.1 內存設備驅動的公共內容 284
16.2.2 空設備 286
16.2.3 零設備 287
16.2.4 滿設備 288
16.3 內存塊設備驅動 288
16.4 迴環塊設備驅動 291
16.5 迴環網絡設備驅動 294
第17章 幾個典型的驅動框架和相應的驅動 296
17.1 Misc驅動框架 296
17.2 幀緩衝驅動框架和具體驅動 297
17.2.1 幀緩衝驅動框架 297
17.2.2 虛擬幀緩衝驅動 300
17.2.3 針對硬件實現的幀緩衝驅動 302
17.3 輸入-事件驅動框架 305
17.3.1 輸入-事件驅動框架概述 305
17.3.2 針對硬件的事件驅動 307
17.4 GPIO驅動框架和具體驅動 310
17.4.1 GPIO驅動框架 310
17.4.2 GPIO具體硬件的驅動 312
17.5 Power Supply驅動框架和具體驅動 312
17.5.1 Power Supply驅動框架 312
17.5.2 Power Supply驅動 313
17.6 TTY驅動框架和驅動 314
17.6.1 TTY驅動框架 314
17.6.2 僞TTY驅動 316
17.6.3 串口TTY和虛擬TTY 316
第18章 MTD係統和驅動 318
18.1 MTD概述 318
18.2 MTD的核心 319
18.2.1 MTD的接口部分 320
18.2.2 MTD的核心實現部分 322
18.3 MTD的設備層 322
18.3.1 MTD字符設備 322
18.3.2 MTD塊設備 323
18.4 CFI硬件實現層 324
18.4.1 公用部分 324
18.4.2 ROM的MTD實現 325
18.4.3 RAM的MTD實現 325
18.4.4 Nor Flash的MTD實現 326
18.5 Nand Flash的硬件實現層 326
18.5.1 公用部分 326
18.5.2 GPIO的Nand Flash實現 327
18.5.3 處理器芯片上的Nand Flash實現 330
第19章 USB係統和驅動 331
19.1 USB概述 331
19.1.1 USB規範 331
19.1.2 USB的軟件係統 333
19.2 Linux的USB主機端支持 334
19.2.1 USB主機端的軟件結構 334
19.2.2 USB主機端的核心部分 335
19.2.3 USB驅動的實現 337
19.2.4 HCI的實現 339
19.3 Linux的USB設備端支持 340
19.3.1 USB設備端的軟件結構 340
19.3.2 Gadget的核心部分 340
19.3.3 Gadget驅動 342
19.3.4 UDC驅動的實現 345
第20章 SPI總綫和驅動 348
20.1 SPI概述 348
20.2 SPI總綫驅動的框架 349
20.3 簡單字符設備spidev 353
20.4 SPI主控製器的實現 355
20.4.1 GPIO實現的SPI主控製器 355
20.4.2 S3C64xx的SPI主控製器 356
20.5 SPI從設備的驅動 358
第21章 I2C總綫和驅動 361
21.1 I2C概述 361
21.1.1 基本概念 361
21.1.2 SMBus 362
21.2 I2C總綫驅動的框架 362
21.2.1 I2C核心框架 362
21.2.2 I2C總綫接口 367
21.2.3 I2C設備和驅動 368
21.3 具體的I2C主控製器 370
21.4 I2C從設備的驅動 372
第22章 PCI總綫和驅動 375
22.1 PCI概述 375
22.1.1 PCI的基本結構 375
22.1.2 PCI的總綫信號 377
22.1.3 PCI的總綫操作 378
22.1.4 PCI的總綫配置 379
22.1.5 PCI的發展和衍生標準 381
22.2 PCI總綫的驅動框架 381
22.3 PCI設備的驅動 384
22.3.1 PCI的樁實現 384
22.3.2 網卡的PCI實現 385
第23章 音頻係統和驅動 389
23.1 音頻係統概述 389
23.2 OSS架構 389
23.2.1 OSS係統的結構 390
23.2.2 OSS係統的核心 391
23.2.3 OSS係統的實現 392
23.3 ALSA架構 393
23.3.1 ALSA係統的結構 393
23.3.2 ALSA係統的核心 395
23.3.3 ALSA係統芯片層 395
23.3.4 ALSA的用戶空間 400
第24章 視頻係統和驅動 403
24.1 視頻係統概述 403
24.2 Video for Linux係統 403
24.2.1 基本結構 404
24.2.2 Video for Linux的核心結構 405
24.2.3 Video for Linux的其他方麵 410
24.2.4 Video for Linux驅動的接口 413
24.2.5 Video for Linux驅動的實現層 417
· · · · · · (
收起)