本教程是麵嚮嵌入式Linux學習和産品開發的入門教程,分上下兩冊。本書為下冊,分3篇,共16章,內容涵蓋Linux內核、設備驅動、係統整閤和産品化等方麵。其中,設備驅動部分是重點內容,從模塊編寫開始,深入淺齣地講述瞭驅動編寫的各個方麵;之後以Linux子係統為單位,分彆講述瞭各常用外設的驅動編寫或移植,如LED、GPIO、I2C、SPI、Input子係統、串口、聲卡、WiFi網卡和3G模塊等。
本 書由淺入深,結構閤理,實用性強,提供的範例稍加改動即可應用於實際項目。閱讀本書需要有一定Linux使用基礎,適閤於準備往驅動方嚮發展的嵌入式Linux開發工程師,也可作為高校非計算機專業高年級學生學習嵌入式Linux驅動的參考教材。
第1篇 嵌入式Linux內核驅動開發
第1章 Linux內核裁剪和定製………………………………………………………… 3
1.1 Linux內核開發簡介…………………………………………………………… 3
1.2 Linux源碼閱讀工具…………………………………………………………… 3
1.2.1 SourceInsight……………………………………………………………… 4
1.2.2 Eclipse ……………………………………………………………………… 6
1.2.3 Vim+ctags+cscope ……………………………………………………… 8
1.2.4 LXR ………………………………………………………………………… 8
1.3 Linux內核源碼………………………………………………………………… 10
1.3.1 目錄樹概覽………………………………………………………………… 10
1.3.2 快速確定主闆關聯代碼…………………………………………………… 12
1.4 Linux內核中的Makefile文件………………………………………………… 14
1.4.1 頂層Makefile …………………………………………………………… 15
1.4.2 子目錄的Makefile ……………………………………………………… 16
1.5 Linux內核中的Kconfig文件………………………………………………… 17
1.5.1 Kconfig基本語法………………………………………………………… 17
1.5.2 配置項和配置開關………………………………………………………… 20
1.6 配置和編譯Linux內核……………………………………………………… 21
1.6.1 快速配置內核……………………………………………………………… 21
1.6.2 內核配置詳情……………………………………………………………… 23
1.6.3 編譯內核…………………………………………………………………… 32
1.6.4 運行內核…………………………………………………………………… 37
1.7 Linux內核裁剪實例…………………………………………………………… 38
1.7.1 GPIO子係統配置………………………………………………………… 38
1.7.2 LED子係統配置………………………………………………………… 39
1.7.3 串口配置…………………………………………………………………… 40
1.7.4 USBHost驅動配置……………………………………………………… 40
1.7.5 USBGadget驅動配置…………………………………………………… 42
1.7.6 SD/MMC驅動配置……………………………………………………… 43
1.7.7 網卡驅動配置……………………………………………………………… 44
1.7.8 NFSClient配置………………………………………………………… 45
1.7.9 PPP撥號配置…………………………………………………………… 45
1.7.10 MTD配置……………………………………………………………… 46
1.7.11 UBIFS文件係統配置…………………………………………………… 47
1.7.12 CAN 驅動配置…………………………………………………………… 47
1.8 EPC-28x平颱內核快速編譯………………………………………………… 48
第2章 Linux設備驅動基礎………………………………………………………… 49
2.1 Linux內核模塊………………………………………………………………… 49
2.1.1 Linux和模塊……………………………………………………………… 49
2.1.2 編寫內核模塊……………………………………………………………… 49
2.1.3 最簡單的內核模塊………………………………………………………… 53
2.1.4 帶參數的內核模塊………………………………………………………… 54
2.2 Linux設備……………………………………………………………………… 56
2.2.1 Linux設備和分類………………………………………………………… 56
2.2.2 設備節點和設備號………………………………………………………… 56
2.2.3 設備的注冊和注銷………………………………………………………… 60
2.3 Linux設備和驅動……………………………………………………………… 62
2.3.1 驅動在Linux中的地位………………………………………………… 62
2.3.2 驅動的基本要素…………………………………………………………… 62
2.3.3 驅動和應用程序的差彆…………………………………………………… 63
2.3.4 驅動的入口和齣口………………………………………………………… 63
2.3.5 支持udev設備管理方法………………………………………………… 65
2.3.6 設備驅動的操作方法……………………………………………………… 70
2.4 字符驅動框架…………………………………………………………………… 74
2.4.1 字符驅動框架……………………………………………………………… 74
2.4.2 測試程序…………………………………………………………………… 78
2.5 第一個完整意義上的驅動……………………………………………………… 80
2.5.1 ioctl命令………………………………………………………………… 80
2.5.2 內核空間的ioctl ………………………………………………………… 82
2.5.3 用戶空間的ioctl ………………………………………………………… 82
2.5.4 LED驅動範例…………………………………………………………… 82
2.6 內核/用戶空間的數據交換…………………………………………………… 88
2.6.1 檢查地址的閤法性………………………………………………………… 88
2.6.2 往用戶空間傳遞數據……………………………………………………… 88
2.6.3 從用戶空間獲取數據……………………………………………………… 90
2.6.4 支持讀/寫的驅動範例…………………………………………………… 91
2.7 在驅動中使用中斷……………………………………………………………… 96
2.7.1 申請和釋放中斷…………………………………………………………… 96
2.7.2 中斷處理程序編寫………………………………………………………… 98
2.7.3 按鍵驅動…………………………………………………………………… 99
2.8 混雜設備驅動編程…………………………………………………………… 103
2.8.1 混雜設備和驅動………………………………………………………… 103
2.8.2 混雜設備驅動框架……………………………………………………… 104
2.9 I/O內存訪問………………………………………………………………… 107
2.9.1 靜態I/O映射…………………………………………………………… 107
2.9.2 動態I/O映射…………………………………………………………… 110
2.9.3 I/O內存訪問函數……………………………………………………… 110
2.10 Linux設備驅動模型………………………………………………………… 111
2.10.1 設 備…………………………………………………………………… 111
2.10.2 驅 動…………………………………………………………………… 113
2.10.3 總 綫…………………………………………………………………… 114
2.10.4 類………………………………………………………………………… 115
2.11 平颱設備和驅動……………………………………………………………… 117
2.11.1 資 源…………………………………………………………………… 117
2.11.2 平颱設備………………………………………………………………… 119
2.11.3 平颱驅動………………………………………………………………… 122
2.11.4 平颱驅動與普通驅動的差異…………………………………………… 123
2.11.5 平颱驅動範例…………………………………………………………… 124
第3章 LED 子係統和驅動………………………………………………………… 131
3.1 LED子係統驅動簡介………………………………………………………… 131
3.2 LED子係統的分層結構……………………………………………………… 131
3.3 LED設備的實現……………………………………………………………… 132
3.4 i.MX28平颱的LED設備…………………………………………………… 135
第4章 GPIO 驅動…………………………………………………………………… 138
4.1 GPIOLIB簡介………………………………………………………………… 138
4.2 GPIOLIB的內核接口………………………………………………………… 138
4.3 GPIOLIB的實現方法………………………………………………………… 139
4.4 驅動示例……………………………………………………………………… 141
第5章 輸入子係統和按鍵驅動……………………………………………………… 149
5.1 輸入子係統…………………………………………………………………… 149
5.1.1 輸入子係統構成………………………………………………………… 149
5.1.2 各事件管理器詳解……………………………………………………… 152
5.1.3 設備驅動………………………………………………………………… 154
5.2 驅動實現……………………………………………………………………… 158
5.2.1 電路和原理……………………………………………………………… 158
5.2.2 按鍵驅動實現…………………………………………………………… 159
第6章 I2C總綫和外設驅動………………………………………………………… 165
6.1 I2C子係統…………………………………………………………………… 165
6.1.1 I2C子係統的設計思路………………………………………………… 165
6.1.2 I2C子係統的實現……………………………………………………… 169
6.1.3 I2C子係統在/sys文件係統的信息…………………………………… 176
6.2 I2C驅動實現示例…………………………………………………………… 177
6.2.1 FM24C02A 驅動的設計思路…………………………………………… 177
6.2.2 添加FM24C02A 設備…………………………………………………… 178
6.2.3 實現FM24C02A 驅動…………………………………………………… 178
6.2.4 實現I2C驅動…………………………………………………………… 178
第7章 SPI總綫和外設驅動………………………………………………………… 185
7.1 硬件連接……………………………………………………………………… 185
7.2 SPI驅動架構簡析…………………………………………………………… 185
7.2.1 SPI核心層……………………………………………………………… 186
7.2.2 SPI主控製器驅動層…………………………………………………… 186
7.2.3 SPI設備驅動層………………………………………………………… 187
7.2.4 SPI數據傳輸…………………………………………………………… 191
7.3 SPINORFlash驅動………………………………………………………… 193
7.3.1 驅動實現………………………………………………………………… 194
7.3.2 配置和編譯……………………………………………………………… 195
7.3.3 測試塊設備……………………………………………………………… 196
7.4 SPI數碼管顯示驅動………………………………………………………… 197
7.4.1 電路原理………………………………………………………………… 197
7.4.2 驅動實現………………………………………………………………… 198
7.4.3 驅動編譯和測試………………………………………………………… 202
第8章 UART和SC16IS752驅動…………………………………………………… 204
8.1 UART驅動簡析……………………………………………………………… 204
8.1.1 重要數據結構…………………………………………………………… 204
8.1.2 UART驅動API………………………………………………………… 208
8.2 SC16IS752芯片和電路原理………………………………………………… 210
8.2.1 SC16IS752芯片介紹…………………………………………………… 210
8.2.2 電路原理………………………………………………………………… 212
8.2.3 驅動移植思路…………………………………………………………… 212
8.3 I2C接口驅動實現…………………………………………………………… 212
8.3.1 定義i2c_device_id ……………………………………………………… 212
8.3.2 添加注冊I2C設備……………………………………………………… 213
8.3.3 I2C驅動實現…………………………………………………………… 214
8.4 UART相關驅動……………………………………………………………… 214
8.4.1 信息描述和數據結構…………………………………………………… 214
8.4.2 底層操作函數和實現…………………………………………………… 215
8.4.3 probe函數和實現……………………………………………………… 219
8.4.4 uart_ops函數和實現…………………………………………………… 221
8.4.5 中斷處理………………………………………………………………… 230
8.5 串口測試……………………………………………………………………… 234
第9章 SGTL5000聲卡驅動移植…………………………………………………… 235
9.1 背景交代……………………………………………………………………… 235
9.2 電路原理圖…………………………………………………………………… 235
9.3 驅動移植……………………………………………………………………… 237
9.3.1 引腳設置………………………………………………………………… 237
9.3.2 添加SGTL5000I2C設備……………………………………………… 238
9.3.3 配置和編譯……………………………………………………………… 239
9.3.4 修正播放音頻的問題…………………………………………………… 239
9.4 音頻接口操作………………………………………………………………… 242
第10章 AP6181無綫網卡驅動移植……………………………………………… 247
10.1 硬件原理圖…………………………………………………………………… 247
10.2 驅動移植……………………………………………………………………… 248
10.2.1 修改引腳功能…………………………………………………………… 248
10.2.2 添加mmc設備………………………………………………………… 250
10.2.3 添加驅動源碼…………………………………………………………… 252
10.2.4 添加喚醒中斷…………………………………………………………… 252
10.2.5 添加上下電控製………………………………………………………… 253
10.2.6 修改內核配置文件……………………………………………………… 254
10.2.7 配置內核………………………………………………………………… 255
10.2.8 編譯內核、模塊驅動…………………………………………………… 256
10.3 使用網卡……………………………………………………………………… 256
10.3.1 加載驅動模塊…………………………………………………………… 256
10.3.2 連接到AP ……………………………………………………………… 257
第11章 SIM6320-PCIE3G模塊驅動移植…………………………………………… 260
11.1 驅動移植……………………………………………………………………… 260
11.1.1 添加驅動源碼…………………………………………………………… 260
11.1.2 配置內核………………………………………………………………… 260
11.2 PPP撥號上網……………………………………………………………… 262
第12章 嵌入式Linux和Bootloader ……………………………………………… 267
第13章 嵌入式Linux文件係統…………………………………………………… 290
第14章 Buildroot …………………………………………………………………… 301
第15章 OpenWRT ………………………………………………………………… 313
第3篇 産品化和創意
第16章 産品化和創意……………………………………………………………… 319
參考文獻 ……………………………………………………………………………… 334
令人驚喜的是,本書還花瞭相當大的篇幅來講解嵌入式係統的安全性。在當今互聯互通的時代,嵌入式設備的安全性問題日益凸顯。這本書從軟件和硬件兩個層麵,全麵介紹瞭常見的安全威脅以及相應的防護措施。例如,書中詳細講解瞭如何利用 SELinux 等安全機製來限製進程的權限,如何對敏感數據進行加密存儲,以及如何通過硬件加密模塊來提升係統的安全性。這些內容對於我理解和構建更加健壯、安全的嵌入式係統提供瞭寶貴的知識。
評分除瞭技術內容的深入,本書的組織結構也讓我受益匪淺。作者在編寫每一章節時,都力求做到邏輯清晰,層層遞進。在介紹一個新概念之前,都會先鋪墊相關的背景知識,並在講解過程中穿插大量的圖錶和代碼示例,幫助讀者更好地理解。而且,書中提供的每一個示例代碼都經過瞭精心的設計和驗證,不僅能夠直接運行,還能根據實際需求進行修改和擴展,這極大地提高瞭我的學習效率。
評分拿到這本《嵌入式Linux開發教程(下冊)》,我懷著一種既期待又略帶忐忑的心情翻開瞭它。期待是因為,之前已經認真研讀瞭它的上冊,對書中循序漸進的講解方式、清晰明瞭的案例以及作者深厚的功底留下瞭深刻的印象。這本書的齣現,無疑是對我持續深入學習嵌入式Linux開發的一次重要指引。然而,忐忑也隨之而來,因為“下冊”往往意味著難度和深度的雙重提升,我擔心自己能否完全消化其中的知識,能否真正掌握這些更為復雜和高級的開發技巧。 在閱讀過程中,我首先被書中對內核驅動模型深入淺齣的闡述所吸引。作者沒有簡單地羅列API,而是從 Linux 內核的整體架構齣發,詳細講解瞭各種驅動程序的編寫原理,包括字符設備、塊設備和網絡設備的驅動。每一個概念都配有詳實的僞代碼和實際的硬件平颱示例,讓我能夠清晰地理解抽象的理論是如何落地到具體的硬件上的。特彆是在講解中斷處理和同步機製的部分,書中通過多個生動形象的比喻,將原本枯燥的概念變得易於理解,讓我對如何編寫高效、穩定的驅動程序有瞭全新的認識。
評分在閱讀本書的過程中,我還有一個深刻的體會,那就是作者在強調理論知識的同時,也非常注重實踐能力的培養。書中提供瞭大量的配套實驗,涵蓋瞭從基礎的硬件調試到復雜的係統移植等各個方麵。我按照書中的步驟,一步步地完成這些實驗,不僅鞏固瞭書本上的知識,還鍛煉瞭我獨立解決問題的能力。很多時候,我會在實驗中遇到各種各樣的問題,但通過查閱書籍的講解和源代碼,我都能一一找到解決的辦法,這種成就感是無法言喻的。
評分讓我印象深刻的還有書中關於嵌入式係統調試技巧的詳盡介紹。調試是嵌入式開發中至關重要的一環,也是最容易讓人頭疼的環節。本書不僅介紹瞭 GDB 等常用調試工具的使用方法,更深入地講解瞭各種硬件調試技術,如 JTAG 接口、邏輯分析儀以及示波器等。書中提供的調試技巧和經驗,讓我能夠在遇到問題時,更快速、更準確地定位故障,大大縮短瞭調試時間,提高瞭開發效率。
評分本書對於嵌入式係統性能優化的講解,更是為我打開瞭一扇新的大門。隨著嵌入式設備功能的日益豐富,對係統性能的要求也越來越高。書中詳細介紹瞭各種性能優化的策略,包括代碼優化、內存管理優化、中斷優化以及功耗優化等。作者通過具體的案例,展示瞭如何通過分析係統瓶頸,並采取相應的優化措施來提升係統的整體性能,這對於我日後開發高性能嵌入式應用提供瞭重要的指導。
評分本書在實時性方麵的論述也是一大亮點。嵌入式係統往往對實時性有著嚴苛的要求,而 Linux 內核本身並非一個嚴格的實時操作係統。這本書卻巧妙地解決瞭這個矛盾,書中詳細介紹瞭如何利用 Linux 內核的實時擴展(PREEMPT_RT)來滿足實時性需求,並對實時調度算法、定時器精度以及中斷延遲等關鍵技術進行瞭深入剖析。通過書中提供的實驗代碼,我能夠親手體驗到實時補丁帶來的性能提升,這對於開發需要精確時間控製的工業控製、醫療設備等應用至關重要。
評分隨著閱讀的深入,我對本書在網絡編程方麵的講解尤為贊賞。在嵌入式開發中,網絡通信是繞不開的話題,而這本書恰好在這方麵提供瞭非常詳盡的指導。書中不僅介紹瞭 Socket 編程的基本概念和常用 API,更深入地探討瞭 TCP/IP 協議棧的工作原理,以及如何在 Linux 內核層麵進行網絡相關的開發。我尤其對書中關於多綫程、多進程網絡服務器的設計與實現部分印象深刻,作者通過一個實際的案例,一步步地指導我如何構建一個能夠處理高並發請求的網絡服務,這對於我將來開發分布式係統或者物聯網設備具有重要的指導意義。
評分我尤其喜歡書中關於嵌入式 GUI 開發的章節。雖然不是所有的嵌入式項目都需要圖形用戶界麵,但對於許多消費類電子産品而言,良好的用戶體驗至關重要。本書介紹瞭 Qt for Embedded 和 LVGL 等主流的嵌入式 GUI 框架,並詳細講解瞭如何利用這些框架來創建美觀、交互性強的用戶界麵。書中提供的實例,讓我能夠快速上手,構建齣具有專業水準的嵌入式圖形界麵,這對於我之前在 UI 設計方麵比較薄弱的環節,有瞭很大的提升。
評分總而言之,《嵌入式Linux開發教程(下冊)》是一本集理論深度、實踐指導和前沿技術於一體的優秀教材。它不僅係統地梳理瞭嵌入式Linux開發中關鍵的技術環節,更重要的是,它教會瞭我如何將這些知識融會貫通,並應用到實際的開發項目中。這本書對我而言,不僅僅是一本技術書籍,更像是一位經驗豐富的導師,在我不斷探索嵌入式Linux世界的道路上,給予我持續的支持和引導。我堅信,這本書將成為我未來嵌入式開發生涯中不可或缺的參考資料。
評分學習
評分不錯的參考書
評分隻是沒想到這書是周立功飛思卡爾阿木的指導書
評分買瞭上下兩冊,內容很仔細就是紙質差瞭點。
評分還沒打開看,搞活動買的,公司用,應該還行
評分學習
評分還沒打開看,搞活動買的,公司用,應該還行
評分書質量不錯,書讀快
評分買瞭上下兩冊,內容很仔細就是紙質差瞭點。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有