"Linux典藏大系"自2010年陸續出版以來,因其內容豐富、講解細膩、通俗易懂和實用性強等特色而深受廣大讀者的喜愛,長期位居同類圖書銷售排行榜的前列,累計銷量近10萬冊。叢書中部分圖書榮獲51CTO讀書頻道"最受讀者喜愛的原創IT技術圖書獎",還有多種圖書的中文繁體字版權輸出到了中國臺灣地區出版發行。叢書中的多個品種被國內幾十所培訓機構和大中專院校選為教材。叢書的出版還得到了國內Linux領域最知名的技術社區ChinaUnix的大力支持。讀者在ChinaUnix社區的論壇上與社區中的Linux愛好者進行了廣泛的交流,取得了良好的學習效果。2014年2月"Linux典藏大系"全新升級版(第2版)正式出版,第2版圖書迎合了Linux技術的發展,全部采用當前流行和穩定的Linux發行版或者相關工具,是Linux愛好者學習Linux的好幫手。
Linux系統移植(第2版)》是獲得了大量讀者好評的"Linux典藏大系"中的《Linux系統移植》的第2版。《Linux系統移植(第2版)》由淺入深,、系統地介紹了Linux系統移植的各方面知識。書中的每個章節都有相應的實例編譯或移植過程,每個移植實例都具有代表性,在實際應用和開發中有很高的參考價值。另外,《Linux系統移植(第2版)》贈送17.5小時多媒體教學視頻及書中涉及的實例源程序,便于讀者高效、直觀地學習。
Linux系統移植(第2版)》分為4篇。第1篇簡單介紹了Linux內核和嵌入式Linux系統開發環境搭建;第2篇介紹了一個最基本的嵌入式系統的組成部分、Bootloader移植、內核移植和文件系統移植;第3篇介紹了LCD、觸摸屏、USB、網卡、音頻、SD卡、NandFlash等流行的設備驅動移植過程;第4篇從嵌入式產品角度出發,介紹了GUI、Qtopia、嵌入式數據庫BerkeleyDB和SQLite、嵌入式Web服務器BOA和Thttpd、JVM虛擬機的移植及目前流行的VoIP技術和相關協議。
Linux系統移植(第2版)》適合嵌入式Linux系統入門人員、Linux系統開發和移植、系統分析師等相關人員閱讀,也適合作為大中專院校相關專業的實驗教材使用。
國內一本Linux系統移植圖書,ChinaUnix社區力薦!通過15個典型案例,深入剖析Linux系統移植的方法 贈送17.5小時高清語音視頻講解,贈送教學PPT
內容新穎:書中的開發環境、編譯工具和軟件都是當前流行的穩定版本
內容:涵蓋Linux內核、文件系統、驅動及數據庫等各種系統的移植
循序漸進:遵循原理分析,代碼分析,編譯,測試,移植的學習順序
講解詳細:所有編譯過程都附有編譯命令,并對復雜的命令給出了詳細說明
技巧性強:穿插了大量的經驗和技巧,并對容易出錯的地方給出了專門的提示
注重實戰:通過典型案例,讓讀者深入體驗Linux系統移植的方法和全過程
Linux精品圖書推薦(請點叢書鏈接查看)
ARM嵌入式Linux系統開發詳解(第2版)》
Linux網絡編程(第2版)》
Linux環境C程序設計(第2版)》
Linux C程序設計王者歸來》
零點起飛學Linux C編程》
Linux驅動開發入門與實戰(第2版)》
Linux典藏大系(套裝全2冊):Linux從入門到精通+Shell從入門到精通》
Linux典藏大系(套裝全4冊):Linux從入門到精通+Linux系統管理與網絡管理+Linux服務器架設指南+Shell從入門到精通》
劉剛,嵌入式軟件工程師。畢業于廣東工業大學,獲得了計算機專業碩士學位。畢業后長期從事嵌入式Linux領域的研發工作。現任職于某知名通信公司,從事嵌入式通信領域的開發工作。對嵌入式Linux技術有濃厚的興趣,對公司的產品研發起到了很大的推動作用。曾經參與了接入網設備的開發和TD上網卡驅動開發及移植等項目。
趙劍川,嵌入式軟件工程師。畢業于廣東工業大學,獲得了自動化專業碩士學位。畢業后一直從事嵌入式Linux領域的驅動開發工作。先后任職于兩家知名的通信設備制造公司,從事嵌入式軟件開發。參與了公司多項大型項目的研發工作,積累了豐富的開發經驗。目前致力于WLAN領域的研發工作。
第1篇 系統移植基礎篇
第1章 Linux內核介紹
1.1 系統調用接口
1.1.1 Linux系統調用
1.1.2 用戶編程接口
1.1.3 系統調用與服務例程的對應關系
1.1.4 系統調用過程
1.1.5 系統調用傳遞的參數
1.2 進程管理
1.2.1 進程
1.2.2 進程描述符
1.2.3 進程狀態
1.2.4 進程調度
1.2.5 進程地址空間 第1篇 系統移植基礎篇
第1章 Linux內核介紹
1.1 系統調用接口
1.1.1 Linux系統調用
1.1.2 用戶編程接口
1.1.3 系統調用與服務例程的對應關系
1.1.4 系統調用過程
1.1.5 系統調用傳遞的參數
1.2 進程管理
1.2.1 進程
1.2.2 進程描述符
1.2.3 進程狀態
1.2.4 進程調度
1.2.5 進程地址空間
1.3 內存管理
1.3.1 內存管理技術
1.3.2 內存區管理
1.3.3 內核中獲取內存的幾種方式
1.4 虛擬文件系統
1.4.1 虛擬文件系統作用
1.4.2 文件系統的注冊
1.4.3 文件系統的安裝和卸載
1.5 設備驅動程序
1.5.1 字符設備驅動程序
1.5.2 塊設備驅動程序
1.5.3 網絡設備驅動程序
1.5.4 內存與1/0操作
1.6 小結
第2章 嵌入式Linux開發環境搭建
2.1 虛擬機及Linux安裝
2.1.1 虛擬機的安裝
2.1.2 虛擬機和主機通信設置
2.1.3 虛擬機與主機共享文件
2.1.4 虛擬機與主機文件傳輸
2.2 交叉編譯工具
2.2.1 交叉編譯工具安裝
2.2.2 交叉編譯器測試
2.3 超級終端和Minicom
2.3.1 超級終端軟件的安裝
2.3.2 配置Minicom
2.3.3 配置SecureCRT
2.4 內核、文件系統加載工具
2.4.1 燒寫Bootloader
2.4.2 內核和文件系統下載
2.4.3 應用程序和文件傳輸
2.5 在開發中使用網絡文件系統(NFS)
2.5.1 虛擬機設置
2.5.2 虛擬機的IP地址設置
2.5.3 驗證網絡連接
2.5.4 設置共享目錄
2.5.5 啟動NFS服務
2.5.6 修改共享配置后
2.5.7 掛載NFS
2.5.8 雙網卡掛載NFS
2.6 小結
第2篇 系統移植技術篇
第3章 Bootloader移植
3.1 Bootloader介紹
3.1.1 Bootloader與嵌入式Linux系統的關系
3.1.2 Bootloader基本概念
3.1.3 Bootloader啟動過程
3.2 Bootloader之U-Boot
3.2.1 U-Boot優點
3.2.2 U-Boot的主要功能
3.2.3 U-Boot目錄結構
3.2.4 U-Boot的編譯
3.3 小結
第4章 Linux內核裁剪與移植
4.1 Linux內核結構
4.1.1 內核的主要組成部分
4.1.2 內核源碼目錄介紹
4.2 內核配置選項
4.2.1一般選項
4.2.2 內核模塊加載方式支持選項
4.2.3 系統調用、類型、特性、啟動相關選項
4.2.4 網絡協議支持相關選項
4.2.5 設備驅動支持相關選項
4.2.6 文件系統類型支持相關選項
4.2.7 安全相關選項
4.2.8 其他選項
4.3 內核裁剪及編譯
4.3.1 安裝內核源代碼
4.3.2 檢查編譯環境設置
4.3.3 配置內核
4.3.4 編譯內核
4.4 內核升級
4.4.1 準備升級內核文件
4.4.2 移植過程
4.5 小結
第5章 嵌入式文件系統制作
5.1 文件系統選擇
5.1.1 Flash硬件方案比較
5.1.2 嵌入式文件系統的分層結構
5.2 基于Flash的文件系統
5.2.1 JFFS文件系統(Journalling Flash File System)
5.2.2 YAFFS文件系統(Yet Another Flash File System)
5.2.3 Cramfs文件系統(Compressed ROM File System)
5.2.4 Romfs文件系統(ROM File System)
5.3 基于RAM的文件系統
5.4 文件系統的制作
5.4.1 制作Ramdisk文件系統
5.4.2 制作YAFFS2文件系統
5.4.3 制作JFFS2文件系統
5.4.4 其他文件系統制作
5.5 小結
第3篇 系統移植與驅動篇
第6章 LCD驅動移植
6.1 認識LCD相關硬件原理
6.1.1 LCD概述
6.1.2 LCD控制器
6.1.3 LCD控制器方塊圖
6.1.4 LCD控制器操作
6.1.5 LCD控制寄存器
6.2 LCD參數設置
6.3 內核LCD驅動機制
6.3.1 FrameBuffer概述
6.3.2 FrameBuffer 設備驅動的結構
6.4 Linux 2.6.32的LCD驅動源碼分析
6.4.1 LCD驅動開發的主要工作
6.4.2 s3c2410fb_init()函數分析
6.4.3 s3c2410fb_probe()函數分析
6.4.4 s3c2410fb_remove()函數分析
6.5 移植內核中的LCD驅動
6.5.1 LCD硬件電路圖
6.5.2 修改LCD源碼
6.5.3 配置內核
6.6 小結
第7章 觸摸屏驅動移植
7.1 觸摸屏概述
7.1.1 觸摸屏工作原理
7.1.2 觸摸屏的主要類型
7.2 S3C2440 ADC接口使用
7.2.1 S3C2440觸摸屏接口概述
7.2.2 S3C2440觸摸屏接口操作
7.3 2.6內核觸摸屏驅動源碼分析(s3c2410_ts.c源碼分析)
7.4 Linux內核輸入子系統介紹
7.4.1 Input子系統概述
7.4.2 輸入設備結構體
7.4.3 輸入鏈路的創建過程
7.4.4 使用Input子系統
7.4.5 編寫輸入設備驅動需要完成的工作
7.5 觸摸屏驅動移植和內核編譯
7.5.1 修改初始化源碼
7.5.2 修改硬件驅動源碼s3c2440_ts.c
7.5.3 修改Kconfig和Makefile
7.5.4 配置編譯內核
7.5.5 觸摸屏測試程序設計
7.6 小結
第8章 USB設備驅動移植
8.1 USB協議
8.1.1 USB協議的系統主要組成部分
8.1.2 總線物理拓撲結構
8.1.3 USB設備、配置、接口、端點
8.1.4 USB設備狀態
8.1.5 USB枚舉過程
8.1.6 USB請求塊(URB)
8.2 USB主機驅動
8.2.1 USB主機驅動結構和功能
8.2.2 主機控制器驅動(usb_hcd)
8.2.3 OHCI主機控制器驅動
8.2.4 S3C24XX OHCI主機控制器驅動實例
8.3 USB設備驅動
8.3.1 USB骨架程序分析
8.3.2 USB驅動移植的時鐘設置
8.4 USB鼠標鍵盤驅動
8.4.1 USB鼠標驅動代碼分析
8.4.2 USB鍵盤驅動代碼分析
8.4.3 內核中添加USB鼠標鍵盤驅動
8.5 U盤驅動
8.5.1 內核配置
8.5.2 移植和測試
8.6 小結
第9章 網卡驅動程序移植
9.1 以太網概述
9.1.1 以太網連接
9.1.2 以太網技術概述
9.1.3 以太網的幀結構
9.2 網絡設備驅動程序體系結構
9.2.1 嵌入式Linux網絡驅動程序介紹
9.2.2 Linux網絡設備驅動的體系結構
9.2.3 網絡設備驅動程序編寫方法
9.2.4 網絡設備驅動程序應用實例
9.3 net_device 數據結構
9.3.1 全局信息
9.3.2 硬件信息
9.3.3 接口信息
9.3.4 設備方法
9.3.5 公用成員
9.4 DM9000網卡概述
9.4.1 DM9000網卡總體介紹
9.4.2 DM9000網卡的特點
9.4.3 內部寄存器
9.4.4 功能描述
9.5 DM9000網卡驅動程序移植
9.5.1 DM9000網卡連接
9.5.2 驅動分析--硬件的數據結構
9.5.3 驅動分析--數據讀寫函數
9.5.4 驅動分析--重置網卡
9.5.5 驅動分析--初始化網卡
9.5.6 驅動分析--打開和關閉網卡
9.5.7 驅動分析--數據包的發送與接收
9.5.8 DM9000網卡驅動程序移植
9.6 小結
第10章 音頻設備驅動程序移植
10.1 音頻設備接口
10.2 Linux音頻設備驅動--OSS驅動框架
10.3 Linux音頻設備驅動--ALSA驅動框架
10.4 音頻設備應用程序編寫
10.5 音頻設備驅動移植
10.6 音頻播放程序madplay的移植
10.7 小結
第11章 SD卡驅動移植
11.1 SD卡簡介
11.2 SD卡驅動程序分析
11.3 SD卡移植步驟
11.4 小結
第12章 NandFlash驅動移植
12.1 NandFlash介紹
12.2 NandFlash驅動介紹
12.3 NandFlash驅動移植
12.4 小結
第4篇 系統移植高級篇
第13章 MiniGUI與移植
13.1 MiniGUI在上位機中的安裝
13.2 MiniGUI的交叉編譯和移植
13.3 小結
第14章 Qt開發與Qtopia移植
14.1 Qt安裝與編程
14.2 Qtopia Core在X86平臺上的安裝和應用
14.3 Qtopia Core在嵌入式Linux上的移植
14.4 小結
第15章 嵌入式數據庫Berkeley DB移植
15.1 數據庫的基本概念
15.2 Berkeley DB數據庫安裝
15.3 使用Berkeley DB數據庫
15.4 移植Berkeley DB數據庫
15.5 小結
第16章 嵌入式數據庫SQLite移植
16.1 SQLite支持的SQL語句
16.2 SQLite數據庫編譯、安裝和使用
16.3 移植SQLite
16.4 移植SQLite數據庫
16.5 小結
第17章 嵌入式Web服務器BOA移植
17.1 BOA介紹
17.2 BOA編譯和HTML頁面測試
17.3 CGI腳本測試
17.4 BOA交叉編譯與移植
17.5 BOA與SQLite結合
17.6 小結
第18章 嵌入式Web服務器Thttpd移植
18.1 Thttpd介紹
18.2 Thttpd編譯和HTML頁面測試
18.3 CGI腳本測試
18.4 Thttpd交叉編譯與移植
18.5 Thttpd與嵌入式數據庫結合
18.6 小結
第19章 JVM及其移植
19.1 JVM介紹
19.2 類裝載
19.3 垃圾回收
19.4 解析器
19.5 Java編程淺析
19.6 KVM執行過程
19.7 PC機安裝JVM
19.8 KVM移植和測試
19.9 小結
第20章 VoIP技術與Linphone編譯
20.1 VoIP介紹
20.2 oSIP協議概述
20.3 oSIP狀態機
20.4 oSIP解析器
20.5 oSIP事務層
20.6 SIP建立會話的過程
20.7 RTP協議
20.8 Linphone編譯與測試
20.9 Linphone交叉編譯
20.10 小結
前言]
隨著各種芯片技術的發展,各種嵌入式產品也如雨后春筍一般地出現了。目前,嵌入式產品應用領域涉及移動通信、汽車、醫療、家電等很多領域。而且,如今的嵌入式硬件的速度和容量越來越接近于PC,因此在這些嵌入式產品上運行操作系統就成為了可能。一直以來,很多企業花費了巨大成本研發了大量運行在PC上的軟件產品。如果將這些的軟件應用在嵌入式系統中,將會成為快速開發嵌入式系統,降低嵌入式產品開發成本,提高軟件穩定性和安全性的重要途徑。
目前,國內圖書市場上專門介紹Linux系統移植的圖書只有筆者2011年初出版的《Linux系統移植》一書。該書也是獲得了大量讀者好評的"Linux典藏大系"中的一個分冊,出版后填補了該領域的空白。隨著時間的推移和技術的發展,這本書已經逐漸不能適應讀者的需求,因此筆者對這本書進行了升級和改版,便有了這本書的第2版。
本書在第1版的基礎上進行了全新改版,升級了操作系統版本和Linux內核版本,并將編程環境和各種開發工具升級到了當前近期版本,也對第1版書中的一些疏漏進行了修訂,對書中的一些實例和代碼進行了重新表述,使得本書更加易讀。相信升級后的圖書易讀性更強。
本書是筆者從事嵌入式開發的經驗總結,希望能給目前從事嵌入式研發和學習的讀者提供最有效的幫助,能使讀者的嵌入式系統最快地運行起來,使讀者在最短的時間內成功移植開源軟件。
本書使用的源代碼均為開源代碼,讀者可以從對應的官方網站獲得。本書對于源碼的重要部分進行了詳細的分析,建議讀者在閱讀時對應源碼進行閱讀效果會更好。
關于"Linux典藏大系"
"Linux典藏大系"是清華大學出版社自2010年1月以來陸續推出的一個圖書系列,截止2012年,已經出版了10余個品種。該系列圖書涵蓋了Linux技術的方方面面,可以滿足各個層次和各個領域的讀者學習Linux技術的需求。該系列圖書自出版以來獲得了廣大讀者的好評,已經成為了Linux圖書市場上最耀眼的明星品牌之一。其銷量在同類圖書中也名列前茅,其中一些圖書還獲得了"51CTO讀書頻道"頒發的"最受讀者喜愛的原創IT技術圖書獎"。該系列圖書在出版過程中也得到了國內Linux領域最知名的技術社區ChinaUnix(簡稱CU)的大力支持和幫助,讀者在CU社區中就圖書的內容與活躍在CU社區中的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)將一些表達不的地方表述得更加。
本書特色
1.內容、選材具有特點
本書介紹了最小系統的引導程序移植、內核移植、文件系統移植、各種驅動移植等內容。另外,本書還專門介紹了嵌入式數據庫、嵌入式GUI、嵌入式Web服務器、嵌入式JVM、VoIP技術等內容。對于數據庫、GUI、Web服務器分別選擇了兩種進行介紹,讀者可以從性能上進行對比,然后應用在自己的項目中。
2.內容由淺入深、循序漸進,可操作性強
本書按照由淺入深、循序漸進的梯度安排內容,適合各個層次的讀者閱讀。書中每章內容都遵循原理分析?代碼、分析?編譯?測試?移植的學習順序,具有較強的可操作性。
3.編譯過程詳細
本書的編譯過程都附有詳細的編譯命令,對于復雜的命令均給出了說明,方便讀者實際操作。讀者可以邊閱讀本書,邊動手進行實驗。
4.貫穿了大量的編譯技巧,可迅速提升移植水平
本書在講解編譯過程時貫穿了大量的編譯技巧,并針對移植過程中的編譯錯誤介紹了如何發現錯誤的源頭,同時給出了解決方法。這有利于讀者解決類似的編譯問題,提升系統移植的水平。
5.提供多媒體教學視頻和源文件
本書贈送17.5小時多媒體教學視頻和實例源文件,便于讀者高效、直觀地學習。這些學習資料需要讀者按照封底的提示自行下載。
本書內容概述
本書注重實踐,包含了豐富的移植實例,這些實例各具特點,從基礎的系統組成到設備驅動,再到高級應用,適合各個層面的讀者學習和研究。本書中的實例是筆者根據實際項目中嵌入式產品的功能需求,專門選擇的具有代表性的開源軟件進行移植,包含了常見的嵌入式產品的最小系統組成部分移植,同時選擇了應用比較多的數據庫、Web服務器、GUI等進行移植。筆者通過親自體會,在每次編譯和移植過程中詳細說明移植的細節,對移植過程中遇到的問題也給出了解決方法。本書還介紹了VoIP技術,并結合源碼分析了VoIP的實現,同時還介紹了VoIP的詳細編譯過程。本書共20章,分為4篇。簡單介紹如下。
第1篇 系統移植基礎篇(第1~2章)
本篇介紹了系統移植的基礎。首先對Linux內核進行了簡單介紹,然后介紹了系統移植環境的搭建。通過對本篇內容的學習,讀者可以對Linux系統有初步認識,能掌握嵌入式Linux開發工具的使用,能正確搭建開發平臺,能夠制作編譯好的嵌入式系統。
第2篇 系統移植技術篇(第3~5章)
本篇介紹了一個最基本的嵌入式系統的組成部分、Bootloader、內核和文件系統的移植。學習完本篇內容后,讀者能夠動手獨立編譯和移植一個基本的嵌入式系統。
第3篇 系統移植驅動篇(第6~12章)
本篇介紹了各種驅動的移植,包括LCD、觸摸屏、USB、網卡、音頻、SD卡、NandFlash等流行的設備驅動的移植過程。通過對本篇內容的學習,讀者對嵌入式Linux驅動移植將會有一定的認識,可以基本掌握驅動的移植步驟,能完成簡單的驅動移植。
第4篇 系統移植高級篇(第13~20章)
本篇從嵌入式產品的角度出發,介紹了系統移植中各種類型的高層軟件移植,包括GUI、數據庫、Web服務器、虛擬機的移植,還介紹了目前流行的VoIP技術,并結合源碼介紹了VoIP相關協議和編譯方法。通過學習本篇內容,讀者可以掌握很多移植技巧,能夠將這些實例應用到自己的項目中。
書摘]
第3 章 Bootloader 移植
Bootloader 是在嵌入式系統運行之前運行的一段程序。運行Bootloader 程序可以初始化硬件設備,建立內存空間的映射圖,從而將系統的軟硬件環境調整到一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境。本章主要介紹兩種常見的Bootloader 及其移植過程。
3.1 Bootloader 介紹
體系結構不同的CPU 都有不同的Bootloader,有些Bootloader 支持多種不同類型體系結構的處理器,如U-boot。通常,Bootloader 不但依賴于CPU 的體系結構,而且依賴于特定的嵌入式板設備的配置,即對于兩塊不同的嵌入式板而言,即使它們是基于同一種CPU
而構建的,要運行在一塊開發板上的Bootloader 程序能夠運行在另一塊開發板上,通常需要修改Bootloader 的源程序以適應不同的開發板。
3.1.1 Bootloader 與嵌入式Linux 系統的關系
從軟件的角度可將嵌入式Linux 系統劃分成4 個層次,4 個層次由低層到高層分別如下所述。
引導加載程序:包括固化在固件中(firmware)的boot 代碼(可選)和Bootloader兩大部分。
內核:給具體類型開發板定制的內核及控制內核引導系統的參數。
文件系統:包括根文件系統和建立于FLASH 內存設備上的文件系統。
用戶應用程序:用戶的應用程序,包括GUI、Web 服務器、數據庫、網絡協議棧等。
3.1.2 Bootloader 基本概念
Bootloader 是在操作系統內核運行前執行的一段小程序,類似在啟動Windows 系統前運行的BIOS 程序。通過這段小程序,完成了對必要硬件設備的初始化,創建內核需要的信息并將這些信息通過相關機制傳遞給內核,從而將系統的軟硬件環境帶到一個合適的狀態,最終調用操作系統內核,起到引導和加載內核的作用。第3 章 Bootloader 移植
1.Bootloader的安裝媒介
系統每次加電或復位后,CPU 都會固定從預先設定的地址上取指令。基于CPU 構建的嵌入式系統通常都有某種類型的固態存儲設備(比如ROM、EEPROM 或FLASH 等)被映射到這個預先設定的地址上。一個同時安裝有Bootloader、內核的啟動參數、內核映像和根文件系統映像的固態存
儲設備的典型空間分配結構圖,如圖3.1 所示。
圖3.1 固態存儲設備的典型空間分配結構圖
2.Bootloader啟動過程分類
Bootloader 啟動過程分為單階段和多階段兩種。相對單階段Bootloader 而言,多階段Bootloader 的功能更加復雜,可移植性更加優越。從固態存儲設備上啟動Bootloader 一般可分為兩個階段的啟動過程,即stage 1 和stage 2。
3.Bootloader的操作模式
絕大部分Bootloader 均包含兩種不同類型的操作模式,即啟動加載模式和下載模式。
啟動加載模式:這種模式也稱為"自主"模式。即Bootloader 從目標機上的某個固態存儲設備上將操作系統加載到RAM 中運行,整個過程并沒有用戶的介入。啟動加載模式為Bootloader 的正常工作模式,因此在嵌入式產品時,Bootloader只能工作在該模式下。
下載模式:這種模式下,目標機上的Bootloader 將通過串口連接、網絡連接或USB連接等通信手段從主機(Host)下載文件,如下載內核映像文件和文件系統映像文件等。從主機下載的文件通常首先被Bootloader 保存到目標板的ROM 中,然后再被Bootloader 寫到目標板上的FLASH 類固態存儲設備中。Bootloader 的這種模式通常在及時次安裝內核與根文件系統時被使用,或者在系統更新時使用。Bootloader 工作在下載模式時,通常都會提供一個命令行接口給它的終端用戶,以供用戶通過命令行控制Bootloader 的工作。
3.1.3 Bootloader 啟動過程
Bootloader 的啟動過程分為stage1 和stage2 兩個階段,通常stage1 是用匯編語言完成,而stage2 則用C 語言來實現,以便于在stage2 階段實現更加復雜的功能和取得更好的代碼可讀性及可移植性。下面介紹兩個階段分別完成的不同工作。
1.stage1完成的工作
(1)基本的硬件初始化包括以下工作:
屏蔽所有中斷。為中斷提供服務通常是操作系統設備驅動程序的責任,因此在Bootloader 的啟動全過程中可以不必響應任何中斷。屏蔽中斷可以通過寫 CPU 的中斷屏蔽寄存器或狀態寄存器(比如 ARM 的 CPSR 寄存器)來完成。
設置CPU 速度和時鐘頻率。
初始化RAM。包括正確設置系統內存控制器的功能寄存器,以及各內存庫控制寄存器等。
初始化LED。典型地,通過GPIO 來驅動LED,其目的是檢查當前系統的狀態是OK 還是ERROR。如果板子上沒有LED,那么也可以通過初始化UART 向串口打印Bootloader 的Logo 字符信息來完成這一點。
關閉CPU 內部指令和數據cache 燈。
(2)準備RAM 空間加載stage2。為了獲得更快的執行速度,通常把stage2 加載到RAM 空間中來執行,所以必須準備好一段可用的RAM 空間范圍用來加載Bootloader 的stage2。
(3)復制stage2 到RAM 中。執行復制時要確定兩類地址:及時,stage2 的可執行映像在固態存儲設備的存放起始地址和終止地址;第二,RAM 空間的起始地址。
(4)設置堆棧指針sp。設置堆棧指針是為執行C 語言代碼做準備。在設置堆棧指針sp之前,也可以關閉LED 燈,以提示用戶我們準備跳轉到stage2。
(5)跳轉到stage2 的C 入口點。在ARM 處理器中,實現跳轉的方法是通過修改PC寄存器為合適的地址。
2.stage2完成的工作
(1)使用匯編語言跳轉到main()入口函數。用匯編語言寫一段trampoline 小程序,并將這段trampoline 小程序作為stage2 可執行映像的執行入口點。然后在trampoline 匯編小程序中用CPU 跳轉指令跳入main()函數中去執行;而當main()函數返回時,CPU 執行路徑再次回到trampoline 程序。這種方法的思想是:用這段trampoline 小程序作為main()函數的外部包裹(external wrapper)。
(2)初始化本階段要使用到的硬件設備。初始化至少一個串口,以便和終端用戶進行I/O 輸出信息、初始化計時器等。
(3)檢測系統的內存映射。所謂內存映射是指在整個4GB 物理地址空間中,有哪些地址范圍被分配用來尋址系統的RAM 單元。
(4)加載內核映像文件和根文件系統映像文件。包括規劃內存分配布局和從Flash 上復制數據。規劃內存分配布局包括內核映像所占用的內存范圍和根文件系統所占用的內存范圍。
(5)設置內核的啟動參數。在將內核映像和根文件系統映像復制到RAM 空間中后,就可以準備啟動Linux 內核了。在調用內核之前,應該做一步準備工作,即設置Linux 內核的啟動參數。
這個商品不錯~
書有點臟了。注重整潔啊。
很不錯,性價比高。。。
hao
快遞員很貼心!!!
書很不錯 好好看看那了
經典書籍
書不錯,學習中
感覺打折的商品就是拿剩貨來賣啊,書的封面很多磨過的劃痕,還很多灰塵,一看就是賣不出的剩書。
好
整體感覺不錯,性價比很高,紙質好
感覺輸的質量很不錯,內容也可以
書還可以,備著,還沒有看。
整體感覺一般,物流還是比較快的
還不錯
很好,不過現在太忙有時間再研究。
不錯、如果提供視頻光盤就好了
好
好貨又便宜
整體感覺不錯
內容一般吧,大部分內容都是按照天嵌2440開發板的用戶手冊搬過來的,只講步驟,沒有原理。
不過寫的通俗易懂,特別是最后幾個章節,操作步驟非常詳細!
是幫同學買的,具體好壞就不知道啦,反正他說不錯的
整書通篇都是簡單的介紹,看完本書,你是絕對不會系統移植的,買那么多書當中,這本是相當坑的
嵌入式linux,熟悉底層,不錯的入門參考,值得擁有!
從哪里拿來的箱底貨,書皮磨損特別嚴重,都不如地攤貨,破東西
很實用的教材,我最近在學習嵌入式linux,買來看看,感覺很不錯
自學linux差不多一年了,由于沒人帶,一直在盲目摸索著,這本書在移植方面給了我幫助