嵌入式Linux開(kāi)發(fā)詳解:基于AT91RM9200和Linux2.6
定 價(jià):29 元
- 作者:劉慶敏 ,等 著
- 出版時(shí)間:2010/5/1
- ISBN:9787512400719
- 出 版 社:北京航空航天大學(xué)出版社
- 中圖法分類(lèi):TP316.81
- 頁(yè)碼:246
- 紙張:膠版紙
- 版次:1
- 開(kāi)本:16開(kāi)
本書(shū)介紹了嵌入式Linux開(kāi)發(fā)需要掌握的基礎(chǔ)知識(shí),采用分層的方法對(duì)關(guān)鍵技術(shù)進(jìn)行了詳細(xì)的講解,且輔以大量實(shí)例。共分為7章。第1、2章介紹嵌入式系統(tǒng)和Linux的基礎(chǔ)知識(shí)。第3~7章從實(shí)踐的角度分層次介紹嵌入式Linux開(kāi)發(fā)的流程和關(guān)鍵技術(shù)。其中,第3章介紹硬件平臺(tái);第4章介紹Boot Loader的基礎(chǔ)理論,對(duì)Uboot的移植、代碼分析、關(guān)鍵技術(shù)情景分析等進(jìn)行了深入探討;第5章介紹了Linux內(nèi)核移植需要具備的知識(shí),重點(diǎn)分析了內(nèi)核映像格式以及Boot Loader與內(nèi)核的通信機(jī)制;第6章在介紹嵌入式文件系統(tǒng)的基礎(chǔ)上,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)嵌入式混合文件系統(tǒng);第7章介紹了嵌入式開(kāi)發(fā)環(huán)境的搭建,并簡(jiǎn)單介紹了一個(gè)數(shù)據(jù)網(wǎng)關(guān)的實(shí)例。
本書(shū)內(nèi)容可操作性強(qiáng),適合嵌入式Linux開(kāi)發(fā)初學(xué)者參考,也可以作為高等院校有關(guān)嵌入式系統(tǒng)開(kāi)發(fā)與應(yīng)用的實(shí)驗(yàn)參考書(shū)。
曾經(jīng)夢(mèng)想成為一名作家,就像喜歡的余秋雨、路遙、霍達(dá)一樣,思想躍動(dòng)于筆端。不過(guò)似乎總是缺少那么一份靈性,文學(xué)之路與我漸行漸遠(yuǎn)。幸運(yùn)的是,緣于技術(shù),拜China Unix所賜,有了這本書(shū),也因此圓了一個(gè)兒時(shí)的夢(mèng)想。
記得是從2006年夏天開(kāi)始接觸嵌入式系統(tǒng).學(xué)習(xí)ARM、Linux,雖然忙碌但很充實(shí)。在學(xué)習(xí)的間隙,本著“好記性不如爛筆頭”的原則,想要把所學(xué)都記錄下來(lái)。但是傳統(tǒng)的紙筆記錄太慢,有時(shí)候難以把問(wèn)題的場(chǎng)景清晰而又完整地記錄下來(lái),就尋找合適的網(wǎng)絡(luò)記錄手段,于是就有了筆者的博客。
開(kāi)始純粹是自己的總結(jié)筆記,沒(méi)想到網(wǎng)友的評(píng)價(jià)還不錯(cuò),博客的瀏覽量提高了,也因此交到了很多朋友。
在本書(shū)的編寫(xiě)過(guò)程中,得到了很多人的支持和幫助。
第1章 嵌入式系統(tǒng)設(shè)計(jì)概述1
1.1 嵌入式系統(tǒng)的定義1
1.1.1 嵌入式系統(tǒng)的發(fā)展歷史2
1.1.2 嵌入式系統(tǒng)的組成3
1.1.3 嵌入式系統(tǒng)的特點(diǎn)4
1.2 嵌入式系統(tǒng)設(shè)計(jì)概述5
1.3 嵌入式系統(tǒng)的學(xué)習(xí)方法6
本章總結(jié)6
第2章 磨刀不誤砍柴工7
2.1 Linux概述7
2.2 Linux的安裝8
2.2.1 創(chuàng)建一個(gè)新的虛擬機(jī)9
2.2.2 在虛擬機(jī)上安裝Red Hat Linux 911
2.3 Red Hat Linux 9的初步設(shè)置18
2.3.1 VMware tools的安裝20
2.3.2 網(wǎng)絡(luò)設(shè)置22
2.4 使用shell提高效率24
2.4.1 shell初始化文件配置24
2.4.2 常用的腳本26
2.5 學(xué)習(xí)開(kāi)發(fā)工具的使用30
2.5.1 Vim高級(jí)技巧30
2.5.2 編譯流程32
2.5.3 工程管理器make37
2.6 嵌入式Linux常用的命令42
2.6.1 Linux基本命令42
2.6.2 arm?linux?系列47
2.6.3 diff和patch的使用52
本章總結(jié)57
第3章 走馬觀花58
3.1 本書(shū)基于的硬件平臺(tái)58
3.1.1 ARM概述59
3.1.2 ARM命名規(guī)則60
3.1.3 AT91RM9200簡(jiǎn)介61
3.1.4 K9I開(kāi)發(fā)板概述63
3.2 讓系統(tǒng)先跑起來(lái)65
3.2.1 準(zhǔn)備工作65
3.2.2 下載Boot Loader71
3.2.3 內(nèi)核和文件系統(tǒng)72
3.2.4 搭建交叉編譯環(huán)境75
3.2.5 應(yīng)用程序測(cè)試76
3.3 深入理解硬件平臺(tái)78
3.3.1 最小系統(tǒng)組成78
3.3.2 時(shí)鐘系統(tǒng)78
3.3.3 NVM82
3.3.4 JTAG接口87
本章總結(jié)91
第4章 Boot Loader92
4.1 準(zhǔn)備工作92
4.1.1 整合資源92
4.1.2 代碼閱讀工具93
4.2 Boot Loader概述94
4.2.1 Boot Loader概念94
4.2.2 Boot Loader在嵌入式系統(tǒng)中的必要性95
4.2.3 Boot Loader的啟動(dòng)流程96
4.2.4 Boot Loader如何固化97
4.3 AT91RM9200的啟動(dòng)機(jī)制98
4.3.1 片內(nèi)啟動(dòng)98
4.3.2 片外啟動(dòng)101
4.3.3 3種啟動(dòng)場(chǎng)景102
4.4 Boot Loader的移植103
4.4.1 Loader和Boot104
4.4.2 Uboot的移植108
4.5 Uboot的3種啟動(dòng)方式無(wú)關(guān)性設(shè)計(jì)114
4.5.1 背景介紹115
4.5.2 重映射的理論模型115
4.5.3 Uboot的不合理性分析116
4.5.4 解決方案116
4.6 Boot Loader深入分析119
4.6.1 將ELF文件轉(zhuǎn)換為BIN119
4.6.2 Uboot源代碼分析123
4.6.3 Uboot的命令機(jī)制129
4.6.4 Uboot的source實(shí)現(xiàn)133
本章總結(jié)139
第5章 Linux內(nèi)核移植140
5.1 嵌入式操作系統(tǒng)的選擇140
5.2 Linux 2.6 介紹142
5.3 Makefile體系144
5.4 內(nèi)核的移植150
5.4.1 基本移植151
5.4.2 出現(xiàn)的問(wèn)題155
5.5 內(nèi)核映像格式159
5.5.1 生成過(guò)程160
5.5.2 zImage自解壓引導(dǎo)過(guò)程163
5.6 Boot Loader與內(nèi)核的通信機(jī)制168
5.6.1 基本模型168
5.6.2 tagged list組織方式169
5.6.3 Boot Loader實(shí)現(xiàn)173
5.6.4 Linux內(nèi)核實(shí)現(xiàn)179
本章總結(jié)186
第6章 文件系統(tǒng)187
6.1 概述187
6.2 庫(kù)191
6.2.1 庫(kù)的概述191
6.2.2 庫(kù)的命名191
6.2.3 庫(kù)的制作方法192
6.3 一個(gè)最簡(jiǎn)單的根文件系統(tǒng)193
6.4 基本功能完備的根文件系統(tǒng)201
6.4.1 修改現(xiàn)有的文件系統(tǒng)映像201
6.4.2 從零開(kāi)始制作根文件系統(tǒng)204
6.4.3 網(wǎng)絡(luò)功能213
6.5 嵌入式混合文件系統(tǒng)——EFS226
6.5.1 問(wèn)題提出226
6.5.2 系統(tǒng)設(shè)計(jì)方案226
6.5.3 組件實(shí)現(xiàn)229
6.5.4 系統(tǒng)集成設(shè)計(jì)231
6.5.5 輔映像制作236
本章總結(jié)237
第7章 應(yīng)用程序238
7.1 應(yīng)用開(kāi)發(fā)環(huán)境的建立238
7.1.1 嵌入式Linux的GDB調(diào)試環(huán)境建立238
7.1.2 嵌入式Linux的NFS開(kāi)發(fā)環(huán)境建立239
7.1.3 嵌入式Linux的TFTP開(kāi)發(fā)環(huán)境建立241
7.1.4 嵌入式Linux的DHCP開(kāi)發(fā)環(huán)境建立242
7.2 串行/網(wǎng)絡(luò)數(shù)據(jù)網(wǎng)關(guān)244
7.2.1 基本原理244
7.2.2 數(shù)據(jù)幀的設(shè)計(jì)245
7.2.3 網(wǎng)絡(luò)異常情況的處理245
本章總結(jié)246
參考文獻(xiàn)247
為什么要采用交叉編譯呢?原因有兩個(gè)。一是目標(biāo)平臺(tái)所需要的BootLoader以及OS核心還沒(méi)有建立時(shí),需要做交叉編譯。二是目標(biāo)機(jī)設(shè)備不具備一定的處理器能力和存儲(chǔ)空間,即單獨(dú)在目標(biāo)板上無(wú)法完成程序開(kāi)發(fā),所以只好求助宿主機(jī)。這樣可以在宿主機(jī)上對(duì)即將在目標(biāo)機(jī)上運(yùn)行的應(yīng)用程序進(jìn)行編譯,生成可以在目標(biāo)機(jī)上運(yùn)行的代碼格式,然后移植到目標(biāo)板上,也就是目前嵌入式程序開(kāi)發(fā)的Host/Targct模式。
。3)嵌入式系統(tǒng)的程序需要固化
通用的系統(tǒng)在測(cè)試完成后就可以直接投入使用,其目標(biāo)環(huán)境一般是PC機(jī),因此在總體結(jié)構(gòu)上與開(kāi)發(fā)環(huán)境差別不大。而嵌入式系統(tǒng)的開(kāi)發(fā)環(huán)境是PC機(jī),但是應(yīng)用軟件在目標(biāo)環(huán)境下必須存儲(chǔ)在非易失性存儲(chǔ)器中,保證用戶(hù)關(guān)機(jī)后下次能夠再次使用。因此,在系統(tǒng)應(yīng)用軟件開(kāi)發(fā)完成之后,應(yīng)生成固化版本。
此外,嵌入式系統(tǒng)還需要提供強(qiáng)大的硬件開(kāi)發(fā)工具和軟件包的支持,需要設(shè)計(jì)者從速度、功能和成本綜合考慮。此外,嵌入式系統(tǒng)對(duì)穩(wěn)定性、可靠性、功耗、抗千擾性等方面的性能要求都比通用系統(tǒng)的要求更為嚴(yán)格,所以相對(duì)而言,嵌入式系統(tǒng)的軟件開(kāi)發(fā)難度更大一些。