內容簡介
《Linux嵌入式設計》主要內容有:產品架構;如何與正在運行的守護進程對話;如何創建和保護守護進程;範例產品laddie;日誌和事件處理;基於Web的用戶界面;命令行界面(CLI);前端面板界面;幀快取界面,包括紅外遙控;SNMP界面,包括工具、MIB和代理。
《Linux嵌入式設計》適用於Linux產品的開發人員,有興趣的讀者可以以《Linux嵌入式設計》中所包含的原型產品為基礎設計自己的Linux產品。對於那些打算儘快將守護進程的用戶界面移植到不同的作業系統或不同的程式語言上的讀者,《Linux嵌入式設計》也有一定參考價值。
編輯推薦
現代嵌入式產品是包括處理器、作業系統和套用軟體的複雜設備。有些書講述如何在嵌入式硬體上運行Linux。還有一些書講述如何創建Linux應用程式,而《Linux嵌入式設計》是第一本描述如何結合兩者開發Linux嵌入式產品的圖書。您將親身體會到為何LiNUX能夠成為低成本和快速開發的最佳選擇。
《Linux嵌入式設計》介紹了如何開發良好的嵌入式產品——具有更多類型的界面和更多動態界面更好的已調試界面。您將學會如何創建後端程式、如何處理異步事件。以及如何將各種用戶界面(包括網路、幀快取、紅外控制、SNMP和前端面板)連線到這些進程。從而實現遠程配置和操作。書中同時也介紹了運行時訪問庫(Run—timeAccessLibrary),該庫為用戶界面提供了一種與守護進程通信的統一機制。
從《Linux嵌入式設計》能夠學到:
將用戶界面從守護進程中分離出來;
讓用戶界面在運行時可以訪問配置、狀態和統計數據;
為應用程式添加網路管理功能;
使用SNMP和創建MlB:
創建基於網路的產品界面;
創建命令行界面;
創建以紅外控制為輸入的幀快取界面:
命令行界面(CLI);
管理產品中的日誌和警報信息。
目錄
第1章 產品體系結構 1
1.1 用戶界面和守護進程 2
1.1.1 守護進程 2
1.1.2 用戶界面 3
1.1.3 進程間通信 4
1.2 Laddie產品的體系結構 4
小結 5
第2章 管理守護進程 6
2.1 管理守護進程的通用方法 7
2.1.1 基於檔案的管理 7
2.1.2 基於守護進程的Web界面 8
2.1.3 全能方法 8
2.2 控制和狀態協定 9
2.2.1 控制和狀態協定的要求 11
2.2.2 通用控制和狀態協定 11
小結 15
第3章 使用實時訪問 17
3.1 RTA產品體系結構 17
3.2 RTA守護進程體系結構 18
3.3 將列和表告知RTA 19
3.3.1 列 19
3.3.2 表 22
3.4 創建第一個RTA程式 23
3.4.1 問題描述 23
3.4.2 回顧代碼 23
3.4.3 安裝RTA 28
3.4.4 編譯和連線 29
3.4.5 測試 29
3.5 一些SQL命令 31
3.5.1 SELECT 31
3.5.2 UPDATE 32
3.5.3 WHERE 32
3.5.4 LIMIT 32
3.6 RTA內置表介紹 33
3.6.1 rta_dbg 33
3.6.2 rta_stat 34
3.6.3 rta_tables 34
3.6.4 rta_columns 34
3.7 RTA表編輯器 35
小結 37
第4章 創建守護進程和保證守護進程安全 39
4.1 如何創建守護進程 39
4.1.1 載入守護進程配置數據 40
4.1.2 進入後台 40
4.1.3 成為進程和會話頭(sessionleader) 41
4.1.4 設定工作目錄 43
4.1.5 重定向stdin、stdout和stderr 43
4.1.6 創建日誌 44
4.1.7 設定組ID和用戶ID 44
4.1.8 檢查pidfile 45
4.1.9 設定umask 48
4.1.10 創建信號處理器 48
4.2 如何保證守護進程安全 49
4.2.1 設計安全的守護進程 49
4.2.2 編寫安全的守護進程 50
4.2.3 降低攻擊的破壞程度 52
4.3 原型守護進程 54
小結 54
更多參考書目 55
第5章 範例產品:LADDIE報警系統 56
5.1 報警系統簡介 57
感測器 57
5.2 Laddie功能特徵 59
5.2.1 ladd的配置和狀態 59
5.2.2 ladd的警報處理 61
5.3 Laddie硬體設計 62
5.4 Laddie軟體設計 64
5.4.1 appInit()回調子程式 64
5.4.2 poll_timeout()回調子程式 65
5.4.3 user_update()回調子程式 67
5.5 創建和測試ladd 68
小結 69
第6章 日誌 71
6.1 是否需要日誌 71
6.2 日誌系統的體系結構 72
6.2.1 信息源 73
6.2.2 信息路由 73
6.2.3 信息目的地 74
6.3 syslog 76
6.3.1 syslog體系結構 76
6.3.2 使用syslog 76
6.3.3 syslog協定 78
6.3.4 使用syslogd守護進程 79
6.3.5 局限、優點和syslogd的替代程式80
6.4 按需定製的日誌 81
小結 82
第7章 Laddie事件處理 84
7.1 新事件處理系統的基本原理 85
7.2 logmuxd的特性和功能 86
7.3 配置logmuxd 87
7.3.1 logmuxd源 87
7.3.2 logmuxd過濾器和重寫 88
7.3.3 logmuxd目的地 90
7.4 使用logmuxd的範例 90
7.4.1 範例1:logmuxd示範 90
7.4.2 範例2:logmuxd和已接受TCP連線 91
7.4.3 範例3:logmuxd和SNMP陷阱 94
小結 96
第8章 設計Web界面 97
8.1 Web基礎知識 98
8.1.1 DNS和TCP 98
8.1.2 webserver 99
8.1.3 CGI 99
8.1.4 JavaScript 99
8.1.5 發展中的技術 99
8.2 確定產品Web界面的需求 99
8.3 選擇webserver 100
8.3.1 選擇 100
8.3.2 使用PHP 100
8.3.3 個案研究:LinksysWRT54G無線路由器 101
8.3.4 個案研究:TUXwebserver 101
8.3.5 webserver比較 101
8.4 UI設計 105
8.4.1 選單系統 105
8.4.2 對話框 106
8.4.3 錯誤信息 107
8.4.4 使用Ajax提高回響速度 109
8.5 實現 109
8.5.1 與守護進程互動 110
8.5.2 報警狀態網頁 112
8.5.3 報警設定網頁 113
8.5.4 網頁版面設計和選單系統 114
8.5.5 webserver無關性 115
8.5.6 使用Ajax進行異步更新 116
8.6 改進我們的設計 121
8.7 資源 122
小結 122
第9章 設計命令行界面 124
9.1 為什麼需要CLI 124
9.1.1 安全性 125
9.1.2 實用性 125
9.1.3 頻寬 125
9.1.4 腳本化能力 125
9.1.5 配置備份和恢復 126
9.2 CLI的類型 126
9.2.1 句子 127
9.2.2 嚮導 127
9.2.3 選單 128
9.2.4 有狀態的 128
9.2.5 字元界面與線界面的比較 129
9.3 讓用戶可以訪問CLI 129
9.4 LaddieCLI 129
9.4.1 Laddie命令匯總 130
9.4.2 setlogson 130
9.4.3 dump 131
9.4.4 help 131
9.5 測試命令的代碼研究 132
9.5.1 CLI辭彙表:token.l 132
9.5.2 CLI語法:syntax.y 133
9.5.3 C代碼 133
9.5.4 代碼研究註解 134
小結 134
第10章 創建前端面板界面 135
10.1 按鈕、LED和LCD 135
10.1.1 按鈕 136
10.1.2 LED 138
10.1.3 LCD 138
10.2 設計前端面板UI 139
10.2.1 簡單化 140
10.2.2 嘗試、失敗、再次嘗試 140
10.2.3 使用LCD選單和模式 141
10.2.4 快速回響 142
10.3 Laddie前端面板 144
10.3.1 Laddie的LCD選單系統 145
10.3.2 Laddie前端面板硬體 146
10.3.3 Laddie前端面板UI 149
10.4 改進我們的設計 152
小結 152
第11章 設計幀快取界面 154
11.1 視頻記憶體的工作原理 155
11.1.1 視頻記憶體中的位元組是如何被解釋的 155
11.1.2 視頻記憶體是如何被映射到顯示屏上的 157
11.2 Linux幀快取設備驅動程式 158
11.2.1 使用open、read、write和close操作幀快取 158
11.2.2 使用ioctl命令配置幀快取 159
11.2.3 一個簡單幀快取圖形程式 161
11.3 圖形庫 165
11.4 使用SDL創建“Hello,world!”範例 166
11.4.1 初始化庫 167
11.4.2 初始化幀快取 167
11.4.3 創建一個surface 168
11.4.4 顯示surface 168
11.4.5 處理事件 168
11.5 圖形UI工具包 169
11.5.1 使用STBmenu創建簡單UI 170
11.5.2 使用STBmenu創建“Hello,world!”範例 173
11.6 Laddie幀快取UI 176
小結 178
第12章 紅外遙控器 180
12.1 使用紅外線進行通信 180
12.1.1 編碼遙控命令的協定 181
12.1.2 通過調製減少對紅外線信號的干擾 182
12.1.3 使用紅外線控制產品 183
12.2 遙控接收器的硬體 183
12.2.1 探測和解調紅外線信號 183
12.2.2 解碼遙控波形 184
12.2.3 Laddie產品的紅外線遙控硬體 186
12.3 為Laddie產品安裝和配置LIRC 189
12.3.1 安裝LIRC軟體 190
12.3.2 配置lirc_serial核心設備驅動程式 191
12.3.3 測試lirc_serial驅動程式 193
12.3.4 配置lircd守護進程 195
12.3.5 測試lircd守護進程 197
12.3.6 配置應用程式的LIRC工具 198
12.3.7 控制Laddie產品 199
小結 200
第13章 SNMP實踐概述 202
13.1 快速瀏覽術語 203
13.2 軟體 204
13.3 安裝SNMP 204
13.3.1 下載和安裝 204
13.3.2 檢查安裝 205
13.3.3 配置代理 205
13.3.4 啟動代理 206
13.4 探索SNMP 206
13.4.1 可讀性強的MIB檔案名稱 208
13.4.2 聯網印表機 209
13.4.3 snmptable命令 209
13.4.4 MIB-2:TCP連線表 210
13.4.5 MIB-2:UDP表 211
13.4.6 MIB-2內容 212
13.5 使用SNMP寫入值 213
13.5.1 設定sysContact 213
13.5.2 設定sysName 215
13.6 SNMP陷阱 216
13.6.1 使用snmptrapd接收陷阱 216
13.6.2 攜帶數據的陷阱:linkUp和linkDown 218
小結 220
第14章 設計SNMPMIB 221
14.1 我們的目標 221
14.2 企業編號 222
14.3 MIB檔案 223
14.4 LADDIE-GROUP-SMI 224
14.5 創建LAD-MIB 227
14.5.1 模組定義 228
14.5.2 版本號和防區數 230
14.5.3 警報表 232
14.5.4 陷阱 234
14.6 驗證MIB 235
小結 236
第15章 實現你的SNMPMIB 237
15.1 Net-SNMP代理 238
15.2 MIB框架——mib2c 241
15.3 頭檔案——ladProject.h 242
15.4 代碼檔案——ladProject.c 243
15.4.1 包含 243
15.4.2 基準OID 244
15.4.3 MIB對象定義 244
15.4.4 RTA訪問函式 247
15.4.5 初始化函式 249
15.4.6 標量 250
15.4.7 讀警報表 252
15.4.8 寫警報表 255
15.5 重訪Makefile 258
15.6 調試 259
15.7 陷阱 260
小結 260
附錄A RTA參考資料 262
A.1 RTA概述 263
A.2 RTA常量 264
A.3 數據結構 264
A.4 API子程式 268
A.4.1 dbcommand()子程式 268
A.4.2 rta_add_table()子程式 269
A.4.3 SQL_string()子程式 270
A.4.4 rta_config_dir()子程式 270
A.4.5 rta_save()子程式 271
A.4.6 rta_load()子程式 271
A.5 SELECT和UPDATE語法 272
A.5.1 SELECT命令 272
A.5.2 UPDATE命令 273
A.6 內部RTA表 274
A.6.1 rta_tables表 274
A.6.2 rta_columns表 275
A.7 調試配置 275
A.8 錯誤信息 276
A.8.1 SQL請求信息 276
A.8.2 內部調試信息 277
A.9 回調函式 278
A.9.1 讀回調函式 278
A.9.2 寫回調函式 279
附錄B SNMP綜述 280
B.1 為什麼使用SNMP 280
B.2 代理和管理器 281
B.3 名字空間、語法和協定 281
B.4 MIB 281
B.5 OID 282
B.6 MIB-2 283
B.7 SMI 285
B.8 SNMP協定 286
B.8.1 基本命令:GET、SET和GETNEXT 286
B.8.2 使用GETNEXT遍歷MIB 286
B.8.3 陷阱和通告 287
B.8.4 命令行工具:範例 287
B.9 SNMPv1、SNMPv2和SNMPv3 288
B.10 SNMP數據類型 289
B.11 SNMP表 290
B.12 定義新類型 291
B.13 MIB檔案的結構 292
小結 294
附錄C 安裝幀快取設備驅動程式 295
C.1 為你的視頻卡尋找幀快取設備驅動程式 295
C.1.1 vesafb驅動程式 296
C.1.2 硬體相關驅動程式 296
C.1.3 沒有包含在Laddie光碟中的驅動程式 297
C.2 配置幀快取設備驅動程式 297
C.2.1 vesafb驅動程式 298
C.2.2 硬體相關驅動程式 299
附錄D DB-To-File工具 301
D.1 概述 301
D.2 表定義 302
D.2.1 tbl2file表 302
D.2.2 tbl2field表 303
D.3 tbl2filed範例 304
D.4 安全注意事項 305
附錄E Laddie產品可啟動光碟306
E.1 運行Laddie產品 306
E.1.1 啟動光碟 307
E.1.2 操作幀快取用戶界面 307
E.1.3 訪問Web界面 307
E.1.4 體驗Linuxshell和其他用戶界面 308
E.1.5 關閉Laddie產品 308
E.2 了解光碟內容 308
E.2.1 Laddie產品原始碼 309
E.2.2 Laddie產品庫 310
E.2.3 啟動腳本 310
E.2.4 LinuxFrom-Scratch發行版及附加軟體包 310
E.3 重新編譯Laddie產品 311
……