-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
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書號
詳細書籍分類

深入理解BootLoader

( 簡體 字)
作者:作者:胡爾佳  編著類別:1. -> 程式設計 -> 綜合
譯者:
出版社:機械工業出版社深入理解BootLoader 3dWoo書號: 44704
詢問書籍請說出此書號!

缺書
NT售價: 400

出版日:7/1/2016
頁數:267
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787111485704
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

BootLoader就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射,從而將系統的軟硬件環境設置成一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境。

在嵌入式系統中,通常沒有像PC中的BIOS那樣的固件程序,因此整個系統的加載啟動任務就完全由BootLoader來完成。BootLoader 是CPU上電后運行的第一段程序,它的作用就是對嵌入式系統中的硬件進行初始化,創建內核需要的一些信息并將這些信息通過相關機制傳遞給內核,從而將系統的軟硬件環境帶到一個合適的狀態,最終調用操作系統內核,真正起到引導和加載內核的作用。實際上,一個功能比較強大的BootLoader已經相當于一個微型的操作系統了。

不同的CPU體系結構有不同的BootLoader。有些BootLoader支持多種體系結構的CPU,比如U-Boot就同時支持ARM體系結構和MIPS體系結構。除了依賴于CPU的體系結構外,BootLoader實際上也依賴于具體的嵌入式板級設備的配置。也就是說,對于兩塊不同的嵌入式板而言,即使它們是基于同一種CPU而構建的,要想讓運行在一塊板子上的BootLoader 程序也能運行在另一塊板子上,通常需要修改BootLoader的源程序。因此每款嵌入式產品的BootLoader都是獨一無二的,但我們可以總結出開發或者維護特定BootLoader需要哪些背景知識,掌握了這些背景知識,我們就可以做到以不變應萬變。

為了引導操作系統,BootLoader與CPU體系結構和操作系統有著非常緊密的聯系。在本書中,我們以ARM體系結構和嵌入式Linux操作系統為原型講述BootLoader的原理。通過理論聯系實踐的方法論,讓讀者理解BootLoader的概念,掌握開發BootLoader的方法。本書適合從單片機向ARM過渡并希望了解嵌入式開發的在校學生以及想要從事BootLoader開發移植工作的工程師參考使用。

下面來梳理一下需要哪些背景知識:

1)因為我們引導的操作系統是Linux,所以需要熟悉Linux開發環境。BootLoader也是一串代碼,我們必須了解Linux下編輯器和編譯器的用法;作為Linux下的開發者,對shell腳本和Make工程管理工具也要有必要的了解。第1章對BootLoader做了基本介紹,第2章則詳細介紹了Linux開發環境。

2)因為我們僅僅以ARM體系結構作為原型,所以會在第3∼5章講述ARM體系結構、ARM指令集和ARM獨特的尋址模式。

3)很多嵌入式開發人員都是通信、電子和自動化等專業的,對于計算機的編譯和鏈接掌握得不夠深入,因此第6章介紹編譯和鏈接。控制鏈接行為的鏈接腳本是特有的腳本語言,第7章比較詳細地介紹了該腳本的細節。

4)第8章采用流水燈的實驗融會貫通前面各章節的理論,接著第9章對U-Boot代碼展開分析,最后在第10章一步一步地實現了BootLoader。在此過程中,我們更注重ARM體系結構、編譯鏈接等知識的融會貫通,不會花太多篇幅講解DRAM、MMC等模塊的驅動。

本書能夠成書,要感謝LinkSprite團隊的資源支持和左寶柱在pcDuino v3平臺上的幫助。最后感謝家人和朋友對我的支持,鼓勵我完成這項值得用心去做的工作。因作者水平有限且時間倉促,書中難免存在疏漏,還望廣大讀者不吝賜教。



胡爾佳

2014年11月
內容簡介:

本書主要介紹BootLoader的開發理論、流程與實例,以當前流行的ARM和Linux為藍本,詳細介紹如何一步步實現可用的BootLoader。該書既對Linux下的開發環境、編譯器使用、處理器架構以及編譯和鏈接、鏈接腳本的細節做了較全面的理論介紹,又結合具體的環境向讀者說明了BootLoader的原理和開發流程,使讀者真正懂得BootLoader是如何工作的,即便今后遇到其他處理器或者引導其他操作系統,也能熟知開發或者移植BootLoader的思路。
為了引導操作系統,BootLoader與CPU體系結構和操作系統有著非常緊密的聯系。在本書中,我們以ARM體系結構和嵌入式Linux操作系統為原型講述BootLoader的原理。通過理論聯系實踐的方法,讓讀者理解BootLoader的概念,掌握開發BootLoader的方法。
本書適合從學習單片機向ARM過渡、希望了解嵌入式開發的在校學生以及想要從事BootLoader開發/移植工作的工程師參考。

BootLoader是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境設置成一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境。
本書詳細介紹如何一步一步地實現可用的BootLoader。對Linux下的開發環境、編譯器使用、處理器架構以及編譯和鏈接、鏈接腳本的細節做了較全面的理論介紹,又結合具體的環境向讀者說明BootLoader的原理和開發流程,使讀者真正懂得BootLoader是如何工作的,即便今后遇到其他處理器或者引導其他操作系統,也能熟知開發或者移植BootLoader的思路。
目錄:

第1章 BootLoader的概念 1

1.1 BootLoader的角色 1

1.2 BootLoader的來歷 2

1.3 BootLoader的概念 6

1.3.1 MCU下的BootLoader 10

1.3.2 嵌入式ARM和Linux下的BootLoader 17

1.3.3 PC下的引導流程 18

1.4 本章小結 20

第2章 Linux開發環境 21

2.1 編輯器Vim 21

2.1.1  Vim介紹 22

2.1.2 Vim的兩個基本模式 22

2.1.3 Vim的兩個常用模式 24

2.1.4 Vim的啟動與退出 25

2.1.5 Vim下光標的移動 26

2.1.6 Vim下的復制、粘貼和刪除 28

2.1.7 Vim下的撤銷和重復 28

2.1.8 Vim下的查找和替換 28

2.1.9 Vim下的文件恢復 29

2.1.10 Vim下的插件 29

2.2 編譯器GCC和交叉編譯器 30

2.2.1 GCC的編譯流程 30

2.2.2 GCC的常用編譯選項 31

2.2.3 交叉編譯器 35

2.3 常用shell命令和腳本 37

2.3.1 find命令 38

2.3.2 grep命令 42

2.3.3 管道與重定向 46

2.4 工程管理Make和Makefile 49

2.4.1 Make和Makefile 49

2.4.2 Makefile中的變量 52

2.4.3 自動推導規則 53

2.4.4 嵌套的Makefile 53

2.4.5 Make偽目標 54

2.4.6 自動化變量 56

2.4.7 Make的內嵌函數 56

2.5 本章小結 60

第3章 ARM體系結構 61

3.1 處理器模式 61

3.2 異常 62

3.3 ARM寄存器 63

3.4 通用寄存器 64

3.4.1 未分組的寄存器:R0∼R7 65

3.4.2 分組的寄存器:R8∼R14 65

3.4.3 寄存器R15:程序計數器 66

3.5 程序狀態寄存器 66

3.5.1 PSR位的類型 66

3.5.2 條件標志位 67

3.5.3 中斷禁止位 68

3.5.4 模式位 68

3.6 本章小結 68

第4章 ARM指令集 69

4.1 數據處理指令 69

4.2 分支指令 73

4.3 軟中斷指令 74

4.4 程序狀態寄存器指令 75

4.5 協處理器指令 76

4.6 加載常量的偽指令 78

4.7 本章小結 78

第5章 ARM尋址模式 79

5.1 尋址模式1——數據處理指令的尋址模式 79

5.1.1 編碼格式 80

5.1.2 移位器操作數 80

5.1.3 數據處理操作——立即數 81

5.1.4 數據處理操作——寄存器 82

5.1.5 數據處理操作——立即數的邏輯左移 83

5.1.6 數據處理操作——寄存器的邏輯左移 84

5.1.7 數據處理操作——立即數的邏輯右移 85

5.1.8 數據處理操作——寄存器的邏輯右移 85

5.1.9 數據處理操作——立即數的算術右移 86

5.1.10 數據處理操作——寄存器的算術右移 87

5.1.11 數據處理操作——立即數的循環右移 88

5.1.12 數據處理操作——寄存器的循環右移 89

5.1.13 數據處理操作——擴展的循環右移 90

5.2 尋址模式2——字或無符號字節的load/store指令 90

5.2.1 編碼格式 91

5.2.2 立即數偏移 92

5.2.3 寄存器偏移 93

5.2.4 比例寄存器偏移 94

5.2.5 立即數的前變址尋址 95

5.2.6 寄存器的前變址尋址 96

5.2.7 比例寄存器的前變址尋址 97

5.2.8 立即數的后變址尋址 99

5.2.9 寄存器的后變址尋址 100

5.2.10 比例寄存器的后變址尋址 101

5.3 尋址模式3——雜類load/store指令的尋址方式 103

5.3.1 編碼格式 103

5.3.2 雜類load/store——立即數偏移 104

5.3.3 雜類load/store——寄存器偏移 105

5.3.4 雜類load/store——立即數的前變址尋址 106

5.3.5 雜類load/store——寄存器的前變址尋址 107

5.3.6 雜類load/store——立即數的后變址尋址 108

5.3.7 雜類load/store——寄存器的后變址尋址 109

5.4 尋址模式4——批量load/store 110

5.4.1 編碼格式 110

5.4.2 批量load/store——執行后增加 111

5.4.3 批量load/store——執行前增加 112

5.4.4 批量load/store——執行后減少 112

5.4.5 批量load/store——執行前減少 113

5.4.6 用于棧操作的批量load/store 114

5.5 尋址模式5——協處理器的load/store 115

5.5.1 編碼格式 115

5.5.2 協處理器的load/store——立即數偏移 116

5.5.3 協處理器的load/store——立即數的前變址尋址 117

5.5.4 協處理器的load/store——立即數的后變址尋址 118

5.5.5 協處理器的load/store——無索引 119

5.6 本章小結 119

第6章 編譯和鏈接 120

6.1 ELF文件結構描述 122

6.2 段表 128

6.3 符號表結構 133

6.4 存儲空間分配 138

6.4.1 簡單的存儲布局 138

6.4.2 實際采用的空間布局 139

6.5 重定位信息 140

6.5.1 重定位表項 140

6.5.2 重定位類型 142

6.6 靜態鏈接和重定位 143

6.6.1 符號和符號表 144

6.6.2 符號解析 145

6.6.3 重定位 146

6.7 本章小結 150

第7章 鏈接腳本 151

7.1 鏈接腳本的基本概念 152

7.2 鏈接腳本格式 152

7.3 簡單的鏈接腳本示例 153

7.4 簡單的鏈接腳本命令 154

7.4.1 入口點 154

7.4.2 文件命令 155

7.4.3 格式命令 156

7.4.4 區域別名 157

7.4.5 雜類命令 159

7.5 為符號分配值 160

7.5.1 簡單的分配 161

7.5.2 HIDDEN 161

7.5.3 PROVIDE 162

7.5.4 PROVIDE_HIDDEN 162

7.5.5 源代碼引用 162

7.6 段命令 164

7.6.1 輸出段描述 164

7.6.2 輸出段名稱 165

7.6.3 輸出段地址 165

7.6.4 輸入段描述 166

7.6.5 輸出段數據 171

7.6.6 輸出段關鍵字 172

7.6.7 輸出段丟棄 172

7.6.8 輸出段屬性 172

7.6.9 覆蓋描述 175

7.7 內存命令 177

7.8 鏈接腳本的表達式 178

7.8.1 常量 178

7.8.2 符號常量 179

7.8.3 符號名稱 179

7.8.4 孤立的段 179

7.8.5 位置計數器 180

7.8.6 運算符 182

7.8.7 賦值 183

7.8.8 內建函數 183

7.9 本章小結 187

第8章 Linux下開發流水燈 188

8.1 GNU ARM匯編簡介 188

8.2 流水燈的硬件描述 191

8.3 流水燈的匯編實現 193

8.4 流水燈的編譯和鏈接 195

8.5 本章小結 196

第9章 U-Boot代碼的分析 197

9.1 U-Boot簡介 197

9.2 U-Boot目錄結構 198

9.3 U-Boot配置和編譯 200

9.4 U-Boot代碼分析 207

9.4.1 SPL代碼追蹤 208

9.4.2 U-Boot代碼追蹤 233

9.5 本章小結 245

第10章 實現簡單的BootLoader 246

10.1 STM32下的BootLoader設計 246

10.2 硬件平臺pcDuino簡介 251

10.2.1 pcDuino nano配置 252

10.2.2 pcDuino nano的接口和外設 253

10.2.3 平臺和主芯片介紹 254

10.3 三種方式實現代碼復制和跳轉 255

10.3.1 方式一 255

10.3.2 方式二 258

10.3.3 方式三 259

10.4 實現BootLoader 261

10.4.1 廣義上的BootLoader 261

10.4.2 如何引導Linux 264

10.4.3 引導代碼實現 266

10.4.4 BootLoader引導Linux總結 267

10.5 本章小結 267
序: