《Linux系統移植(第2版)》是清華大學出版社出版的圖書,作者是劉剛、趙劍川。
基本介紹
- 書名:Linux系統移植(第2版)
- 作者:劉剛、趙劍川
- ISBN: 9787302344261
- 頁數: 486頁
- 出版社:清華大學出版社
- 開本:16開
- 叢書名:Linux典藏大系
內容介紹
本篇介紹了系統移植的基礎。首先對Linux核心進行了簡單介紹,然後介紹了系統移植環境的搭建。通過對本篇內容的學習,讀者可以對Linux系統有初步認識,能掌握嵌入式Linux開發工具的使用,能正確搭建開發平台,能夠製作編譯好的嵌入式系統。
本篇介紹了一個最基本的嵌入式系統的組成部分、Bootloader、核心和檔案系統的移植。學習完本篇內容後,讀者能夠動手獨立編譯和移植一個基本的嵌入式系統。
本篇介紹了各種驅動的移植,包括LCD、觸控螢幕、USB、網卡、音頻、SD卡、NandFlash等流行的設備驅動的移植過程。通過對本篇內容的學習,讀者對嵌入式Linux驅動移植將會有一定的認識,可以基本掌握驅動的移植步驟,能完成簡單的驅動移植。
本篇從嵌入式產品的角度出發,介紹了系統移植中各種類型的高層軟體移植,包括GUI、資料庫、Web伺服器、虛擬機的移植,最後還介紹了目前流行的VoIP技術,並結合源碼介紹了VoIP相關協定和編譯方法。通過學習本篇內容,讀者可以掌握很多移植技巧,能夠將這些實例套用到自己的項目中。
目錄
第1章 Linux核心介紹2
1.1 系統調用接口2
1.1.1 Linux系統調用2
1.1.2 用戶編程接口2
1.1.3 系統調用與服務例程的對應關係3
1.1.4 系統調用過程3
1.1.5 系統調用傳遞的參數4
1.2 進程管理4
1.2.1 進程4
1.2.2 進程描述符5
1.2.3 進程狀態6
1.2.4 進程調度6
1.2.5 進程地址空間8
1.3 記憶體管理10
1.3.1 記憶體管理技術10
1.3.2 記憶體區管理12
1.3.3 核心中獲取記憶體的幾種方式13
1.4 虛擬檔案系統14
1.4.1 虛擬檔案系統作用14
1.4.2 檔案系統的註冊15
1.4.3 檔案系統的安裝和卸載16
1.5 設備驅動程式17
1.5.1 字元設備驅動程式17
1.5.2 塊設備驅動程式18
1.5.3 網路設備驅動程式21
1.5.4 記憶體與I/O操作22
1.6 小結23
第2章 嵌入式Linux開發環境搭建24
2.1 虛擬機及Linux安裝24
2.1.1 虛擬機的安裝24
2.1.2 虛擬機和主機通信設定31
2.1.3 虛擬機與主機已分享檔案35
2.1.4 虛擬機與主機檔案傳輸36
2.2 交叉編譯工具38
2.2.1 交叉編譯工具安裝38
2.2.2 交叉編譯器測試42
2.3 超級終端和Minicom44
2.3.1 超級終端軟體的安裝44
2.3.2 配置Minicom44
2.3.3 配置SecureCRT47
2.4 核心、檔案系統載入工具47
2.4.1 燒寫Bootloader47
2.4.2 核心和檔案系統下載50
2.4.3 應用程式和檔案傳輸50
2.5 在開發中使用網路檔案系統(NFS)54
2.5.1 虛擬機設定54
2.5.2 虛擬機的IP位址設定55
2.5.3 驗證網路連線58
2.5.4 設定已分享資料夾59
2.5.5 啟動NFS服務59
2.5.6 修改共享配置後60
2.5.7 掛載NFS60
2.5.8 雙網卡掛載NFS60
2.6 小結61
第3章 Bootloader移植64
3.1 Bootloader介紹64
3.1.1 Bootloader與嵌入式Linux系統的關係64
3.1.2 Bootloader基本概念64
3.1.3 Bootloader啟動過程66
3.2 Bootloader之U-Boot67
3.2.1 U-Boot優點67
3.2.2 U-Boot的主要功能67
3.2.3 U-Boot目錄結構68
3.2.4 U-Boot的編譯69
3.3 小結69
第4章 Linux核心裁剪與移植70
4.1 Linux核心結構70
4.1.1 核心的主要組成部分70
4.1.2 核心源碼目錄介紹71
4.2 核心配置選項73
4.2.1 一般選項73
4.2.2 核心模組載入方式支持選項74
4.2.3 系統調用、類型、特性、啟動相關選項75
4.2.4 網路協定支持相關選項76
4.2.5 設備驅動支持相關選項76
4.2.6 檔案系統類型支持相關選項77
4.2.7 安全相關選項78
4.2.8 其他選項78
4.3 核心裁剪及編譯79
4.3.1 安裝核心原始碼79
4.3.2 檢查編譯環境設定79
4.3.3 配置核心80
4.3.4 編譯核心89
4.4 核心升級90
4.4.1 準備升級核心檔案90
4.4.2 移植過程90
4.5 小結93
第5章 嵌入式檔案系統製作94
5.1 檔案系統選擇94
5.1.1 Flash硬體方案比較94
5.1.2 嵌入式檔案系統的分層結構95
5.2 基於Flash的檔案系統95
5.2.1 JFFS檔案系統(Journalling Flash File System)96
5.2.2 YAFFS檔案系統(Yet Another Flash File System)98
5.2.3 Cramfs檔案系統(Compressed ROM File System)101
5.2.4 Romfs檔案系統(ROM File System)102
5.3 基於RAM的檔案系統103
5.4 檔案系統的製作103
5.4.1 製作Ramdisk檔案系統104
5.4.2 製作YAFFS2檔案系統112
5.4.3 製作JFFS2檔案系統117
5.4.4 其他檔案系統製作119
5.5 小結120
第6章 LCD驅動移植122
6.1 認識LCD相關硬體原理122
6.1.1 LCD概述122
6.1.2 LCD控制器123
6.1.3 LCD控制器方塊圖123
6.1.4 LCD控制器操作124
6.1.5 LCD控制暫存器129
6.2 LCD參數設定132
6.3 核心LCD驅動機制133
6.3.1 FrameBuffer概述133
6.3.2 FrameBuffer 設備驅動的結構133
6.4 Linux 2.6.32的LCD驅動源碼分析137
6.4.1 LCD驅動開發的主要工作137
6.4.2 s3c2410fb_init()函式分析138
6.4.3 s3c2410fb_probe()函式分析139
6.4.4 s3c2410fb_remove()函式分析144
6.5 移植核心中的LCD驅動145
6.5.1 LCD硬體電路圖145
6.5.2 修改LCD源碼145
6.5.3 配置核心150
6.6 小結153
第7章 觸控螢幕驅動移植154
7.1 觸控螢幕概述154
7.1.1 觸控螢幕工作原理154
7.1.2 觸控螢幕的主要類型154
7.2 S3C2440 ADC接口使用157
7.2.1 S3C2440觸控螢幕接口概述157
7.2.2 S3C2440觸控螢幕接口操作158
7.3 2.6核心觸控螢幕驅動源碼分析(s3c2410_ts.c源碼分析)162
7.4 Linux核心輸入子系統介紹167
7.4.1 Input子系統概述168
7.4.2 輸入設備結構體168
7.4.3 輸入鏈路的創建過程171
7.4.4 使用Input子系統172
7.4.5 編寫輸入設備驅動需要完成的工作174
7.5 觸控螢幕驅動移植和核心編譯175
7.5.1 修改初始化源碼175
7.5.2 修改硬體驅動源碼s3c2440_ts.c177
7.5.3 修改Kconfig和Makefile179
7.5.4 配置編譯核心180
7.5.5 觸控螢幕測試程式設計181
7.6 小結182
第8章 USB設備驅動移植183
8.1 USB協定183
8.1.1 USB協定的系統主要組成部分183
8.1.2 匯流排物理拓撲結構185
8.1.3 USB設備、配置、接口、端點185
8.1.4 USB設備狀態188
8.1.5 USB枚舉過程189
8.1.6 USB請求塊(URB)192
8.2 USB主機驅動196
8.2.1 USB主機驅動結構和功能196
8.2.2 主機控制器驅動(usb_hcd)197
8.2.3 OHCI主機控制器驅動199
8.2.4 S3C24XX OHCI主機控制器驅動實例200
8.3 USB設備驅動203
8.3.1 USB骨架程式分析203
8.3.2 USB驅動移植的時鐘設定207
8.4 USB滑鼠鍵盤驅動208
8.4.1 USB滑鼠驅動代碼分析208
8.4.2 USB鍵盤驅動代碼分析211
8.4.3 核心中添加USB滑鼠鍵盤驅動214
8.5 隨身碟驅動215
8.5.1 核心配置215
8.5.2 移植和測試216
8.6 小結218
第9章 網卡驅動程式移植219
9.1 乙太網概述219
9.1.1 乙太網連線219
9.1.2 乙太網技術概述220
9.1.3 乙太網的幀結構222
9.2 網路設備驅動程式體系結構224
9.2.1 嵌入式Linux網路驅動程式介紹224
9.2.2 Linux網路設備驅動的體系結構225
9.2.3 網路設備驅動程式編寫方法225
9.2.4 網路設備驅動程式套用實例227
9.3 net_device 數據結構228
9.3.1 全局信息228
9.3.2 硬體信息229
9.3.3 接口信息229
9.3.4 設備方法232
9.3.5 公用成員234
9.4 DM9000網卡概述234
9.4.1 DM9000網卡總體介紹235
9.4.2 DM9000網卡的特點235
9.4.3 內部暫存器236
9.4.4 功能描述240
9.5 DM9000網卡驅動程式移植241
9.5.1 DM9000網卡連線241
9.5.2 驅動分析——硬體的數據結構242
9.5.3 驅動分析——數據讀寫函式243
9.5.4 驅動分析——重置網卡243
9.5.5 驅動分析——初始化網卡243
9.5.6 驅動分析——打開和關閉網卡248
9.5.7 驅動分析——數據包的傳送與接收249
9.5.8 DM9000網卡驅動程式移植251
9.6 小結254
第10章 音頻設備驅動程式移植255
10.1 音頻設備接口255
10.1.1 PCM(脈衝編碼調製)接口255
10.1.2 IIS(Inter-IC Sound)接口255
10.1.3 AC97(Audio Codec 1997)接口255
10.1.4 Linux音頻設備驅動框架256
10.2 Linux音頻設備驅動——OSS驅動框架257
10.2.1 OSS驅動架構硬體257
10.2.2 OSS驅動架構代碼257
10.2.3 OSS初始化函式oss_init()259
10.2.4 OSS釋放函式oss_cleanup()260
10.2.5 打開設備檔案函式sound_open()261
10.2.6 錄音函式sound_read()262
10.2.7 播放函式sound_write()263
10.2.8 控制函式sound_ioctl()263
10.3 Linux音頻設備驅動——ALSA驅動框架265
10.3.1 card和組件265
10.3.2 PCM設備269
10.3.3 控制接口272
10.3.4 AC97 API音頻接口274
10.4 音頻設備應用程式編寫278
10.4.1 DSP接口編程278
10.4.2 MIXER接口編程281
10.4.3 ALSA應用程式編程282
10.5 音頻設備驅動移植284
10.5.1 添加UDA1341結構體284
10.5.2 修改錄音通道285
10.5.3 核心中添加UDA1341驅動支持286
10.5.4 移植新核心並進行測試287
10.6 音頻播放程式madplay的移植288
10.6.1 準備移植需要的源檔案288
10.6.2 交叉編譯288
10.6.3 移植和測試290
10.6.4 編譯中可能遇到的問題290
10.7 小結290
第11章 SD卡驅動移植291
11.1 SD卡簡介291
11.1.1 SD卡系統概念291
11.1.2 SD卡暫存器291
11.1.3 SD功能描述292
11.2 SD卡驅動程式分析295
11.2.1 host驅動部分296
11.2.2 core驅動部分302
11.2.3 card驅動部分307
11.3 SD卡移植步驟310
11.3.1 添加延時和中斷310
11.3.2 配置核心310
11.3.3 燒寫新核心312
11.4 小結313
第12章 NandFlash驅動移植314
12.1 NandFlash介紹314
12.1.1 NandFlash命令介紹314
12.1.2 NandFlash控制器315
12.2 NandFlash驅動介紹316
12.2.1 Nand晶片結構316
12.2.2 NandFlash驅動分析317
12.3 NandFlash驅動移植323
12.3.1 核心的修改323
12.3.2 核心的配置和編譯325
12.4 小結326
第13章 MiniGUI與移植328
13.1 MiniGUI在上位機中的安裝328
13.1.1 安裝需要的安裝檔案328
13.1.2 MiniGUI的運行模式328
13.1.3 編譯並安裝MiniGUI329
13.1.4 編譯安裝MiniGUI需要的圖片支持庫331
13.1.5 編譯MiniGUI應用程式例子331
13.2 MiniGUI的交叉編譯和移植332
13.2.1 交叉編譯MiniGUI332
13.2.2 移植MiniGUI程式334
13.3 小結336
第14章 Qt開發與Qtopia移植337
14.1 Qt安裝與編程337
14.1.1 下載安裝Qt337
14.1.2 Qt編程338
14.1.3 使用qmake生成Makefile340
14.2 Qtopia Core在X86平台上的安裝和套用341
14.2.1 Qtopia Core安裝準備341
14.2.2 編譯Qtopia Core343
14.2.3 Qtopia在X86平台上的套用開發343
14.3 Qtopia Core在嵌入式Linux上的移植347
14.3.1 Qtopia Core移植準備347
14.3.2 交叉編譯Qtopia Core348
14.3.3 編譯核心350
14.3.4 應用程式開發351
14.3.5 應用程式移植354
14.4 小結354
第15章 嵌入式資料庫Berkeley DB移植355
15.1 資料庫的基本概念355
15.1.1 利用文檔和原始碼355
15.1.2 創建環境句柄355
15.1.3 創建資料庫句柄356
15.1.4 打開資料庫357
15.1.5 DBT結構357
15.1.6 存取數據358
15.1.7 關閉資料庫359
15.2 Berkeley DB資料庫安裝359
15.2.1 安裝成C庫359
15.2.2 安裝成C++庫360
15.2.3 交叉編譯安裝Berkeley DB360
15.3 使用Berkeley DB資料庫362
15.3.1 代碼分析362
15.3.2 編譯運行程式365
15.4 移植Berkeley DB資料庫366
15.4.1 資料庫設計366
15.4.2 編寫應用程式366
15.4.3 調試和交叉編譯應用程式368
15.4.4 資料庫的移植和測試369
15.5 小結369
第16章 嵌入式資料庫SQLite移植370
16.1 SQLite支持的SQL語句370
16.1.1 數據定義語句370
16.1.2 數據操作語句371
16.2 SQLite資料庫編譯、安裝和使用371
16.2.1 安裝SQLite372
16.2.2 利用SQL語句操作SQLite資料庫372
16.2.3 利用C接口訪問SQLite資料庫373
16.3 移植SQLite376
16.3.1 交叉編譯SQLite376
16.3.2 交叉編譯應用程式377
16.4 移植SQLite資料庫377
16.4.1 檔案移植378
16.4.2 運行應用程式378
16.4.3 測試sqlite3379
16.5 小結380
第17章 嵌入式Web伺服器BOA移植381
17.1 BOA介紹381
17.1.1 BOA的功能381
17.1.2 BOA流程分析382
17.1.3 BOA配置信息385
17.2 BOA編譯和HTML頁面測試387
17.2.1 編譯BOA原始碼387
17.2.2 設定BOA配置信息388
17.2.3 測試BOA388
17.3 CGI腳本測試390
17.3.1 編寫測試代碼390
17.3.2 編譯測試程式390
17.3.3 測試CGI腳本390
17.4 BOA交叉編譯與移植391
17.4.1 交叉編譯BOA391
17.4.2 準備測試程式391
17.4.3 配置BOA392
17.4.4 測試392
17.5 BOA與SQLite結合393
17.5.1 通過CGI程式訪問SQLite393
17.5.2 編譯和測試395
17.6 小結396
第18章 嵌入式Web伺服器Thttpd移植397
18.1 Thttpd介紹397
18.1.1 Web伺服器比較397
18.1.2 Thttpd的特點397
18.1.3 Thttpd核心代碼分析398
18.2 Thttpd編譯和HTML頁面測試401
18.2.1 配置檔案介紹401
18.2.2 Thttpd編譯402
18.2.3 運行和測試Thttpd402
18.3 CGI腳本測試405
18.3.1 編寫測試代碼405
18.3.2 編譯測試程式406
18.3.3 測試CGI腳本406
18.4 Thttpd交叉編譯與移植406
18.4.1 交叉編譯Thttpd406
18.4.2 交叉編譯CGI程式407
18.4.3 移植Thttpd407
18.4.4 測試408
18.5 Thttpd與嵌入式資料庫結合408
18.5.1 通過CGI程式訪問SQLite409
18.5.2 編譯和測試411
18.6 小結411
第19章 JVM及其移植412
19.1 JVM介紹412
19.1.1 JVM原理412
19.1.2 JVM支持的數據類型413
19.1.3 JVM指令系統414
19.1.4 JVM暫存器414
19.1.5 JVM棧結構414
19.1.6 JVM碎片回收堆417
19.1.7 JVM異常拋出和異常捕獲417
19.2 類裝載418
19.2.1 裝載類的結構體418
19.2.2 裝載類的操作419
19.3 垃圾回收421
19.3.1 mark-and-sweep回收算法422
19.3.2 分代回收算法423
19.3.3 增量收集424
19.4 解析器424
19.4.1 函式Interpret()424
19.4.2 函式FastInterpret()425
19.4.3 函式SlowInterpret ()427
19.5 Java編程淺析428
19.5.1 Java程式命令428
19.5.2 Java構造函式428
19.5.3 Java主函式428
19.5.4 Java程式編譯與運行429
19.6 KVM執行過程429
19.6.1 KVM啟動過程429
19.6.2 KVM用到的計數器清零432
19.6.3 KVM初始化記憶體管理433
19.6.4 KVM中的哈希表初始化434
19.6.5 KVM中的事件初始化435
19.6.6 KVM中的資源釋放435
19.7 PC機安裝JVM435
19.7.1 JVM在Windows上的安裝436
19.7.2 JVM在Linux上的安裝437
19.8 KVM移植和測試438
19.8.1 SDK安裝和環境變數設定438
19.8.2 修改Makefile和代碼438
19.8.3 KVM編譯439
19.8.4 測試439
19.8.5 移植441
19.9 小結443
第20章 VoIP技術與Linphone編譯444
20.1 VoIP介紹444
20.1.1 VoIP基本原理444
20.1.2 VoIP的基本傳輸過程445
20.1.3 VoIP的優勢445
20.1.4 VoIP的實現方式445
20.1.5 VoIP的關鍵技術446
20.2 oSIP協定概述446
20.3 oSIP狀態機447
20.3.1 ICT(Invite Client (outgoing) Transaction)狀態機447
20.3.2 NICT(Non-Invite Client (outgoing) Transaction)狀態機457
20.3.3 IST(Invite Server (incoming) Transaction)狀態機457
20.3.4 NIST(Non-Invite Server (incoming) Transaction)狀態機458
20.4 oSIP解析器459
20.4.1 初始化解析類型函式osip_body_init()459
20.4.2 釋放函式osip_body_free()459
20.4.3 字元串到body類型轉換函式osip_body_parse()460
20.4.4 body類型到字元串類型轉換函式osip_body_to_str()460
20.4.5 克隆函式osip_body_clone()462
20.4.6 oSIP解析器分類464
20.5 oSIP事務層464
20.6 SIP建立會話的過程467
20.7 RTP協定468
20.7.1 RTP基本概念468
20.7.2 傳送RTP470
20.7.3 接收RTP472
20.8 Linphone編譯與測試474
20.8.1 編譯Linphone需要的軟體包474
20.8.2 X86平台上編譯和安裝475
20.8.3 Linphone測試478
20.8.4 進一步的測試和開發481
20.9 Linphone交叉編譯482
20.9.1 Linphone的交叉編譯482
20.9.2 Linphone的測試484
20.10 小結486
前言
目前,國內圖書市場上專門介紹Linux系統移植的圖書只有筆者2011年初出版的《Linux系統移植》一書。該書也是獲得了大量讀者好評的“Linux典藏大系”中的一個分冊,出版後填補了該領域的空白。隨著時間的推移和技術的發展,這本書已經逐漸不能適應讀者的需求,因此筆者對這本書進行了升級和改版,便有了這本書的第2版。
本書第1版出版後深受讀者好評,並被ChinaUNIX技術社區所推薦。但是隨著技術的發展,本書第1版內容已經無法滿足讀者的學習需求。應廣大讀者的要求,我們結合Linux系統移植的最新技術推出了本書的第2版。相比第1版,第2版圖書在內容上的變化主要體現在以下幾個方面:
(1)作業系統版本由Fedora 6升級為Fedora 19。
(2)系統移植核心版本統一升級為2.6.32。
(3)編譯工具GCC版本升級到4.4.3。
(4)MiniGUI、Qt、Berkeley DB、SQLite、Linphone等均升級為最新版本。
(5)將一些表達不準確的地方表述得更加準確。
本書特色
本書介紹了最小系統的引導程式移植、核心移植、檔案系統移植、各種驅動移植等內容。另外,本書還專門介紹了嵌入式資料庫、嵌入式GUI、嵌入式Web伺服器、嵌入式JVM、VoIP技術等內容。對於資料庫、GUI、Web伺服器分別選擇了兩種進行介紹,讀者可以從性能上進行對比,然後套用在自己的項目中。
2.內容由淺入深、循序漸進,可操作性強
本書按照由淺入深、循序漸進的梯度安排內容,適合各個層次的讀者閱讀。書中每章內容都遵循原理分析?代碼、分析?編譯?測試?移植的學習順序,具有較強的可操作性。
3.編譯過程詳細
本書的編譯過程都附有詳細的編譯命令,對於複雜的命令均給出了說明,方便讀者實際操作。讀者可以邊閱讀本書,邊動手進行實驗。
4.貫穿了大量的編譯技巧,可迅速提升移植水平
本書在講解編譯過程時貫穿了大量的編譯技巧,並針對移植過程中的編譯錯誤介紹了如何發現錯誤的源頭,同時給出了解決方法。這有利於讀者解決類似的編譯問題,提升系統移植的水平。
5.提供多媒體教學視頻和源檔案
本書贈送17.5小時多媒體教學視頻和實例源檔案,便於讀者高效、直觀地學習。這些學習資料需要讀者按照封底的提示自行下載。