嵌入式Linux基礎教程(第2版) ( 簡體 字) |
作者:[美]克里斯托弗·哈利南(Christopher Hallinan) | 類別:1. -> 作業系統 -> Linux 2. -> 電腦組織與體系結構 -> 嵌入式系統 |
譯者: |
出版社:人民郵電出版社 | 3dWoo書號: 43965 詢問書籍請說出此書號!【缺書】 NT售價: 445 元 |
出版日:4/1/2016 |
頁數:454 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787115402509 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: |
內容簡介:《嵌入式Linux基礎教程(第2版)》是嵌入式Linux的經典教程,介紹了引導加載程序、系統初始化、文件系統、閃存和內核、應用程序調試技巧等,還講述了構建Linux系統的工作原理,用于驅動不同架構的配置,Linux內核源碼樹的特性,如何根據需求配制內核運行時的行為,如何擴展系統功能,用于構建完整嵌入式Linux發行版的常用構建系統,USB子系統和系統配置工具udev等內容。更重要的是,《嵌入式Linux基礎教程(第2版)》闡述了如何修改系統使之滿足讀者自身的需求,確保讀者能夠從中學習一些嵌入式工程中非常有用的提示和技巧。《嵌入式Linux基礎教程(第2版)》適合Linux程序員閱讀,也可作為高等院校相關專業師生的參考讀物。 |
目錄:目錄 第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
|
序: |