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

出版時間:2012-5  出版社:人民郵電出版社  作者:[美] Christopher Hallinan  頁數(shù):454  字數(shù):697000  譯者:周鵬  
Tag標簽:無  

內(nèi)容概要

  《嵌入式Linux基礎教程(第2版)》是嵌入式Linux的經(jīng)典教程,介紹了引導加載程序、系統(tǒng)初始化、文件系統(tǒng)、閃存和內(nèi)核、應用程序調(diào)試技巧等,還講述了構建Linux系統(tǒng)的工作原理,用于驅(qū)動不同架構的配置,Linux內(nèi)核源碼樹的特性,如何根據(jù)需求配制內(nèi)核運行時的行為,如何擴展系統(tǒng)功能,用于構建完整嵌入式Linux發(fā)行版的常用構建系統(tǒng),USB子系統(tǒng)和系統(tǒng)配置工具udev等內(nèi)容。更重要的是,《嵌入式Linux基礎教程(第2版)》闡述了如何修改系統(tǒng)使之滿足讀者自身的需求,確保讀者能夠從中學習一些嵌入式工程中非常有用的提示和技巧?!肚度胧絃inux基礎教程(第2版)》適合Linux程序員閱讀,也可作為高等院校相關專業(yè)師生的參考讀物。

作者簡介

作者:(美)Hallinan

書籍目錄

第1章 入門
1.1 為什么選擇Linux
1.2 嵌入式Linux現(xiàn)狀
1.3 開源和GPL
1.4 標準及相關組織
1.4.1 Linux標準基礎
1.4.2 Linux基金會
1.4.3 電信級Linux
1.4.4 移動Linux計劃:Moblin
1.4.5 服務可用性論壇
1.5 小結(jié)
第2章 綜述
2.1 嵌入與非嵌入
2.2 剖析嵌入式系統(tǒng)
2.2.1 典型的嵌入式Linux開發(fā)環(huán)境
2.2.2 啟動目標板
2.2.3 引導內(nèi)核
2.2.4 內(nèi)核初始化:概述
2.2.5 第一個用戶空間進程:init
2.3 存儲
2.3.1 閃存
2.3.2 NAND型閃存
2.3.3 閃存的用途
2.3.4 閃存文件系統(tǒng)
2.3.5 內(nèi)存空間
2.3.6 執(zhí)行上下文
2.3.7 進程虛擬內(nèi)存
2.3.8 交叉開發(fā)環(huán)境
2.4 嵌入式Linux發(fā)行版
2.4.1 商業(yè)Linux發(fā)行版
2.4.2 打造自己的Linux發(fā)行版
2.5 小結(jié)
第3章 處理器基礎
3.1 獨立處理器
3.1.1 IBM 970FX
3.1.2 英特爾奔騰M
3.1.3 英特爾凌動TM
3.1.4 飛思卡爾MPC7448
3.1.5 配套芯片組
3.2 集成處理器:片上系統(tǒng)
3.2.1 Power架構
3.2.2 飛思卡爾Power架構
3.2.3 飛思卡爾PowerQUICC I
3.2.4 飛思卡爾PowerQUICC II
3.2.5 PowerQUICC II Pro
3.2.6 飛思卡爾PowerQUICC III
3.2.7 飛思卡爾QorIQTM
3.2.8 AMCC Power架構
3.2.9 MIPS
3.2.10 Broadcom MIPS
3.2.11 其他MIPS
3.2.12 ARM
3.2.13 德州儀器ARM
3.2.14 飛思卡爾ARM
3.2.15 其他ARM處理器
3.3 其他架構
3.4 硬件平臺
3.4.1 CompactPCI
3.4.2 ATCA
3.5 小結(jié)
第4章 Linux內(nèi)核:不同的視角
4.1 背景知識
4.1.1 內(nèi)核版本
4.1.2 內(nèi)核源碼庫
4.1.3 使用git下載內(nèi)核代碼
4.2 Linux內(nèi)核的構造
4.2.1 頂層源碼目錄
4.2.2 編譯內(nèi)核
4.2.3 內(nèi)核主體:vmlinux
4.2.4 內(nèi)核鏡像的組成部分
4.2.5 子目錄的布局
4.3 內(nèi)核構建系統(tǒng)
4.3.1 .config文件
4.3.2 配置編輯器
4.3.3 Makefile目標
4.4 內(nèi)核配置
4.4.1 定制配置選項
4.4.2 內(nèi)核Makefile
4.5 內(nèi)核文檔
4.6 獲得定制的Linux內(nèi)核
4.7 小結(jié)
第5章 內(nèi)核初始化
5.1 合成內(nèi)核鏡像:Piggy及其他
5.1.1 Image對象
5.1.2 與具體架構相關的對象
5.1.3 啟動加載程序
5.1.4 引導消息
5.2 初始化時的控制流
5.2.1 內(nèi)核入口:head.o
5.2.2 內(nèi)核啟動:main.c
5.2.3 架構設置
5.3 內(nèi)核命令行的處理
5.4 子系統(tǒng)初始化
5.5 init線程
5.5.1 通過initcalls進行初始化
5.5.2 initcall_debug
5.5.3 最后的引導步驟
5.6 小結(jié)
第6章 用戶空間初始化
6.1 根文件系統(tǒng)
6.1.1 FHS:文件系統(tǒng)層次結(jié)構標準
6.1.2 文件系統(tǒng)布局
6.1.3 最小化的文件系統(tǒng)
6.1.4 嵌入式根文件系統(tǒng)帶來的挑戰(zhàn)
6.1.5 試錯法
6.1.6 自動化文件系統(tǒng)構建工具
6.2 內(nèi)核的最后一些引導步驟
6.2.1 第一個用戶空間程序
6.2.2 解決依賴關系
6.2.3 定制的初始進程
6.3 init進程
6.3.1 inittab
6.3.2 Web服務器啟動腳本示例
6.4 初始RAM磁盤
6.4.1 使用initrd進行引導
6.4.2 引導加載程序?qū)nitrd的支持
6.4.3 initrd的奧秘所在:linuxrc
6.4.4 initrd探究
6.4.5 構造initrd鏡像
6.5 使用initramfs
6.6 關機
6.7 小結(jié)
第7章 引導加載程序
7.1 引導加載程序的作用
7.2 引導加載程序帶來的挑戰(zhàn)
7.2.1 DRAM控制器
7.2.2 閃存與RAM
7.2.3 鏡像的復雜性
7.2.4 執(zhí)行環(huán)境
7.3 通用引導加載程序:Das U-Boot
7.3.1 獲取U-Boot
7.3.2 配置U-Boot
7.3.3 U-Boot的監(jiān)控命令
7.3.4 網(wǎng)絡操作
7.3.5 存儲子系統(tǒng)
7.3.6 從磁盤引導
7.4 移植U-Boot
7.4.1 EP405的U-Boot移植
7.4.2 U-Boot Makefile中的配置目標
7.4.3 EP405的第一次構建
7.4.4 EP405 處理器初始化
7.4.5 與具體板卡相關的初始化
7.4.6 移植總結(jié)
7.4.7 U-Boot鏡像格式
7.5 設備樹對象(扁平設備樹)
7.5.1 設備樹源碼
7.5.2 設備樹編譯器
7.5.3 使用DTB的其他內(nèi)核鏡像
7.6 其他引導加載程序
7.6.1 Lilo
7.6.2 GRUB
7.6.3 其他更多的引導加載程序
7.7 小結(jié)
第8章 設備驅(qū)動程序基礎
8.1 設備驅(qū)動程序的概念
8.1.1 可加載模塊
8.1.2 設備驅(qū)動程序架構
8.1.3 最小設備驅(qū)動程序示例
8.1.4 模塊構建的基礎設施
8.1.5 安裝設備驅(qū)動程序
8.1.6 加載模塊
8.1.7 模塊參數(shù)
8.2 模塊工具
8.2.1 insmod
8.2.2 lsmod
8.2.3 modprobe
8.2.4 depmod
8.2.5 rmmod
8.2.6 modinfo
8.3 驅(qū)動程序方法
8.3.1 驅(qū)動程序中的文件系統(tǒng)操作
8.3.2 設備號的分配
8.3.3 設備節(jié)點和mknod
8.4 綜合應用
8.5 在內(nèi)核源碼樹外構建驅(qū)動
8.6 設備驅(qū)動程序和GPL
8.7 小結(jié)
第9章 文件系統(tǒng)
9.1 Linux文件系統(tǒng)概念
9.2 ext2
9.2.1 掛載文件系統(tǒng)
9.2.2 檢查文件系統(tǒng)的完整性
9.3 ext3
9.4 ext4
9.5 ReiserFS
9.6 JFFS2
9.7 cramfs
9.8 網(wǎng)絡文件系統(tǒng)
9.9 偽文件系統(tǒng)
9.9.1 /proc文件系統(tǒng)
9.9.2 sysfs
9.10 其他文件系統(tǒng)
9.11 創(chuàng)建簡單的文件系統(tǒng)
9.12 小結(jié)
第10章 MTD子系統(tǒng)
10.1 MTD概述
10.1.1 開啟MTD服務
10.1.2 MTD基礎
10.1.3 在目標板上配置MTD
10.2 MTD分區(qū)
10.2.1 使用Redboot分區(qū)表進行分區(qū)
10.2.2 使用內(nèi)核命令行傳遞分區(qū)信息
10.2.3 映射驅(qū)動
10.2.4 閃存芯片驅(qū)動
10.2.5 與具體板卡相關的初始化
10.3 MTD工具
10.4 UBI文件系統(tǒng)
10.4.1 配置UBIFS
10.4.2 構建UBIFS鏡像
10.4.3 使用UBIFS作為根文件系統(tǒng)
10.5 小結(jié)
第11章 BusyBox
11.1 BusyBox簡介
11.2 BusyBox的配置
11.3 BusyBox的操作
11.3.1 BusyBox的init
11.3.2 rcS初始化腳本示例
11.3.3 BusyBox在目標板上的安裝
11.3.4 BusyBox小應用
11.4 小結(jié)
第12章 嵌入式開發(fā)環(huán)境
12.1 交叉開發(fā)環(huán)境
12.2 對主機系統(tǒng)的要求
12.3 為目標板提供服務
12.3.1 TFTP服務器
12.3.2 BOOTP/DHCP 服務器
12.3.3 NFS服務器
12.3.4 目標板使用NFS掛載根文件系統(tǒng)
12.3.5 U-Boot中使用NFS掛載根文件系統(tǒng)的例子
12.4 小結(jié)
第13章 開發(fā)工具
13.1 GNU調(diào)試器(GDB)
13.1.1 調(diào)試核心轉(zhuǎn)儲
13.1.2 執(zhí)行GDB
13.1.3 GDB中的調(diào)試會話
13.2 數(shù)據(jù)顯示調(diào)試器
13.3 cbrowser/cscope
13.4 追蹤和性能評測工具
13.4.1 strace
13.4.2 strace命令行選項
13.4.3 ltrace
13.4.4 ps
13.4.5 top
13.4.6 mtrace
13.4.7 dmalloc
13.4.8 內(nèi)核oops
13.5 二進制工具
13.5.1 readelf
13.5.2 使用readelf查看調(diào)試信息
13.5.3 objdump
13.5.4 objcopy
13.6 其他二進制實用程序
13.6.1 strip
13.6.2 addr2line
13.6.3 strings
13.6.4 ldd
13.6.5 nm
13.6.6 prelink
13.7 小結(jié)
第14章 內(nèi)核調(diào)試技術
14.1 內(nèi)核調(diào)試帶來的挑戰(zhàn)
14.2 使用KGDB進行內(nèi)核調(diào)試
14.2.1 KGDB的內(nèi)核配置
14.2.2 在開啟KGDB時引導目標板
14.2.3 一些有用的內(nèi)核斷點
14.2.4 KGDB與控制臺共享一個串行端口
14.2.5 調(diào)試非常早期的內(nèi)核代碼
14.2.6 主線內(nèi)核對KGDB的支持
14.3 內(nèi)核調(diào)試技術
14.3.1 gdb遠程串行協(xié)議
14.3.2 調(diào)試優(yōu)化的內(nèi)核代碼
14.3.3 GDB的用戶自定義命令
14.3.4 有用的內(nèi)核GDB宏
14.3.5 調(diào)試可加載模塊
14.3.6 printk調(diào)試
14.3.7 Magic SysReq key
14.4 硬件輔助調(diào)試
14.4.1 使用JTAG探測器對閃存進行編程
14.4.2 使用JTAG探測器進行調(diào)試
14.5 不能啟動的情況
14.5.1 早期的串行端口調(diào)試輸出
14.5.2 轉(zhuǎn)儲printk的日志緩沖區(qū)
14.5.3 使用KGDB調(diào)試內(nèi)核異常
14.6 小結(jié)
第15章 調(diào)試嵌入式Linux應用程序
15.1 目標調(diào)試
15.2 遠程(交叉)調(diào)試
15.3 調(diào)試共享程序庫
15.4 調(diào)試多個任務
15.4.1 調(diào)試多個進程
15.4.2 調(diào)試多線程應用程序
15.4.3 調(diào)試引導加載程序/閃存代碼
15.5 其他遠程調(diào)試選項
15.5.1 使用串行端口進行調(diào)試
15.5.2 附著到運行的進程上
15.6 小結(jié)
第16章 開源構建系統(tǒng)
16.1 為什么使用構建系統(tǒng)
16.2 Scratchbox
16.2.1 安裝Scratchbox
16.2.2 創(chuàng)建一個交叉編譯目標
16.3 Buildroot
16.3.1 安裝Buildroot
16.3.2 配置Buildroot
16.3.3 構建Buildroot
16.4 OpenEmbedded
16.4.1 OpenEmbedded的組成
16.4.2 BitBake元數(shù)據(jù)
16.4.3 配方基礎
16.4.4 任務
16.4.5 類
16.4.6 配置元數(shù)據(jù)
16.4.7 構建鏡像
16.5 小結(jié)
第17章 實時Linux
17.1 什么是實時
17.1.1 軟實時
17.1.2 硬實時
17.1.3 Linux調(diào)度
17.1.4 延時
17.2 內(nèi)核搶占
17.2.1 搶占的障礙
17.2.2 搶占模式
17.2.3 SMP內(nèi)核
17.2.4 搶占延時的根源
17.3 實時內(nèi)核補丁
17.3.1 實時補丁的特性
17.3.2 O(1)調(diào)度器
17.3.3 創(chuàng)建實時進程
17.4 實時內(nèi)核的性能分析
17.4.1 使用Ftrace追蹤內(nèi)核行為
17.4.2 檢測搶占被關閉的延時
17.4.3 檢測喚醒延時
17.4.4 檢測中斷被關閉的延時
17.4.5 檢測Soft Lockup
17.5 小結(jié)
第18章 通用串行總線
18.1 USB概述
18.1.1 USB的物理拓撲結(jié)構
18.1.2 USB的邏輯拓撲結(jié)構
18.1.3 USB版本
18.1.4 USB連接器
18.1.5 USB線纜
18.1.6 USB模式
18.2 配置USB
18.3 sysfs和USB設備命名
18.4 實用的USB工具
18.4.1 USB文件系統(tǒng)
18.4.2 使用usbview
18.4.3 USB 實用程序(lsusb)
18.5 通用USB子系統(tǒng)
18.5.1 USB大容量存儲類
18.5.2 USB HID類
18.5.3 USB CDC類驅(qū)動
18.5.4 USB網(wǎng)絡支持
18.6 USB調(diào)試
18.6.1 usbmon
18.6.2 實用USB雜記
18.7 小結(jié)
第19章 udev
19.1 什么是udev
19.2 設備發(fā)現(xiàn)
19.3 udev的默認行為
19.4 理解udev規(guī)則
19.4.1 Modalias
19.4.2 典型的udev規(guī)則配置
19.4.3 udev的初始系統(tǒng)設置
19.5 加載平臺設備驅(qū)動程序
19.6 定制udev的行為
19.7 持久的設備命名
19.8 udev和busybox配合使用
19.8.1 busybox mdev
19.8.2 配置mdev
19.9 小結(jié)
附錄A 可配置的U-Boot命令
附錄B BusyBox命令
附錄C SDRAM接口注意事項
附錄D 開源資源
附錄E 簡單的BDI-2000配置文件

章節(jié)摘錄

版權頁:   插圖:   在交叉開發(fā)環(huán)境中開發(fā)軟件要求編譯器運行于開發(fā)主機上,但生成的二進制可執(zhí)行文件的格式與開發(fā)主機不兼容,不能在上面運行。這類工具存在的主要原因是,在資源(一般指內(nèi)存大小和CPU性能)受限的嵌入式系統(tǒng)上本地開發(fā)和編譯代碼常常是不現(xiàn)實或不可能的。 這種開發(fā)方式隱藏著很多陷阱,嵌入式開發(fā)的新手稍不留神就會中招。當編譯一個程序時,編譯器一般都知道怎樣找到所需要的頭文件和正確編譯代碼必需的程序庫。為了說明這些概念,我們再看一下“Hello world”。代碼清單2—4qh的示例代碼是使用下面的命令行進行編譯的: gee—Wall—o hello hello.c 在代碼清單2.4中,我們看到這個程序代碼包含了一個頭文件stdi0.h。這個文件和我們在gcc命令行中指定的文件hello.C不在同一個目錄中。那么,編譯器是如何找到它的呢?另外,函數(shù)print f()也不是在文件hell0.C中定義的。因此,編譯hello.C后,它會包含一個對此符號的未解析的引用(unresolved reference)。鏈接器在鏈接時是怎樣解析這個引用的呢? 編譯器使用一些默認的搜索路徑來定位頭文件。在代碼中引用某個頭文件時,編譯器在默認的幾個搜索路徑中查找這個文件。類似地,鏈接器也是以這種方式來解析對外部符號print f()的引用。鏈接器知道默認在C庫(libc.+)中搜索未解析的引用,并且知道在系統(tǒng)中的哪些位置可以找到這些程序庫。再說明一下,這種默認行為是內(nèi)置于工具鏈中的。 現(xiàn)在假設你為某個采用Power架構的嵌入式系統(tǒng)編寫應用程序。顯然,你需要一個交叉編譯器,用于生成兼容Power架構處理器的二進制可執(zhí)行文件。如果你使用交叉編譯器,并采用類似的編譯命令來編譯前面的hello.C程序,在解析對外部符號print f()的引用時,鏈接器很可能會意外地將二進制可執(zhí)行文件鏈接到一個x86版本的c庫。當然,由于生成的可執(zhí)行程序混合了Power架構和x86二進制指令,如果運行這個錯誤的混合體,其結(jié)果是可以預見的,那就是系統(tǒng)崩潰! 擺脫這個困境的方法是指引交叉編譯器在非標準路徑中進行查找,以使用針對目標架構的頭文件和程序庫。我們將在第12章中詳細討論這個主題。這個例子旨在說明兩種開發(fā)環(huán)境的區(qū)別,即本地開發(fā)環(huán)境和嵌入式系統(tǒng)所需的交叉編譯開發(fā)環(huán)境。這只是交叉開發(fā)環(huán)境復雜性的一個方面。交叉調(diào)試中也會出現(xiàn)相同的問題和解決方案,從第14章開始,你會了解到這些內(nèi)容。正確地搭建交叉開發(fā)環(huán)境對于成功至關重要,你將在第12章中看到,這不僅僅涉及編譯器,還包括其他很多內(nèi)容。 2.4嵌入式Linux發(fā)行版 到底什么是Linux發(fā)行版?Linux內(nèi)核完成系統(tǒng)引導后,它會找到并掛載一個根文件系統(tǒng)。一旦合適的根文件系統(tǒng)被成功掛載,啟動腳本會啟動很多系統(tǒng)需要的程序和實用工具。

編輯推薦

嵌入式Linux權威著作Amazon全五星評價全面剖析構建嵌入式Linux開發(fā),揭示大量技術內(nèi)幕

圖書封面

圖書標簽Tags

評論、評分、閱讀與下載


    嵌入式Linux基礎教程(第2版) PDF格式下載


用戶評論 (總計38條)

 
 

  •   應該先學習linux再閱讀此書
  •   基礎知識,適合于入門學習
  •   買來暫時還沒看,目前只學到ARM裸機程序,之后再慢慢研究唄
  •   基礎扎實,以后也可以拿來用!
  •   入門級好書。很喜歡作者的語言風格,翻譯的也很精準,有些不便直譯的詞在括號里注了英文,真的很不錯。PS:這是我第一次對外文書籍的翻譯版本評價這么高!大多數(shù)的翻譯資料。。你懂得~~
  •   專業(yè)書還是看國外的好
  •   我精心挑選的,看目錄不錯,希望內(nèi)容也不錯
  •   很滿意,質(zhì)量超好。慢慢來研究
  •   非常不錯,包裝很不錯
  •   給男朋友買的,他說挺好的
  •   書不錯,值得認真看
  •   早就想買,一直沒貨,現(xiàn)在買一本,感覺還不錯
  •   能獲得圖靈獎的書果然不一般,物超所值,就是難度方面有點大,還需要努力啊!
  •   這本書對我來說是好東西,從淺到深都講到了
  •   入門必備,還不錯了,
  •   很好的書 值得看一看
  •   是嵌入式linux入門教程,寫的很詳細,但是書有筆畫過,這個地方很不爽
  •   概括性地介紹,感覺不適合初學者
  •   期等很久了,還沒看
  •   書講的東西挺全的,但是邏輯性不是特強,里面好多東西都是基礎
  •   初學者要入門的話,這本書還是很適合的。主要給讀者一種理論上和概念上的補充,不會讓人在嵌入式的海洋中被淹沒。
  •   內(nèi)容不錯,讀后頗有收獲!
  •   整本書以實踐內(nèi)容為主,但對一些基礎的理論也做了很好的解析。是一本很好的基礎教程。涉及到的面也比較廣。
  •   理論很扎實,深入。不過要是具體的學習嵌入式,還是要買本別的書,這個書就是理論東西很系統(tǒng)。
  •   先表揚一下,在亞馬遜買了不少磚頭類的書籍,包裝都很好,無任何破損。然后說說這本書的內(nèi)容:整書沒什么邏輯,不知道是作者本身的文字功底不行,還是翻譯的問題。理解起來非常吃力,說了半天交叉編譯環(huán)境的重要性,沒一個字提到如何構建交叉編譯環(huán)境。這本書應該定位中級嵌入式書籍,而不是基礎,沒什么嵌入式基礎的同學,學習起來絕對事倍功半。
  •   闡述較為宏闊,,,整本書都可以作為目錄,而衍生出多個分支
  •   很有用啊,正在學習Linux
  •   嵌入式必須看的書,我精讀了兩邊才來發(fā)表評論的;建議有些基礎的人再看這邊書,雖然說的是基礎教材,但是 講的比較深奧?。。?!
  •   還沒仔細的看,感覺還行
  •   前面幾張很好,后面可能用的比較少,我是入門級菜鳥
  •   我也是初學乍練,這個書不適合當工具書,但講的很清楚,語言很通俗。
  •   很喜歡,可惜現(xiàn)在不學嵌入式了。留著以后玩。
  •   看過第一版,感覺很實用,第二版也大概翻了一下,內(nèi)容很不錯,從根本上去闡述嵌入式開發(fā)的思路,讓你看后能掌握嵌入式Linux開發(fā)的整體框架,有利于進一步深入探索~
  •   rt很不錯的,有助于深入了解linux引導過程和驅(qū)動程序
  •   學習中,只看了一點點
  •   圖靈的書很好
  •   好書必須推薦
  •   賣給老公
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7