-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

嵌入式Linux軟件開發從入門到精通

( 簡體 字)
作者:呂雪峰、彭文波類別:1. -> 作業系統 -> Linux
譯者:
出版社:清華大學出版社嵌入式Linux軟件開發從入門到精通 3dWoo書號: 39383
詢問書籍請說出此書號!

缺書
NT售價: 245

出版日:8/13/2014 12:01:00 AM
頁數:390
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787302370833
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

1. 寫本書的緣由
  目前,隨著信息化、智能化、網絡化的發展,嵌入式系統技術也獲得了越來越廣闊的發展空間,與嵌入式Linux相關的需求層出不窮。由于3G行業持續升溫,各大企業對嵌入式專業人才的爭奪也日益激烈。在學習嵌入式Linux軟件開發的過程中,很多人有陷入錯綜復雜困境中的痛苦,也有解決問題后豁然開朗的快樂,但更多的,可能還是辛勤的耕耘。
  近來常見一些同仁在各論壇求問各種技術問題,有簡單的、復雜的,有獲得答案的,有多次求問仍不得其解的;同時看見身邊諸多初入行業的人員,走了很多彎路,經受了許多磨難,卻還是不得要領。
  其實,嵌入式Linux軟件開發只不過是一種應用技術,所以精通這門技術是相對容易的。它遵循“熟能生巧”的學習規律,至少在很多時候,并不需要諸如悟性之類的東西。簡單地說,嵌入式Linux軟件開發并不是一個無處下口的鐵饅頭。
  說到這里,不由得想起北宋歐陽修《賣油翁》的故事。
  陳康肅公堯咨善射,當世無雙,公亦以此自矜。嘗射于家圃,有賣油翁釋擔而立,睨之,久而不去。見其發矢十中八九,但微頷之。康肅問曰:“汝亦知射乎?吾射不亦精乎?”翁曰:“無他,但手熟爾。”康肅忿然曰:“爾安敢輕吾射!”翁曰:“以我酌油知之。”乃取一葫蘆置于地,以錢覆其口,徐以杓酌油瀝之,自錢孔入,而錢不濕。因曰:“我亦無他,惟手熟爾。”康肅笑而遣之。
  “無他,但手熟爾。”這句話概括了學習應用技術的特點,不用故作深沉。
  話雖如此,但應用技術都有一個特點,“奇技淫巧”一詞可概之,里面花巧繁多,不可勝數。就比如學習嵌入式Linux軟件開發這門技術,還是需要找到合適的門徑才可登堂入室。本書提供了一個由淺入深的途徑,使讀者能夠由茫然無知到了解,由了解到熟悉,由熟悉到精通,最后可開創自己的一片天地,能自由馳騁和飛翔。
2. 這本書適合誰
  本書適合即將進入嵌入式Linux軟件開發行業,或已進入嵌入式Linux軟件開發行業的初、中級軟件開發人員閱讀。
  本書除了給讀者提供嵌入式Linux軟件開發的一般技術外,還涉及一些高級主題,為讀者進一步學習提供參考,也可以為讀者解決實際問題提供直接的思路,甚至解決方案。
  本書重視實踐性,讓讀者能夠饒有興趣地跟著本書的內容嘗試著實踐,并將所學運用到實際工作中。
3. 需要的技術基礎
  為了更好地學習本書的內容,要求讀者:
* 熟悉C語言。雖然不要求能編寫很棒的C代碼,但是對C語言的熟悉會很有幫助。
* 有一些操作系統的基本知識。不要求熟悉操作系統的各方面,但是對內存、線程等術語有一定的感性認識會是很有幫助的。
* 熟悉Linux基本的操作,這是學習嵌入式Linux開發的基礎。
4. 本書使用的軟硬件環境
  本書的寫作盡量不依賴于任何具體的硬件平臺,但因嵌入式的特殊性,有時候問題卻實在無法避免。所以讀者如果在其他平臺上遇到了各種各樣的問題,可借鑒本書中解決問題的思路和方法去解決這些問題,如果能夠處理好,那這本書的寫作目的就已經實現。
  寫作本書所使用的宿主機軟硬件配置和開發板軟硬件配置如表1~3所示。
5. 本書的組織結構
  為了更好地使用本書,建議讀者從第1章開始按順序閱讀本書。當然,如果對某些主題感興趣,也可直接跳到相關的章節進行閱讀。
  為了防止大段大段的理論使讀者望而卻步,書中盡量從示例的演示開始講解,只在必要的時候才插入必需的理論說明,以幫助讀者理解。
  本書代碼下載地址為http://www.cnblogs.com/cbook/p/3404673.html。
6. 本書的約定
  本書寫作中所遵循的約定如下。
  (1) 宿主機是指運行Linux開發環境的計算機,安裝有交叉開發工具;主要執行程序的編制、編譯等工作。
  (2) 目標機是指運行嵌入式Linux的開發板或嵌入式設備。
  (3) 本書暫不講解驅動編程。因為驅動程序的編程比較復雜,同時與硬件密切相關。而且,在嵌入式產業鏈中,開發板廠家你方唱罷我登場的速度也很快,如果拘泥于哪個特定的開發板來演示驅動編程的實現,將會在內容的通用性方面大打折扣。
7. 其他
  本書由呂雪峰、彭文波編著,參與編寫工作的還有劉耀宗、萬建邦、鄧世健、趙曉芳。
  嵌入式Linux軟件開發其實包含了很廣泛的內容,希望本書能起到拋磚引玉的作用。
  由于篇幅有限,同時因為需要采用一個便于理解的主線來描述,以期降低理解的難度,再加上作者的知識與經驗有限,因此書中難免會有疏漏或者不妥之處,歡迎通過郵件進行交流,我們將盡量為讀者提供最滿意的解答。本書專用QQ群為297228619,服務郵箱是winpcap@126.com。

  

  
  
  
  
  

  
  
  
內容簡介:


  本書結合作者10多年的培訓和實踐經驗,通過簡明扼要的語言,以及實用的案例與方法,對嵌入式Linux應用開發中的關鍵技術點進行了深入淺出的講解。全書分為基礎篇、應用進階篇和實戰提高篇。
  本書內容從最簡單的案例開始,始終保持實用、易懂的風格,每個章節都設置了實踐操作案例,能夠幫助讀者快速掌握嵌入式Linux應用軟件的開發技能。
  本書主要面向對嵌入式Linux應用軟件開發感興趣的初學者,或需要進一步提升技能的開發者,也可作為高等院校計算機類、電子電氣類、控制類專業學生學習嵌入式Linux應用開發的教材。


目錄:

第1章 體驗嵌入式系統的魅力 1
1.1 嵌入式系統的定義 2
1.2 嵌入式系統的歷史與現狀 2
1.2.1 無操作系統階段 2
1.2.2 簡單操作系統階段 3
1.2.3 實時操作系統階段 3
1.2.4 面向Internet階段 3
1.3 嵌入式與非嵌入式的區別 4
1.4 從事嵌入式軟件開發的前景 4
1.4.1 優勢 4
1.4.2 從事嵌入式軟件開發的缺點 5
1.4.3 技術基本要求 6
1.5 嵌入式系統的體系結構 6
1.5.1 嵌入式處理器 6
1.5.2 嵌入式外圍設備 7
1.5.3 嵌入式操作系統 8
1.5.4 嵌入式應用軟件 9
1.6 ARM 9
1.7 延伸閱讀:嵌入式系統面臨的關鍵問題 10
1.8 小結 11
第2章 嵌入式Linux的前世今生 13
2.1 嵌入式Linux簡介 14
2.1.1 嵌入式Linux的優勢 14
2.1.2 嵌入式Linux面臨的挑戰 15
2.1.3 發展前景 16
2.1.4 Android 17
2.2 嵌入式Linux系統的軟件組成 17
2.2.1 引導加載程序 17
2.2.2 Linux內核 18
2.2.3 文件系統 19
2.2.4 用戶應用程序 21
2.3 嵌入式系統軟件研發的關鍵技術 21
2.3.1 開發流程 21
2.3.2 交叉編譯和鏈接 22
2.3.3 交叉調試 23
2.3.4 系統測試 25
2.4 系統啟動過程 26
2.5 延伸閱讀:開源、GPL與POSIX簡介 28
2.5.1 開源 28
2.5.2 GPL 29
2.5.3 POSIX 30
2.6 小結 32
第3章 零基礎安裝虛擬機與Linux操作系統 33
3.1 VMware Workstation的安裝 34
3.2 配置VMware Workstation并便捷安裝Fedora 16 36
3.3 配置VMware Workstation手動安裝Fedora 16 43
3.4 安裝Fedora 16 47
3.5 VMware Tools的安裝 52
3.6 使用已安裝好操作系統的虛擬機 56
3.7 延伸閱讀:打開Fedora 16的root賬號 58
3.8 小結 58
第4章 快速構建嵌入式Linux開發環境 59
4.1 安裝交叉編譯器 60
4.1.1 安裝交叉編譯器 60
4.1.2 建立鏈接 62
4.1.3 查看交叉工具是否安裝正確 63
4.2 構建開發板運行所需的環境 63
4.2.1 編譯一級啟動文件x-loader 63
4.2.2 編譯二級啟動文件U-Boot 65
4.2.3 編譯內核 67
4.2.4 制作文件系統鏡像 68
4.3 更新系統文件 69
4.3.1 更新文件從SD卡啟動 69
4.3.2 更新文件從NAND Flash啟動 70
4.4 小結 77
第5章 配置串口通信工具 79
5.1 配置Windows XP的超級終端 80
5.2 串口信息的捕獲 82
5.3 在Linux中配置Minicom 84
5.4 小結 88
第6章 配置NFS文件系統服務 89
6.1 查看宿主機上的安裝包 90
6.2 配置網絡文件系統NFS 91
6.3 啟動NFS服務 91
6.3.1 在Fedora 16下面運行service nfs start命令失敗 91
6.3.2 在Fedora 16下面運行service nfs-server start失敗 92
6.4 本機測試NFS 94
6.5 在開發板上測試NFS 94
6.5.1 常見的測試過程 94
6.5.2 NFS無法掛載的問題分析 95
6.6 小結 96
第7章 開始編寫第一個程序 97
7.1 在宿主機上編寫第一個程序 98
7.2 編寫開發板上的上第一個程序 99
7.3 小結 102
第8章 Linux開發入門必備私房菜 103
8.1 程序安裝目錄 104
8.2 頭文件 104
8.3 庫文件 104
8.4 gcc簡介 106
8.5 make簡介 107
8.6 小結 109
第9章 Shell:用戶與Linux溝通的橋梁 111
9.1 Shell是如何工作的 112
9.2 Shell的“兄弟姐妹” 113
9.3 必須熟悉的Shell命令 114
9.3.1 命令行 114
9.3.2 選項和參數 115
9.3.3 命令行特征 116
9.4 理解Shell中的特殊字符 116
9.4.1 通配符 116
9.4.2 引號 118
9.4.3 注釋符 119
9.5 暢通交流:標準輸入/輸出和重定向 120
9.5.1 標準輸入與輸出 120
9.5.2 輸入重定向 121
9.5.3 輸出重定向 122
9.5.4 管道 124
9.6 命令替換 124
9.7 實戰體驗:在Bash中的操作 125
9.7.1 命令和文件名擴展特性 125
9.7.2 命令行編輯 126
9.7.3 命令歷史 126
9.7.4 命令別名 128
9.8 定制Bash 129
9.9 小結 129
第10章 文本編輯利器Vi 131
10.1 Vi簡介 132
10.1.1 命令行模式 132
10.1.2 文本輸入模式 132
10.1.3 末行模式 132
10.1.4 模式之間的切換 133
10.2 Vi的進入與退出 133
10.2.1 Vi的進入 133
10.2.2 退出Vi 134
10.3 Vi中的行號 135
10.4 光標移動操作 136
10.5 按字移動光標 138
10.5.1 w和W命令 138
10.5.2 e和E命令 139
10.5.3 b和B命令 139
10.6 屏幕滾動 139
10.6.1 滾屏命令 139
10.6.2 分頁命令 139
10.6.3 狀態命令 140
10.7 屏幕調零命令 140
10.8 文本插入操作 140
10.8.1 插入(Insert)命令 140
10.8.2 打開(open)命令 141
10.9 文本修改 142
10.9.1 文本刪除 142
10.9.2 取消上一命令(Undo) 143
10.9.3 重復命令(Redo) 144
10.10 實現替換功能 145
10.11 小結 145
第11章 應知應會的基本函數 147
11.1 文件操作函數 148
11.1.1 文件的創建與打開操作 148
11.1.2 對文件進行讀寫 149
11.1.3 文件的關閉操作 150
11.1.4 改變文件讀寫偏移位置: lseek() 150
11.1.5 實例:文件的打開關閉、讀寫 與設置文件讀寫指針 151
11.1.6 文件描述符和流 152
11.1.7 文件控制操作函數fcntl() 154
11.1.8 控制設備文件參數的函數 ioctl() 154
11.1.9 文件的權限修改 154
11.1.10 文件的屬主與組群修改 156
11.1.11 獲得文件的狀態 157
11.1.12 文件的其他操作 160
11.2 目錄操作 161
11.2.1 創建和刪除目錄的函數 161
11.2.2 打開目錄 161
11.2.3 讀取目錄 162
11.2.4 關閉目錄 163
11.2.5 改變工作目錄的函數 163
11.2.6 取得當前的工作目錄 163
11.2.7 實例:文件列表程序 164
11.3 建立臨時文件 165
11.4 獲取進程號 170
11.5 獲取節點信息 170
11.6 小結 173
第12章 時間問題的處理 175
12.1 時鐘類型 176
12.1.1 硬件時鐘 176
12.1.2 系統時鐘 176
12.1.3 系統時鐘與硬件時鐘的關系 176
12.2 UTC、CST與GMT 176
12.3 Linux下常用的時間類型 177
12.3.1 time_t時間類型 177
12.3.2 struct tm時間類型 177
12.3.3 struct timeval時間類型 178
12.3.4 struct timespec時間類型 178
12.3.5 struct timezone 179
12.3.6 獲得自Epoch以來的秒數 179
12.4 獲得與修改系統時間 180
12.5 時間格式轉換 182
12.5.1 asctime函數 182
12.5.2 ctime函數 183
12.5.3 gmtime函數 184
12.5.4 localtime函數 185
12.5.5 mktime函數 186
12.6 使線程睡眠的時間函數 186
12.6.1 sleep函數 186
12.6.2 usleep函數 188
12.6.3 nanosleep函數 189
12.6.4 示例:為nanosleep()函數指定秒數和納秒數 190
12.6.5 alarm函數 192
12.7 延伸閱讀:其他函數 193
12.8 小結 194
第13章 簡單的網絡編程實戰 195
13.1 基礎知識 196
13.1.1 C/S與B/S結構 196
13.1.2 UDP/TCP協議 197
13.1.3 什么是Socket 198
13.2 UDP套接字編程實例 198
13.2.1 服務端 198
13.2.2 客戶端 200
13.2.3 編譯 202
13.2.4 運行結果 203
13.2.5 使用Wireshark捕獲數據包 203
13.2.6 UDP套接字網絡編程涉及的系統調用過程 204
13.2.7 建立Socket 206
13.2.8 配置Socket 206
13.2.9 數據傳輸 208
13.2.10 延伸閱讀:關閉Socket 209
13.3 TCP套接字編程實例 209
13.3.1 服務端 209
13.3.2 客戶端 212
13.3.3 編譯 214
13.3.4 運行結果 214
13.3.5 使用Wireshark捕獲數據包 215
13.3.6 TCP套接字網絡編程所涉及的系統函數 216
13.3.7 建立連接 217
13.3.8 數據傳輸 219
13.4 小結 220
第14章 簡單的線程操作實戰 221
14.1 為何嵌入式系統中進程不再是重點 222
14.1.1 進程與線程 222
14.1.2 線程的優勢 222
14.1.3 我們的問題 223
14.1.4 進程通信的統一方式:Socket通信 224
14.1.5 簡單的線程操作 224
14.2 創建線程 227
14.3 獲得本線程的標識符 228
14.4 結束線程 228
14.5 延伸閱讀:操作線程共享變量 229
14.6 小結 232
第15章 重點剖析:線程同步實例 233
15.1 互斥鎖 234
15.1.1 再談線程共享變量的操作 235
15.1.2 互斥鎖的創建 237
15.1.3 互斥鎖的銷毀 238
15.1.4 互斥鎖的操作 238
15.2 讀寫鎖 239
15.2.1 讀寫鎖實例 239
15.2.2 讀寫鎖的創建 241
15.2.3 獲取讀寫鎖中的讀鎖 242
15.2.4 獲取讀寫鎖中的寫鎖 243
15.2.5 解除鎖定的讀寫鎖 243
15.2.6 銷毀讀寫鎖 244
15.3 條件變量 245
15.3.1 忙等待 245
15.3.2 條件變量 247
15.3.3 條件變量的創建 249
15.3.4 條件變量的銷毀 249
15.3.5 條件變量的等待和激發 249
15.3.6 互斥鎖和條件變量的結合使用 250
15.4 線程死鎖 253
15.5 延伸閱讀:解決死鎖的方法 255
15.5.1 解決方法一 255
15.5.2 解決方法二 256
15.6 小結 258
第16章 進階私房菜:再談線程 259
16.1 線程參數的傳遞 260
16.1.1 單個參數傳遞 260
16.1.2 多個參數傳遞 261
16.2 線程私有數據 263
16.2.1 創建key 266
16.2.2 刪除key 267
16.2.3 讀寫key 267
16.3 修改線程屬性 267
16.3.1 可以修改的線程屬性 268
16.3.2 修改線程參數示例 271
16.4 延伸閱讀:線程池 275
16.4.1 為什么需要線程池 275
16.4.2 構建線程池框架 276
16.4.3 簡單的線程池示例 276
16.5 小結 285
第17章 進階私房菜:再談網絡編程 287
17.1 對SIGPIPE信號的處理 288
17.1.1 示例1:SIGPIPE信號的默認處理 288
17.1.2 示例2:重定義SIGPIPE信號的默認動作 293
17.1.3 示例3:忽略SIGPIPE信號 295
17.1.4 示例4:直接使用MSG_NOSIGNAL標識 296
17.2 修改Socket緩沖區的大小 297
17.2.1 setsockopt函數與getsockopt函數 297
17.2.2 示例:修改Socket緩沖區的大小 299
17.3 檢測服務器與客戶端的連接是否有效 302
17.4 服務器的多線程處理 304
17.4.1 客戶端 305
17.4.2 服務器 309
17.5 延伸閱讀:重新bind 312
17.5.1 TIME_WAIT的兩個作用 312
17.5.2 如何結束TIME_WAIT狀態 313
17.5.3 實現可立即重啟的服務器 314
17.6 小結 315
第18章 重點突破:網絡編程的字節流處理 317
18.1 面向字節流的分包問題 318
18.1.1 數據包的常見結構 318
18.1.2 線程間數據的交互——環形緩沖區的實現 319
18.1.3 環形緩沖區 319
18.1.4 封包與解包 328
18.1.5 網絡整合使用實例 329
18.1.6 錯誤數據包的測試 335
18.2 再談生產者與消費者的示例 346
18.3 小結 352
第19章 嵌入式B/S架構開發要點 353
19.1 幾種嵌入式Web服務器的比較 354
19.1.1 Boa 354
19.1.2 thttpd 354
19.1.3 Mini_httpd 355
19.1.4 Mongoose 355
19.1.5 Lighttpd 356
19.1.6 AppWeb 356
19.1.7 Apache 357
19.2 Boa簡介 357
19.3 移植與測試Boa的環境配置 358
19.4 Boa的移植 358
19.4.1 下載源代碼 358
19.4.2 編譯 358
19.4.3 安裝到開發板的Linux文件系統 360
19.4.4 配置 361
19.4.5 測試 361
19.5 使用CGI 363
19.5.1 簡介 363
19.5.2 配置目標板文件系統 363
19.5.3 編寫HelloCGI.c程序 364
19.5.4 交叉編譯 364
19.5.5 測試 364
19.6 復雜網頁測試 367
19.6.1 設置目標板文件系統/var/www的目錄結構 367
19.6.2 編制index.html 368
19.6.3 測試 369
19.7 小結 371
第20章 SQLite數據庫移植與實戰 373
20.1 SQLite的特性 374
20.2 SQLite的移植過程 374
20.2.1 移植的環境 374
20.2.2 移植步驟 375
20.3 如何使用Linux C操作SQLite 376
20.4 數據庫的并發訪問 379
20.5 小結 384
附錄A 網絡分析工具Wireshark的使用 385
  
  

  

  
  
  
  
  

  
  
  
序: