嵌入式Linux基礎教程(第2版)

來源:互聯網
上載者:User

嵌入式Linux基礎教程(第2版)

 

編輯精選

  嵌入式Linux權威著作
   Amazon全五星評價
  全面剖析嵌入式Linux開發,揭示大量技術內幕

 

 

 

基本資料
  • 原書名:Embedded Linux Primer:A Practical Real-World Approach, Second Edition
  • 作者: (美)Christopher Hallinan   
  • 譯者: 周鵬
  • 叢書名: 圖靈程式設計叢書
  • 出版社:人民郵電出版社
  • ISBN:9787115278272
  • 上架時間:2012-4-20
  • 出版日期:2012 年5月
  • 頁碼:449
  • 定價 :¥89.00
  • 普通會員 : ¥66.75(75折)
  • 1-3星會員: ¥64.97(73折)
  • 4-5星會員: ¥62.30(70折)
  • 校園優惠價 :¥64.97(73折)

http://product.china-pub.com/199313&cnblogs

 

內容簡介 書籍
電腦書籍
  《嵌入式Linux基礎教程(第2版)》是嵌入式Linux 的經典教程,介紹了引導載入程式、系統初始化、檔案系統、快閃記憶體和核心、應用程式調試技巧等,還講述了構建Linux 系統的工作原理,用於驅動不同架構的配置,Linux 核心源碼樹的特性,如何根據需求配製核心運行時的行為,如何擴充系統功能,用於構建完整嵌入式Linux 發行版的常用構建系統,USB 子系統和系統組態工具udev 等內容。更重要的是,本書闡述了如何修改系統使之滿足讀者自身的需求,確保讀者能夠從中學習一些嵌入式工程中非常有用的提示和技巧。br
  《嵌入式Linux基礎教程(第2版)》適合Linux 程式員閱讀,也可作為高等院校相關專業師生的參考讀物。    目錄《嵌入式linux基礎教程(第2版)》
第1章 入門 1
1.1 為什麼選擇linux 1
1.2 嵌入式linux現狀 2
1.3 開源和gpl 2
1.4 標準及相關組織 3
1.4.1 linux標準基礎 3
1.4.2 linux基金會 4
1.4.3 電信級linux 4
1.4.4 移動linux計劃:moblin 4
1.4.5 服務可用性論壇 5
1.5 小結 5
第2章 綜述 6
2.1 嵌入與非嵌入 6
2.2 剖析嵌入式系統 7
2.2.1 典型的嵌入式linux開發環境 8
2.2.2 啟動目標板 9
2.2.3 引導核心 10
2.2.4 核心初始化:概述 12
2.2.5 第一個使用者空間進程:init 13.2.3 儲存 14
2.3.1 快閃記憶體 14
2.3.2 nand型快閃記憶體 15
2.3.3 快閃記憶體的用途 16
2.3.4 快閃記憶體檔案系統 17
2.3.5 記憶體空間 17
2.3.6 執行內容 19
2.3.7 進程虛擬記憶體 20
2.3.8 交叉開發環境 21
2.4 嵌入式linux發行版 22
2.4.1 商業linux發行版 24
2.4.2 打造自己的linux發行版 24
2.5 小結 24
第3章 處理器基礎 26
3.1 獨立處理器 26
3.1.1 ibm 970fx 27
3.1.2 英特爾奔騰m 27
3.1.3 英特爾淩動tm 28
3.1.4 飛思卡爾mpc7448 28
3.1.5 配套晶片集 28
3.2 整合處理器:片上系統 30
3.2.1 power架構 30
3.2.2 飛思卡爾power架構 30
3.2.3 飛思卡爾powerquicc i 31
3.2.4 飛思卡爾powerquicc ii 32
3.2.5 powerquicc ii pro 32
3.2.6 飛思卡爾powerquicc iii 33
3.2.7 飛思卡爾qoriqtm 34
3.2.8 amcc power架構 36
3.2.9 mips 38
3.2.10 broadcom mips 38
3.2.11 其他mips 39
3.2.12 arm 40
3.2.13 德州儀器arm 40
3.2.14 飛思卡爾arm 42
3.2.15 其他arm處理器 43
3.3 其他架構 43
3.4 硬體平台 43
3.4.1 compactpci 43
3.4.2 atca 44
3.5 小結 44
第4章 linux核心:不同的視角 46
4.1 背景知識 46
4.1.1 核心版本 47
4.1.2 核心源碼庫 48
4.1.3 使用git下載核心代碼 49
4.2 linux核心的構造 49
4.2.1 頂層源碼目錄 49
4.2.2 編譯核心 50
4.2.3 核心主體:vmlinux 52
4.2.4 核心鏡像的組成部分 53
4.2.5 子目錄的布局 56
4.3 核心構建系統 57
4.3.1 .config檔案 57
4.3.2 配置編輯器 58
4.3.3 makefile目標 61
4.4 核心配置 66
4.4.1 定製配置選項 68
4.4.2 核心makefile 71
4.5 核心文檔 72
4.6 獲得定製的linux核心 72
4.7 小結 73
第5章 核心初始化 75
5.1 合成核心鏡像:piggy及其他 75
5.1.1 image對象 78
5.1.2 與具體架構相關的對象 78
5.1.3 啟動程序載入程式 79
5.1.4 引導訊息 80
5.2 初始化時的控制流程 83
5.2.1 核心入口:head.o 84
5.2.2 核心啟動:main.c 85
5.2.3 架構設定 86
5.3 核心命令列的處理 87
5.4 子系統初始化 92
5.5 init線程 94
5.5.1 通過initcalls進行初始化 95
5.5.2 initcall_debug 96
5.5.3 最後的引導步驟 97
5.6 小結 98
第6章 使用者空間初始化 100
6.1 根檔案系統 100
6.1.1 fhs:檔案系統階層標準 101
6.1.2 檔案系統布局 101
6.1.3 最小化的檔案系統 102
6.1.4 嵌入式根檔案系統帶來的挑戰 103
6.1.5 試錯法 104
6.1.6 自動化檔案系統構建工具 104
6.2 核心的最後一些引導步驟 104
6.2.1 第一個使用者空間程式 106
6.2.2 解決依賴關係 106
6.2.3 定製的初始進程 107
6.3 init進程 107
6.3.1 inittab 109
6.3.2 web伺服器啟動指令碼樣本 111
6.4 初始ram磁碟 112
6.4.1 使用initrd進行引導 113
6.4.2 引導載入程式對initrd的支援 113
6.4.3 initrd的奧秘所在:
linuxrc 115
6.4.4 initrd探究 116
6.4.5 構造initrd鏡像 116
6.5 使用initramfs 117
6.6 關機 119
6.7 小結 120
第7章 引導載入程式 122
7.1 引導載入程式的作用 122
7.2 引導載入程式帶來的挑戰 123
7.2.1 dram控制器 123
7.2.2 快閃記憶體與ram 123
7.2.3 鏡像的複雜性 124
7.2.4 執行環境 126
7.3 通用引導載入程式:das u-boot 126
7.3.1 擷取u-boot 127
7.3.2 配置u-boot 127
7.3.3 u-boot的監控命令 129
7.3.4 網路操作 130
7.3.5 儲存子系統 132
7.3.6 從磁碟引導 133
7.4 移植u-boot 133
7.4.1 ep405的u-boot移植 133
7.4.2 u-boot makefile中的配置目標 134
7.4.3 ep405的第一次構建 135
7.4.4 ep405 處理器初始化 136
7.4.5 與具體板卡相關的初始化 138
7.4.6 移植總結 141
7.4.7 u-boot鏡像格式 141
7.5 裝置樹對象(扁平裝置樹) 143
7.5.1 裝置樹源碼 145
7.5.2 裝置樹編譯器 148
7.5.3 使用dtb的其他核心鏡像 148
7.6 其他引導載入程式 149
7.6.1 lilo 149
7.6.2 grub 150
7.6.3 其他更多的引導載入程式 151
7.7 小結 152
第8章 裝置驅動程式基礎 154
8.1 裝置驅動程式的概念 154
8.1.1 可載入模組 155
8.1.2 裝置驅動程式架構 155
8.1.3 最小裝置驅動程式樣本 156
8.1.4 模組構建的基礎設施 157
8.1.5 安裝裝置驅動程式 160
8.1.6 載入模組 160
8.1.7 模組參數 161
8.2 模組工具 162
8.2.1 insmod 162
8.2.2 lsmod 163
8.2.3 modprobe 163
8.2.4 depmod 164
8.2.5 rmmod 165
8.2.6 modinfo 165
8.3 驅動程式方法 166
8.3.1 驅動程式中的檔案系統操作 166
8.3.2 裝置號的分配 169
8.3.3 裝置節點和mknod 169
8.4 綜合應用 170
8.5 在核心源碼樹外構建驅動 171
8.6 裝置驅動程式和gpl 172
8.7 小結 173
第9章 檔案系統 174
9.1 linux檔案系統概念 175
9.2 ext2 176
9.2.1 掛載檔案系統 177
9.2.2 檢查檔案系統的完整性 178
9.3 ext3 180
9.4 ext4 182
9.5 reiserfs 182
9.6 jffs2 183
9.7 cramfs 185
9.8 網路檔案系統 187
9.9 偽檔案系統 190
9.9.1 /proc檔案系統 191
9.9.2 sysfs 194
9.10 其他檔案系統 196
9.11 建立簡單的檔案系統 197
9.12 小結 199
第10章 mtd子系統 201
10.1 mtd概述 201
10.1.1 開啟mtd服務 202
10.1.2 mtd基礎 203
10.1.3 在目標板上配置mtd 205
10.2 mtd分區 205
10.2.1 使用redboot分區表進行
分區 206
10.2.2 使用核心命令列傳遞分區
資訊 210
10.2.3 映射驅動 211
10.2.4 快閃記憶體晶片驅動 213
10.2.5 與具體板卡相關的初始化 214
10.3 mtd工具 215
10.4 ubi檔案系統 219
10.4.1 配置ubifs 219
10.4.2 構建ubifs鏡像 220
10.4.3 使用ubifs作為根檔案系統 222
10.5 小結 222
第11章 busybox 224
11.1 busybox簡介 224
11.2 busybox的配置 225
11.3 busybox的操作 227
11.3.1 busybox的init 230
11.3.2 rcs初始化指令碼樣本 232
11.3.3 busybox在目標板上的安裝 233
11.3.4 busybox小應用 235
11.4 小結 235
第12章 嵌入式開發環境 237
12.1 交叉開發環境 237
12.2 對主機系統的要求 241
12.3 為目標板提供服務 242
12.3.1 tftp伺服器 242
12.3.2 bootp/dhcp 伺服器 243
12.3.3 nfs伺服器 245
12.3.4 目標板使用nfs掛載根檔案系統 247
12.3.5 u-boot中使用nfs掛載根檔案系統的例子 248
12.4 小結 250
第13章 開發工具 252
13.1 gnu調試器(gdb) 252
13.1.1 調試核心轉儲 253
13.1.2 執行gdb 255
13.1.3 gdb中的偵錯工作階段 257
13.2 資料顯示調試器 258
13.3 cbrowser/cscope 260
13.4 追蹤和效能評測工具 261
13.4.1 strace 261
13.4.2 strace命令列選項 264
13.4.3 ltrace 266
13.4.4 ps 267
13.4.5 top 269
13.4.6 mtrace 270
13.4.7 dmalloc 272
13.4.8 核心oops 274
13.5 二進位工具 276
13.5.1 readelf 277
13.5.2 使用readelf查看調試資訊 278
13.5.3 objdump 280
13.5.4 objcopy 281
13.6 其他二進位公用程式 281
13.6.1 strip 281
13.6.2 addr2line 282
13.6.3 strings 282
13.6.4 ldd 282
13.6.5 nm 283
13.6.6 prelink 283
13.7 小結 284
第14章 核心調試技術 286
14.1 核心調試帶來的挑戰 286
14.2 使用kgdb進行核心調試 287
14.2.1 kgdb的核心配置 288
14.2.2 在開啟kgdb時引導目標板 289
14.2.3 一些有用的核心斷點 293
14.2.4 kgdb與控制台共用一個序列埠 294
14.2.5 調試非常早期的核心代碼 295
14.2.6 主線核心對kgdb的支援 296
14.3 核心調試技術 297
14.3.1 gdb遠程串列協議 298
14.3.2 調試最佳化的核心代碼 300
14.3.3 gdb的使用者自訂命令 307
14.3.4 有用的核心gdb宏 307
14.3.5 調試可載入模組 315
14.3.6 printk調試 319
14.3.7 magic sysreq key 320
14.4 硬體輔助調試 321
14.4.1 使用jtag探測器對快閃記憶體進行編程 322
14.4.2 使用jtag探測器進行調試 323
14.5 不能啟動的情況 326
14.5.1 早期的序列埠調試輸出 326
14.5.2 轉儲printk的日誌緩衝區 327
14.5.3 使用kgdb調試核心例外狀況 328
14.6 小結 329
第15章 調試嵌入式linux應用程式 331
15.1 目標調試 331
15.2 遠程(交叉)調試 331
15.3 調試共用程式庫 335
15.4 調試多個任務 340
15.4.1 調試多個進程 340
15.4.2 調試多線程應用程式 342
15.4.3 調試引導載入程式/快閃記憶體代碼 345
15.5 其他遠端偵錯選項 345
15.5.1 使用序列埠進行調試 345
15.5.2 附著到啟動並執行進程上 346
15.6 小結 346
第16章 開源構建系統 348
16.1 為什麼使用構建系統 348
16.2 scratchbox 349
16.2.1 安裝scratchbox 349
16.2.2 建立一個交叉編譯目標 350
16.3 buildroot 351
16.3.1 安裝buildroot 352
16.3.2 配置buildroot 352
16.3.3 構建buildroot 353
16.4 openembedded 354
16.4.1 openembedded的組成 355
16.4.2 bitbake中繼資料 355
16.4.3 配方基礎 356
16.4.4 任務 358
16.4.5 類 359
16.4.6 配置中繼資料 360
16.4.7 構建鏡像 361
16.5 小結 362
第17章 即時linux 363
17.1 什麼是即時 363
17.1.1 軟即時 363
17.1.2 硬即時 364
17.1.3 linux調度 364
17.1.4 延時 364
17.2 核心搶佔 365
17.2.1 搶佔的障礙 366
17.2.2 搶佔模式 367
17.2.3 smp核心 368
17.2.4 搶佔延時的根源 369
17.3 即時核心補丁 369
17.3.1 即時補丁的特性 370
17.3.2 o(1)調度器 371
17.3.3 建立即時進程 372
17.4 即時核心的效能分析 373
17.4.1 使用ftrace追蹤核心行為 373
17.4.2 檢測搶佔被關閉的延時 374
17.4.3 檢測喚醒延時 375
17.4.4 檢測中斷被關閉的延時 377
17.4.5 檢測soft lockup 378
17.5 小結 378
第18章 通用序列匯流排 379
18.1 usb概述 379
18.1.1 usb的物理拓撲結構 379
18.1.2 usb的邏輯拓撲結構 381
18.1.3 usb版本 382
18.1.4 usb連接器 382
18.1.5 usb線纜 383
18.1.6 usb模式 384
18.2 配置usb 384
18.3 sysfs和usb裝置命名 388
18.4 實用的usb工具 390
18.4.1 usb檔案系統 390
18.4.2 使用usbview 392
18.4.3 usb 公用程式(lsusb) 394
18.5 通用usb子系統 395
18.5.1 usb大型存放區類 395
18.5.2 usb hid類 397
18.5.3 usb cdc類驅動 398
18.5.4 usb網路支援 400
18.6 usb調試 401
18.6.1 usbmon 402
18.6.2 實用usb雜記 403
18.7 小結 403
第19章 udev 405
19.1 什麼是udev 405
19.2 裝置發現 406
19.3 udev的預設行為 407
19.4 理解udev規則 409
19.4.1 modalias 411
19.4.2 典型的udev規則配置 414
19.4.3 udev的初始系統設定 415
19.5 載入平台裝置驅動程式 417
19.6 定製udev的行為 419
19.7 持久的裝置命名 420
19.8 udev和busybox配合使用 423
19.8.1 busybox mdev 423
19.8.2 配置mdev 425
19.9 小結 425
附錄a 可配置的u-boot命令 427
附錄b busybox命令 430
附錄c sdram介面注意事項 440
附錄d 開源資源 447
附錄e 簡單的bdi-2000設定檔 449

前言  雖然講Linux的好書很多,但是本書彙集了專門針對嵌入式Linux開發人員的各方面資訊和建議。實際上,有關Linux核心、Linux系統管理等方面的優秀書籍已經有很多了。本書也參考了我認為在同類書籍中最好的幾本。
  本書的很多內容來自實際的問題,有些問題是我作為 電腦書籍嵌入式Linux顧問時一些開發工程師提出的,還有些問題是我直接參与商業嵌入式Linux開發時遇到的。
  嵌入式Linux會給經驗豐富的軟體工程師帶來一些獨特的挑戰。首先,那些有多年老式即時作業系統(Real Time Operating System,RTOS)開發經驗的工程師會發現,他們的思維習慣很難從舊的環境轉換到Linux;其次,經驗豐富的應用程式開發人員常常難以理解多種開發環境的相對複雜性。
  雖然這是一本面向嵌入式Linux開發初學者的基礎教程,但我相信即使是經驗豐富的嵌入式Linux開發人員也能從中獲益,書中包含了我多年積累的實用建議和技巧。
  給實際的嵌入式開發人員的實用建議
  本書介紹了嵌入式工程師怎樣才能迅速掌握嵌入式Linux環境的新知識。書中沒有重點講解Linux核心原理,而是在講解核心的章節側重從項目角度介紹核心。你可以閱讀專門介紹核心原理的優秀圖書來瞭解相關知識。你可以從本書學到核心源碼樹的組織和布局,瞭解組成核心鏡像的二進位組件和載入它們的方法,以及它們在嵌入式系統中的作用。
  在本書中,你會學到Linux核心構建系統的工作原理,以及怎樣將滿足項目需求的具體變化融合到系統中。你會瞭解到Linux系統初始化的細節,包括核心空間初始化和使用者空間初始化。你還能看到很多對嵌入式項目有益的建議和技巧,涵蓋引導載入程式、系統初始化、檔案系統和快閃記憶體,以及進階的核心與應用程式調試技術。第2版中新增了很多內容,很多章節都有更新,比如講開源構建系統、USB和udev的幾章都是新的,而且有相當篇幅探討如何在嵌入式Linux項目中配置和使用這些複雜的系統。
  目標讀者
  本書需要讀者具有一定的C語言編程基礎,對區域網路和網際網路有基本的瞭解,理解IP地址的概念以及IP地址在簡單區域網路中的用法,還需要理解十六進位和八進位編碼方式以及它們常見的用法。
  本書也涉及一些C語言編譯和連結中較為深入的概念,因此你要是能粗略複習一下C語言連結器的概念就更好了。同時,瞭解GNU make操作和文法對於閱讀本書也很有協助。
  本書不是什麼
  本書不是一本詳細介紹硬體的指南。硬體裝置種類繁多是嵌入式開發人員所面臨的一大困難。整合了一些外圍裝置的現代32位處理器,其使用者手冊動輒就有3000頁。沒有捷徑可走。作為程式員,要想理解硬體裝置就必須花費大量時間研讀硬體資料手冊和參考指南,同時要花費更多的時間針對這些硬體裝置編寫和測試代碼。
  這也不是一本講述Linux核心或內部原理的書。本書不會深入討論用來實現Linux虛擬記憶體管理原則和過程的記憶體管理單元(MMU)。已經有許多關於這個主題的優秀圖書了,建議你讀一讀每章後面的“補充閱讀建議”。
  排版約定
  命令和代碼語句使用Courier New字型。使用者輸入的命令使用加粗的Courier New字型。新名詞和重要概念使用楷體加以強調。
 

本文書籍資訊來至:中國互動出版網 http://www.china-pub.com/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.