-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
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書號: 41421
詢問書籍請說出此書號!

缺書
不接受訂購

出版日:5/1/2015
頁數:806
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
不接受訂購
ISBN:9787111497912
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

寫這本書

近年來,以嵌入式技術為基礎的物聯網產業正如火如荼地發展,就業需求和薪資待遇年年看漲。許多學校和培訓機構紛紛開設了嵌入式相關的課程,但這些課程的實踐環節往往存在以下幾個方面的問題:

過于偏重理論,缺乏對實踐環節的指導。

有實踐環節,但內容過于簡單,流于表面。

有實踐環節,但移植實踐部分討論的內容不完整。

由于存在上述的問題,通過這些課程培養出來的學生往往滿足不了企業的真正需求。因此,相關學員也很難圓高薪就業的夢想。

本書力求為上述三個問題尋求解決方案:第一,在注重理論知識的前提下,堅持以實踐環節為本書內容的主體,從實踐中提煉理論知識,以源碼分析作為移植實踐的依據;第二,絕不做淺嘗輒止的實踐,絕不停留于只求在某個開發板上做出某個簡單的效果,而是從對多個開發板的移植實踐中提煉出更一般性的方法;第三,力求做到功能完善的系統移植。雖然嵌入式系統往往需要根據需求對功能進行裁剪,但為了打造一本面向廣大嵌入式工程師和愛好者的書,筆者還是決定向讀者介紹更多功能的移植方法,以讓本書可以作為一本工具書常備、常用。

讀者對象

這里可以根據軟件需求來劃分本書的讀者:

Linux系統愛好者

嵌入式u-boot移植工程師

嵌入式Linux移植工程師

Linux驅動開發工程師

嵌入式應用開發工程師

高校相關課程的教師與學生

參加嵌入式職業培訓的人員

如何閱讀本書

本書共23章,分為四篇。

第一篇為緒論篇(第1章)。本篇只有一章內容,從整體上簡單地介紹了嵌入式系統架構,并探討了系統移植環境的搭建方法。本章中的所有內容均以介紹和指導實踐為主,讀者僅需了解相關的概念,之后自會在移植實踐過程中有深刻體會。

第二篇為u-boot移植篇(第2∼5章)。從緒論篇中得知,嵌入式系統的移植首先需要完成的工作是啟動加載程序的移植,由于本書是以實踐為目的,因此選擇了嵌入式系統最為常用的u-boot作為移植的依據。 本篇首先介紹u-boot工程與編譯系統以及u-boot啟動流程等基礎知識,并深入源碼進行詳細分析。讀者在掌握這些基礎知識后,可以參照使用ARM9/S3C2440芯片的開發板和使用ARM11/S3C6410芯片的開發板這兩個實例進行系統的u-boot移植實戰。由于力求深入與完整,移植實戰涵蓋了從最初的啟動代碼到各種常見驅動的移植,并在最后整合所有的移植功能,完成一個功能強大的啟動菜單。所有的移植代碼和相關資源均可在本書配套資源文件中找到。

第三篇為Linux內核移植篇(第6∼18章)。本篇是本書的核心內容,與第二篇類似,在正式開始內核移植前,首先介紹Linux內核工程及其編譯系統、Linux內核相關的調試技術,以及Linux內核的啟動流程,為內核移植的講解打下基礎。然后以使用ARM9/S3C2440芯片的開發板和使用ARM11/S3C6410芯片的開發板為例,進行徹底的系統移植。

第四篇為應用程序移植篇(第19∼23章)。在完成操作系統底層移植后,為了能在開發板上實現具體的應用,安排了本篇內容。本篇將從嵌入式圖形界面移植、嵌入式多媒體移植、嵌入式數據庫移植、嵌入式Web服務器移植和嵌入式JVM移植等方面介紹嵌入式應用程序的實踐過程。

勘誤和支持

由于作者的水平有限,編寫時間倉促,書中難免會出現一些錯誤或者不準確的地方,懇請讀者批評指正。為此,特意創建一個在線支持與應急方案的二級站點http://book.blendercn.org。你可以將書中的錯誤發布在Bug勘誤表頁面中,同時如果你遇到任何問題,也可以訪問Q&A頁面,我將盡量在線上為你提供最滿意的解答。書中的全部資源文件除可以從華章網站(www.hzbook.com)下載外,還可以從我創建的這個站點下載,我也會將相應功能的更新及時更正出來。如果你有更多的寶貴意見,也歡迎發送郵件至郵箱lightfather@gmail.com,期待能夠得到你們的真摯反饋。

致謝

首先要感謝偉大的Linux創始人Linus Torvalds,是他開創了一款影響整個嵌入式行業的操作系統。

感謝成都國嵌信息技術有限公司,尤其要感謝國嵌的謝偉老師,是他建議我將自己的嵌入式移植實戰經驗編寫成書,他不僅是一位知識淵博的老師,也是一位實戰經驗豐富的嵌入式工程師。在編寫本書的過程中,得到了謝偉老師很多寶貴的建議。

感謝全國眾多的國嵌學員,我們曾經常在一起討論本書應該以什么形式編寫,正是這些源自潛在讀者的寶貴建議,促成了本書以移植實踐為目的的寫作動機。

感謝機械工業出版社華章公司的編輯姜影老師,在這一年多的時間中始終支持我的寫作,她的鼓勵和幫助引導我能順利完成全部書稿。

謹以此書獻給眾多熱愛嵌入式Linux的朋友們!



范展源
內容簡介:

是嵌入式Linux領域的里程碑之作,它為Linux系統的移植提供了系統的、一站式的學習方案,已經在數萬學員中被檢驗并獲得高度認可。作者是該領域具有近10年經驗的技術專家,而且一直在開發一線和教學一線,深諳企業需求和讀者需求。它在內容上有3大特點:
第一,內容全面:涉及Linux系統移植的各個層面,包括啟動加載程序、Linux內核、Linux應用程序等;
第二,內容深入:提供了完整的源碼分析和深入的理論講解,包含啟動加載程序、Linux內核的編譯系統等各方面;
第三,結合生產實踐:分別提供對使用ARM9/S3C2440和ARM11/S3C6410兩款處理器的開發板移植過程的詳細實錄。
全書一共23章,分為四個部分:
第一部分:準備工作(第1章)
詳細介紹了嵌入式系統的硬件架構、軟件架構以及嵌入式Linux移植環境的搭建,為后面的學習做好準備工作;
第二部分:u-boot移植(第2~5章)
系統講解了u-boot工程與編譯系統,詳細分析了u-boot的啟動流程,全方位演示了如何在ARM9/S3C2440和ARM11/S3C6410上移植u-boot,實戰性極強,能讓讀者舉一反三。
第三部分:Linux內核移植(第6~18章)
首先從源碼的角度講解與分析了Linux內核的架構、編譯、配置、調試以及完整的啟動流程;其次介紹了Linux內核移植的準備工作和最小系統的構建;緊接著深度地講解了Linux網卡驅動、混雜設備驅動、I2C驅動、SPI驅動、Nand Flash驅動、SD/MMC卡驅動、LCD驅動、觸摸屏驅動、聲卡驅動、USB驅動等幾乎所有驅動的完整移植方法和過程,這是迄今為止最翔實的關于Linux設備驅動移植的資料之一。
第四部分 應用程序移植(第19~23章)
從工程實踐的角度深入講解了嵌入式Qt、嵌入式多媒體程序、嵌入式數據庫、嵌入式JVM等核心Linux應用程序的移植。

隨著物聯網時代的到來,市場對各類智能設備的需求也日漸高漲。智能設備的核心技術是集成電路芯片和嵌入式操作系統,而嵌入式操作系統更可以稱為是智能設備的靈魂。多年來,Linux系統因為其開源免費、安全穩定、社區支持豐富和移植裁剪方便等特點一直備受全球各大設備廠商的青睞,當仁不讓地成為眾多嵌入式操作系統中最耀眼的明星。在智能手機大行其道的今天,Android系統牢牢占據著80%以上的市場份額,而在Android系統華麗的外衣之下,依然是Linux系統強有力的支撐。
智能設備的發展并沒有止步在智能手機,而是快速朝著智能可穿戴設備、智能家居和車聯網等方向擴張。但要想把Linux系統移植到這些外設豐富并且處理器架構各異的設備中,對于初級工程師而言也并非易事,因為這不僅要求工程師熟悉C、匯編等編程語言,了解基本的硬件操作方法和協議規范,還要求工程師對Linux的內核架構、編譯系統、調試方法以及各個子系統的源碼結構有所理解。為了讓讀者能夠順利具備Linux系統移植的能力,本書被設計為一站式學習教程,即:
涉及Linux系統各個層面的移植,包括啟動加載程序、Linux內核、Linux應用程序等;
提供深入的理論講解和完整的源碼剖析,同時也分析了啟動加載程序和Linux內核的編譯系統;
分別提供對使用ARM9/S3C2440和ARM11/S3C6410兩款處理器的開發板移植過程的詳細實錄,以最為人性化的方式讓讀者理解整個移植過程中代碼和系統功能的變遷。
目錄:

前言

緒論篇

第1章嵌入式系統架構與移植環境搭建2

1.1 嵌入式系統硬件架構2

1.1.1 微處理器3

1.1.2 總線4

1.1.3 存儲器5

1.2 嵌入式系統軟件架構6

1.3 嵌入式Linux移植環境搭建7

1.3.1 Ubuntu開發平臺7

1.3.2 搭建交叉編譯環境8

1.3.3 獲取內核9

1.3.4 獲取啟動加載器9

1.3.5 配置必要服務9

1.3.6 PuTTY的安裝和配置12

1.4 本章小結12

u-boot移植篇

第2章u-boot工程與編譯系統14

2.1 u-boot介紹14

2.1.1 u-boot工程簡介15

2.1.2 u-boot源碼結構15

2.1.3 u-boot的配置編譯16

2.2 u-boot常用命令與測試18

2.2.1 獲取幫助18

2.2.2 環境變量相關命令19

2.2.3 網絡命令20

2.2.4 Nand Flash操作命令21

2.2.5 內存/寄存器相關命令22

2.2.6 系統引導命令24

2.3 u-boot編譯過程分析25

2.3.1 主機構建環境配置過程25

2.3.2 目標機相關配置過程27

2.3.3 make命令執行過程31

2.4 本章小結40

第3章u-boot啟動流程分析41

3.1 u-boot啟動第一階段流程41

3.1.1 設置異常向量42

3.1.2 CPU進入SVC模式43

3.1.3 設置控制寄存器地址43

3.1.4 關閉看門狗43

3.1.5 屏蔽中斷43

3.1.6 設置MPLLCON、UPLLCON和CLKDIVN44

3.1.7 關閉MMU和cache45

3.1.8 初始化存儲控制器46

3.1.9 復制u-boot第二階段代碼到RAM47

3.1.10 設置棧48

3.1.11 清除BSS段48

3.1.12 跳轉到第二階段代碼入口48

3.2 u-boot啟動第二階段代碼分析49

3.2.1 gd_t結構體49

3.2.2 bd_t結構體50

3.2.3 init_sequence數組50

3.2.4 start_armboot()順序分析51

3.2.5 main_loop函數分析52

3.3 本章小結56

第4章ARM9/S3C2440 u-boot移植實戰57

4.1 移植準備工作57

4.1.1 開發環境介紹57

4.1.2 刪減u-boot文件58

4.1.3 建立My2440配置59

4.1.4 配置和編譯u-boot60

4.2 u-boot芯片級移植61

4.2.1 啟動代碼結構優化61

4.2.2 系統時鐘移植65

4.2.3 存儲器控制器設置68

4.2.4 在u-boot工程中全面支持CONFIG_S3C2440宏配置69

4.3 u-boot調試方法探索70

4.3.1 通過LED指示運行狀態70

4.3.2 在第一階段的代碼中添加打印調試方法72

4.3.3 在內存中加載和運行u-boot78

4.4 Nor Flash驅動移植78

4.4.1 Nor Flash的工作模式78

4.4.2 Nor Flash的存儲結構79

4.4.3 Nor Flash的硬件連接79

4.4.4 Nor Flash的操作方法80

4.4.5 Nor Flash驅動分析83

4.4.6 Nor Flash驅動移植86

4.4.7 Nor Flash命令測試87

4.4.8 完善u-boot的命令行功能88

4.5 DM9000驅動移植89

4.5.1 DM9000網卡端口訪問90

4.5.2 DM9000網卡時序分析90

4.5.3 DM9000網卡驅動分析93

4.5.4 DM9000網卡驅動移植100

4.5.5 網卡驅動測試103

4.5.6 通過TFTP下載程序到內存運行103

4.6 u-boot啟動內核105

4.6.1 ARM架構的Linux內核啟動105

4.6.2 內核標記列表106

4.6.3 u-boot啟動命令分析1—go命令109

4.6.4 u-boot啟動命令分析2—bootm命令110

4.6.5 u-boot啟動命令的配置與移植115

4.7 Nand Flash與驅動移植118

4.7.1 Nand Flash啟動原理118

4.7.2 Nand Flash硬件特性119

4.7.3 Linux MTD子系統121

4.7.4 Nand Flash初始化流程分析123

4.7.5 Nand Flash命令實現分析125

4.7.6 頁讀取操作詳解127

4.7.7 Nor Flash和Nand Flash啟動自動判斷132

4.7.8 Nand Flash拷貝代碼實現132

4.7.9 Nand Flash板級驅動移植136

4.7.10 Nand Flash命令測試140

4.8 YAFFS文件系統移植142

4.8.1 YAFFS文件系統142

4.8.2 YAFFS在Nand Flash上的存儲結構142

4.8.3 YAFFS在內存中的組織結構143

4.8.4 在u-boot中添加對燒寫YAFFS鏡像的支持144

4.8.5 YAFFS文件系統鏡像制作150

4.8.6 YAFFS的燒寫與測試152

4.9 UBIFS文件系統移植153

4.9.1 UBI層153

4.9.2 UBIFS介紹155

4.9.3 在u-boot中添加對UBIFS的支持156

4.9.4 制作UBIFS文件系統鏡像157

4.9.5 UBIFS的燒寫與測試158

4.10 SD卡驅動移植162

4.10.1 MMC/SD/SDIO介紹162

4.10.2 SD/MMC協議162

4.10.3 S3C2440 SDI控制器操作166

4.10.4 SD卡驅動分析168

4.10.5 SD卡驅動移植173

4.11 USB驅動移植176

4.11.1 USB概述176

4.11.2 USB系統架構177

4.11.3 USB的通信方法180

4.11.4 USB的描述符184

4.11.5 USB設備請求188

4.11.6 USB設備枚舉191

4.11.7 S3C2440 USB設備控制器195

4.11.8 u-boot USB設備控制器驅動分析196

4.11.9 USB設備驅動移植206

4.11.10 USB驅動移植210

4.11.11 USB功能測試214

4.12 u-boot一鍵式菜單實現215

4.12.1 一鍵式菜單需求分析215

4.12.2 一鍵式菜單測試步驟216

4.12.3 一鍵式菜單源碼分析220

4.13 本章小結224

第5章ARM11/S3C6410 u-boot移植實戰225

5.1 移植準備工作225

5.1.1 開發環境225

5.1.2 刪減u-boot文件226

5.1.3 建立My6410配置227

5.1.4 配置和編譯u-boot228

5.2 u-boot芯片級移植229

5.2.1 修改第一階段啟動代碼start.S229

5.2.2 板級底層初始化文件lowlevel_init.S移植233

5.2.3 時鐘初始化函數移植239

5.2.4 內存初始化函數實現243

5.2.5 Nand Flash復制代碼實現246

5.2.6 SD卡復制代碼實現250

5.2.7 底層調試方法探索254

5.2.8 完善My6410的板級配置258

5.2.9 燒寫與測試265

5.3 DM9000驅動移植267

5.3.1 DM9000網卡端口訪問267

5.3.2 DM9000網卡時序分析268

5.3.3 DM9000網卡驅動移植270

5.3.4 網卡驅動測試274

5.4 u-boot啟動內核274

5.4.1 u-boot啟動命令的配置與移植275

5.4.2 修改go命令以支持zImage格式鏡像的啟動277

5.5 Nand Flash驅動移植278

5.5.1 將u-boot下載到內存中運行278

5.5.2 Nand Flash驅動移植279

5.5.3 Nand Flash命令測試289

5.6 YAFFS文件系統移植291

5.6.1 在u-boot中添加對燒寫YAFFS鏡像的支持291

5.6.2 YAFFS文件系統鏡像制作298

5.6.3 YAFFS的燒寫與測試299

5.7 UBIFS文件系統移植300

5.7.1 在u-boot中添加對UBIFS的支持300

5.7.2 UBIFS文件系統鏡像制作302

5.7.3 UBIFS的燒寫與測試303

5.8 SD卡驅動移植307

5.8.1 S3C6410 主機控制器操作307

5.8.2 S3C6410 主機控制器操作序列308

5.8.3 SD卡驅動分析310

5.8.4 SD卡驅動移植317

5.8.5 通過SD卡更新系統319

5.9 USB驅動移植321

5.9.1 S3C6410 USB2.0高速OTG321

5.9.2 u-boot USB設備控制器驅動分析323

5.9.3 USB設備驅動移植332

5.9.4 USB功能測試335

5.10 本章小結336

Linux內核移植篇

第6章Linux內核工程與編譯系統338

6.1Linux內核架構338

6.1.1內核體系結構338

6.1.2內核組件339

6.1.3內核目錄結構340

6.2 Linux內核的配置與編譯341

6.2.1 配置內核341

6.2.2編譯內核344

6.3Linux內核構建系統345

6.3.1內核配置過程345

6.3.2擴展內核代碼347

6.3.3內核中的Makefile348

6.3.4內核中的Kconfig349

6.4內核調試技術352

6.4.1調試準備352

6.4.2內核調試配置選項352

6.4.3源碼級別的調試接口353

6.4.4使用printk()打印調試信息355

6.4.5使用strace跟蹤系統調用357

6.4.6使用OOPS調試系統故障358

6.5本章小結360

第7章Linux內核啟動流程分析361

7.1內核鏡像生成361

7.2內核啟動流程1——匯編部分362

7.2.1內核啟動代碼入口362

7.2.2深入源碼分析363

7.2.3匯編啟動代碼分析總結378

7.3內核啟動流程2—C語言部分378

7.3.1start_kernel()函數379

7.3.2rest_init()函數388

7.3.3 kernel_init()函數390

7.3.4init_post()函數391

7.4內核啟動流程3—Busybox的init進程393

7.4.1init進程啟動流程393

7.4.2添加初始化活動394

7.4.3執行初始化活動395

7.5本章小結396

第8章Linux移植準備及最小系統構建397

8.1移植準備工作397

8.1.1 開發環境397

8.1.2刪減Linux文件398

8.1.3建立My2440配置400

8.1.4 建立My6410配置403

8.1.5編譯測試406

8.2 最小系統搭建409

8.2.1 嵌入式根文件系統制作409

8.2.2安裝initramfs根文件系統412

8.3本章小結414

第9章Linux網卡驅動移植415

9.1Linux網絡子系統415

9.2 核心數據結構416

9.2.1 net_device結構416

9.2.2 sk_buff結構419

9.3 DM9000網卡驅動分析421

9.3.1 board_info結構422

9.3.2 dm9000_probe()函數423

9.3.3 dm9000_open()函數427

9.3.4 dm9000_start_xmit()函數427

9.3.5 數據包接收函數428

9.3.6 數據包發送函數429

9.3.7 中斷處理函數431

9.4My2440網卡驅動移植432

9.4.1 添加DM9000的平臺設備432

9.4.2 在內核配置添加對DM9000的支持434

9.5 My6410網卡驅動移植434

9.5.1 添加DM9000的平臺設備434

9.5.2 在內核配置中添加對網絡子系統的支持435

9.5.3 在內核配置添加對DM9000的支持436

9.6安裝NFS根文件系統436

9.6.1在內核配置添加對NFS的支持436

9.6.2掛載NFS根文件系統437

9.7 制作基于共享庫的根文件系統437

9.8本章小結439

第10章Linux混雜設備驅動440

10.1 My2440 RTC驅動移植440

10.2My6410 RTC驅動移植441

10.2.1修改RTC驅動rtc-s3c.c441

10.2.2完善對6410 RTC驅動的平臺支持445

10.2.3 在機器配置文件中添加RTC設備448

10.2.4 在內核中配置RTC448

10.3 RTC驅動測試449

10.4為My2440添加ADC和按鍵驅動451

10.4.1按鍵驅動分析451

10.4.2 在內核中添加ADC和按鍵驅動454

10.5 為My6410添加ADC驅動457

10.6 本章小結458

第11章Linux I2C驅動移植459

11.1 I2C協議概述459

11.1.1 I2C總線物理拓撲結構459

11.1.2 I2C通信協議460

11.2Linux I2C子系統框架461

11.3 I2C驅動中的數據結構及操作462

11.3.1 i2c_adapter結構462

11.3.2 i2c_algorithm結構464

11.3.3 i2c_msg結構464

11.3.4i2c_driver結構465

11.3.5 i2c_client結構467

11.4I2C適配器的設備接口468

11.4.1 i2cdev_open()函數471

11.4.2 i2cdev_ read()函數471

11.4.3 i2cdev_ioctl()函數472

11.5 S3C2440(6410) I2C適配器驅動的實現473

11.5.1 S3C2440 I2C platform總線匹配474

11.5.2 S3C2440 I2C總線驅動描述結構474

11.5.3 probe方法的實現476

11.5.4 S3C2440 I2C總線通信方法477

11.6 S3C2440(6410) I2C適配器驅動移植480

11.6.1 添加 I2C平臺設備480

11.6.2 在內核配置中支持I2C驅動481

11.6.3編寫I2C總線驅動測試程序482

11.7S3C2440(6410) I2C設備驅動的實現484

11.7.1 At24系列I2C EEPROM設備驅動的實現484

11.7.2傳統只讀EEPROM設備驅動的實現486

11.8 I2C EEPROM設備驅動移植489

11.9本章小結490

第12章Linux SPI驅動移植491

12.1SPI協議概述491

12.1.1 SPI總線物理拓撲結構491

12.1.2 時鐘極性和時鐘相位492

12.1.3 SPI的優缺點493

12.2 Linux SPI子系統493

12.3 SPI驅動中的數據結構及操作494

12.3.1 spi_master結構494

12.3.2 spi_driver結構495

12.3.3 spi_device結構496

12.3.4 spi_message結構497

12.3.5spi_bitbang結構498

12.4SPI控制器的設備接口500

12.5 S3C2440 SPI控制器驅動的實現503

12.5.1 S3C2440 SPI platform總線匹配503

12.5.2 S3C2440 SPI控制器驅動描述結構504

12.5.3 probe方法的實現504

12.5.4 S3C2440 SPI總線通信方法505

12.6S3C6410 SPI控制器驅動的實現507

12.6.1 S3C6410 SPI控制器驅動描述結構507

12.6.2 probe方法的實現507

12.6.3 S3C6410 SPI總線通信方法509

12.7S3C2440 SPI 控制器驅動移植510

12.7.1在機器配置文件中添加對SPI的支持510

12.7.2 擴展Kconfig512

12.7.3在內核配置中支持SPI驅動513

12.7.4SPI驅動測試513

12.8S3C6410 SPI 控制器驅動移植513

12.8.1 添加6410的SPI驅動514

12.8.2 添加SPI平臺設備514

12.8.3添加6410 DMA平臺代碼516

12.8.4 添加SPI、DMA相關的時鐘資源518

12.8.5在機器配置文件中添加對SPI的支持519

12.8.6 SPI驅動測試521

12.9 S3C2440(S3C6410) SPI協議驅動移植521

12.9.1 AT25系列SPI EEPROM協議驅動的實現521

12.9.2SPI EEPROM設備驅動移植523

12.10 本章小結524

第13章Nand Flash驅動移植525

13.1 Linux MTD子系統525

13.2 MTD子系統中的數據結構及操作526

13.2.1 mtd_info結構526

13.2.2mtd_notifier結構528

13.2.3 mtd_part/mtd_partitions結構528

13.3 MTD塊設備實現分析530

13.4 Nand Flash驅動的實現534

13.4.1 Nand Flash platform總線匹配534

13.4.2 S3C2440 Nand Flash控制器驅動描述結構534

13.4.3 probe方法的實現536

13.4.4 S3C2440 Nand Flash讀寫方法分析537

13.5S3C2440 Nand Flash控制器驅動移植538

13.5.1 在機器配置文件中添加對Nand Flash的支持538

13.5.2 完善S3C2440的Nand Flash驅動540

13.5.3 在內核配置中支持 Nand Flash驅動541

13.6S3C6410 Nand Flash控制器驅動移植541

13.6.1添加6410 Nand Flash驅動541

13.6.2添加Nand Flash平臺設備542

13.6.3在機器配置文件中添加對Nand Flash的支持544

13.6.4 其他修改545

13.7 YAFFS2文件系統移植547

13.7.1將YAFFS2文件系統移植到Linux內核548

13.7.2 利用mtd-utils燒寫YAFFS2文件系統鏡像548

13.8 在內核中配置對UBIFS的支持550

13.9 本章小結550

第14章SD/MMC卡驅動移植551

14.1Linux MMC子系統551

14.2 MMC子系統中的數據結構及操作552

14.2.1 mmc_host結構552

14.2.2 mmc_card結構554

14.2.3mmc_driver結構555

14.2.4 mmc_request結構556

14.3卡探測過程分析558

14.4 S3C2440 SD/MMC主控制器驅動的實現561

14.4.1 SD/MMC主控制器驅動platform總線匹配561

14.4.2 S3C2440 SD/MMC主控制器驅動描述結構561

14.4.3 probe方法的實現563

14.4.4 S3C2440 SD/MMC主控制器請求處理分析565

14.5S3C6410 高速MMC控制器驅動的實現568

14.5.1 SDHCI驅動框架569

14.5.2SDHCI主機卡探測過程569

14.5.3S3C6410 HSMMC控制器驅動570

14.5.4 S3C6410 HSMMC控制器請求處理572

14.6S3C2440 SD/MMC主機控制器驅動移植572

14.6.1 在機器配置文件中添加對SD/MMC主控制器的支持572

14.6.2 在內核配置中添加對SD/MMC主控制器驅動的支持573

14.6.3在內核配置中添加對中文字符集和FAT文件系統的支持574

14.6.4在文件系統中添加對熱插拔事件處理的支持574

14.6.5SD/MMC主控制器驅動測試575

14.7 S3C6410 HSMMC控制器驅動移植576

14.7.1 添加6410 Nand Flash驅動576

14.7.2在機器配置文件中添加對HSMMC的支持577

14.7.3 修改內核SDHCI驅動578

14.8本章小結579

第15章LCD驅動移植580

15.1LCD硬件原理580

15.1.1 LCD的硬件構成580

15.1.2TFT屏顯示時序581

15.2 Linux幀緩沖子系統582

15.3 幀緩沖子系統中的數據結構及操作583

15.3.1 fb_info結構583

15.3.2fb_var_screeninfo結構和fb_fix_screeninfo結構587

15.3.3fb_cmap結構589

15.4 幀緩沖字符設備接口590

15.5Linux顯示啟動Logo594

15.6S3C2440幀緩沖驅動的實現596

15.6.1S3C2440 LCD控制器硬件描述596

15.6.2 驅動platform總線匹配597

15.6.3 S3C2440 幀緩沖驅動描述結構598

15.6.4 probe方法實現599

15.7S3C6410 幀緩沖驅動的實現601

15.8 S3C2440 幀緩沖驅動移植601

15.8.1 在板級初始化文件中添加對幀緩沖的支持601

15.8.2修改Makefile和Kconfig605

15.8.3 在內核配置中添加對幀緩沖驅動的支持607

15.8.4 幀緩沖驅動測試608

15.9 S3C6410 幀緩沖驅動移植608

15.9.1 添加6410 幀緩沖驅動608

15.9.2 在機器配置文件中添加對幀 緩沖的支持609

15.9.3 幀緩沖驅動測試611

15.10 本章小結611

第16章觸摸屏驅動移植612

16.1 Linux輸入子系統612

16.2 輸入子系統中的數據結構及操作613

16.2.1 input_dev結構613

16.2.2 input_handler結構616

16.2.3 input_handle結構617

16.3 輸入子系統核心層的實現618

16.4 通用事件處理驅動622

16.5 輸入事件報告流程626

16.6 S3C2440(6410)觸摸屏驅動的分析629

16.6.1 模塊初始化函數的實現629

16.6.2 中斷處理與事件上報630

16.7 S3C2440觸摸屏驅動移植與測試632

16.7.1 S3C2440觸屏驅動移植632

16.7.2 S3C2440觸屏驅動測試633

16.8 S3C6410觸摸屏驅動移植與測試634

16.8.1 添加6410的觸摸屏驅動634

16.8.2添加觸屏平臺設備635

16.8.3 在機器配置文件中添加對觸屏的支持636

16.9 本章小結637

第17章聲卡驅動移植638

17.1 ALSA體系架構638

17.1.1 ALSA設備文件639

17.1.2 驅動代碼的文件結構640

17.2 聲卡描述結構snd_card640

17.3 PCM功能子層644

17.3.1 PCM的概念644

17.3.2 PCM設備描述結構snd_pcm645

17.3.3 PCM流與PCM子流646

17.3.4 PCM功能子層邏輯關系小結651

17.3.5 PCM設備文件的建立652

17.3.6 PCM設備文件的訪問654

17.4 聲卡控制項655

17.4.1 控制項創建655

17.4.2 控制項回調函數657

17.4.3 Control設備建立658

17.5 ASoC聲卡驅動架構659

17.6 ASoC架構中的Machine驅動662

17.6.1 創建ASoC聲卡平臺設備662

17.6.2 ASoC聲卡的平臺驅動665

17.7ASoC架構中的Codec驅動666

17.7.1 Codec的DAI和PCM的配置666

17.7.2 Codec的控制IO669

17.7.3 混音器和其他音頻控制項671

17.7.4 Codec設備與ASoC聲卡注冊673

17.8 ASoC架構中的Platform驅動676

17.8.1CPU DAI驅動676

17.8.2 音頻DMA驅動677

17.8.3 創建音頻DMA緩沖區678

17.8.4 音頻DMA的PCM操作681

17.9 S3C2440+UDA1341聲卡驅動配置與測試683

17.9.1 在機器配置文件中添加對聲卡的支持683

17.9.2 在內核配置中支持聲卡驅動684

17.9.3 應用層alsa-lib移植685

17.9.4 編寫ALSA應用程序686

17.9.5 播放和錄音測試690

17.10S3C6410+WM9714聲卡驅動移植691

17.10.1添加6410聲卡驅動691

17.10.2在內核配置中支持聲卡驅動692

17.10.3 alsa-utils工具集移植692

17.11 本章小結693

第18章USB驅動移植694

18.1USB子系統架構694

18.2USB驅動中的描述符結構695

18.3USB主機驅動695

18.3.1主機控制器驅動695

18.3.2OHCI主機控制器驅動698

18.4S3C2440/S3C6410 USB主機驅動的實現700

18.5USB設備驅動701

18.5.1USB設備驅動描述結構702

18.5.2USB請求塊URB703

18.5.3URB的處理流程705

18.5.4 usb_bulk_msg()和usb_control_msg()708

18.5.5探測和斷開函數709

18.6USB骨架程序710

18.7USB設備驅動實例718

18.7.1DNW驅動的實現718

18.7.2USB鍵盤驅動的實現720

18.8本章小結728

應用程序移植篇

第19章嵌入式Qt移植730

19.1Qt開發環境搭建與使用 730

19.1.1Qt SDK的下載與安裝730

19.1.2第一個Qt程序732

19.1.3利用Qt Creator建立一個工程733

19.2Qt的功能模塊與裁剪735

19.2.1Qt模塊的構成735

19.2.2圖形用戶界面736

19.2.3信號與槽 736

19.2.4布局管理737

19.2.5主視窗737

19.3嵌入式Qt移植與測試737

19.3.1觸屏庫tslib移植737

19.3.2Qt庫移植739

19.3.3嵌入式Qt程序測試741

19.3.4嵌入式Qt工程配置與測試743

19.4本章小結751

第20章嵌入式多媒體程序移植752

20.1音頻播放程序madplay的移植752

20.1.1在Ubuntu中安裝madplay752

20.1.2 在Ubuntu中測試madplay753

20.1.3將madplay移植到開發板753

20.1.4在開發板中測試madplay755

20.2視頻播放程序MPlayer的移植755

20.2.1在Ubuntu中安裝MPlayer755

20.2.2在Ubuntu中測試MPlayer756

20.2.3將MPlayer移植到開發板756

20.2.4在開發板中測試MPlayer758

20.3利用Qt開發視頻播放器758

20.3.1MPlayer的SLAVE模式759

20.3.2示例播放器MyPlayer的實現759

20.4本章小結760

第21章嵌入式數據庫移植761

21.1SQLite數據庫的使用761

21.1.1使用命令行操作SQLite761

21.1.2使用C語言操作SQLite763

21.1.3在Qt中操作SQLite765

21.1.4在QTableView中顯示數據庫內容767

21.2SQLite數據庫的移植770

21.2.1將SQLite移植到開發板770

21.2.2在開發板中測試SQLite771

21.3本章小結773

第22章嵌入式Web服務器移植774

22.1Boa的使用與HTML頁面測試774

22.2CGI程序測試779

22.2.1CGI的概念和原理779

22.2.2編寫CGI腳本測試779

22.2.3CGIC庫的基本使用780

22.3通過網頁控制設備782

22.4通過網頁監控設備785

22.5網頁視頻監控788

22.6將Web服務器移植到開發板791

22.6.1將Boa移植到開發板791

22.6.2將CGIC移植到開發板792

22.6.3將mjpg-streamer移植到開發板792

22.6.4在開發板上搭建Web服務站點793

22.7本章小結793

第23章嵌入式JVM移植794

23.1phoneME虛擬機移植794

23.1.1獲取源代碼795

23.1.2編譯和安裝795

23.1.3測試步驟796

23.2JamVM虛擬機移植798

23.2.1GNU Classpath移植798

23.2.2JamVM移植799

23.2.3JamVM測試799

23.3在JamVM上運行Jetty服務器800

23.3.1Jetty服務器啟動800

23.3.2在Jetty服務器中部署Web應用801

23.3.3Servlet和JSP頁面測試803

23.4本章小結805
序: