· 多年嵌入式人才培養及項目研發經驗總結
· 數百家企業嵌入式研發崗位人才需求匯總
· 數十所嵌入式專業大學院校教學現狀調研
· 側重實踐及案例分析并輔以代碼加以講解
本書是嵌入式 linux的經典教程,介紹了引導裝入程序、系統初始化、文件系統、閃存和內核、應用程序調試技巧等,還講述了構建 linux系統的工作原理,用于驅動不同體系結構的配置,linux內核源碼樹的特性,如何根據需求配制內核運行時的行為,如何擴展系統功能等內容。更重要的是,本書闡述了如何修改系統使之滿足讀者自己的需求,使讀者能從中學習一些嵌入式工程中非常有用的提示和技巧。
本書適合 linux程序員閱讀,也可作為高等院校相關專業師生的參考讀物。
第1章 引言.
1.1 為什么使用linux
1.2 嵌入式linux現狀
1.3 開源和gpl
1.4 標準和相關機構
1.4.1 lsb
1.4.2 osdl
1.5 小結
參考資源
第2章 嵌入式初體驗
2.1 需要嵌入式系統嗎
2.2 嵌入式系統剖析
2.2.1 典型嵌入式linux系統設置
2.2.2 啟動目標板
2.2.3 啟動內核
2.2.4 內核初始化概述
2.2.5 第一個用戶空間進程:init
2.3 存儲的思考
2.3.1 閃存
2.3.2 nand閃存
.2.3.3 閃存的用途
2.3.4 閃存文件系統
2.3.5 存儲器空間
2.3.6 運行上下文
2.3.7 進程中的虛擬內存
2.3.8 交叉開發環境
2.4 嵌入式linux的發行版
2.4.1 linux商業發行版
2.4.2 linux自定義發行版
2.5 小結
參考資源
第3章 處理器基礎
3.1 單機處理器
3.1.1 ibm 970fx
3.1.2 intel pentium m
3.1.3 freescale mpc7448
3.1.4 配套芯片組
3.2 集成化處理器:片上系統
3.2.1 powerpc
3.2.2 amcc powerpc
3.2.3 freescale powerpc
3.2.4 mips
3.2.5 broadcom mips
3.2.6 amd mips
3.2.7 其他類型的mips
3.2.8 arm
3.2.9 ti arm
3.2.10 freescale arm
3.2.11 intel arm xscale
3.2.12 其他arm
3.2.13 其他體系結構
3.3 硬件平臺
3.3.1 compactpci
3.3.2 atca
3.4 小結
參考資源
第4章 linux內核——不同視角
4.1 背景知識
4.1.1 內核的版本
4.1.2 內核源碼庫
4.2 linux內核構造
4.2.1 頂層資源目錄
4.2.2 編譯內核
4.2.3 嚴格意義上的內核:vmlinux
4.2.4 內核映像組件
4.2.5 子目錄結構
4.3 內核構建系統
4.3.1 .config文件
4.3.2 配置編輯器
4.3.3 makefile的目標
4.3.4 內核配置
4.3.5 自定義配置選項
4.3.6 內核makefile
4.3.7 內核文檔
4.4 獲取linux內核
4.5 小結
參考資源
第5章 內核初始化
5.1 合成內核映像:piggy及其他
5.1.1 image目標文件
5.1.2 體系結構相關的目標文件
5.1.3 第二階段引導裝入程序
5.1.4 引導信息
5.2 初始化控制流
5.2.1 內核入口點:head.o
5.2.2 內核啟動:main.c
5.2.3 體系結構設置
5.3 內核命令行處理
5.4 子系統初始化
5.5 init線程
5.5.1 通過initcall初始化
5.5.2 引導的最后步驟
5.6 小結
參考資源
第6章 系統初始化
6.1 根文件系統
6.1.1 fhs
6.1.2 文件系統布局
6.1.3 最小文件系統
6.1.4 根文件系統帶來的挑戰
6.1.5 試錯法
6.1.6 自動化文件系統構建工具
6.2 內核的最后引導過程
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 初始ram磁盤的目的
6.4.2 使用initrd引導
6.4.3 引導裝入程序對于initrd的支持
6.4.4 initrd的奧妙所在:linuxrc文件
6.4.5 initrd探究
6.4.6 構建initrd映像文件
6.5 使用initramfs
6.6 關機
6.7 小結
參考資源
第7章 引導裝入程序
7.1 引導裝入程序的作用
7.2 引導裝入程序的挑戰
7.2.1 dram控制器
7.2.2 閃存與ram
7.2.3 映像的復雜性
7.2.4 執行上下文
7.3 通用的引導裝入程序:das u-boot
7.3.1 執行上下文
7.3.2 u-boot命令集
7.3.3 網絡操作
7.3.4 存儲子系統
7.3.5 從磁盤啟動:u-boot
7.4 移植u-boot
7.4.1 為ep405開發板移植u-boot
7.4.2 u-boot的makefile配置目標
7.4.3 ep405處理器初始化
7.4.4 特定開發板的初始化
7.4.5 移植概要
7.4.6 u-boot映像格式
7.5 其他引導裝入程序
7.5.1 lilo
7.5.2 grub..
7.5.3 其他引導裝入程序
7.6 小結
參考資源
第8章 設備驅動程序基礎
8.1 設備驅動程序基本概念
8.1.1 可加載模塊
8.1.2 設備驅動程序的體系結構
8.1.3 最小設備驅動程序示例
8.1.4 模塊構建的基礎設施
8.1.5 安裝設備驅動程序
8.1.6 加載設備驅動程序模塊
8.2 模塊實用程序
8.2.1 insmod
8.2.2 模塊參數
8.2.3 lsmod
8.2.4 modprobe
8.2.5 depmod
8.2.6 rmmod
8.2.7 modinfo
8.3 驅動程序方法
8.3.1 驅動程序文件系統操作
8.3.2 設備節點與mknod
8.4 匯總
8.5 設備驅動程序與gpl
8.6 小結
參考資源
第9章 文件系統
9.1 linux文件系統的概念
9.2 ext2文件系統
9.2.1 掛載文件系統
9.2.2 文件系統完整性檢查
9.3 ext3文件系統
9.4 reiserfs文件系統
9.5 jffs2文件系統
9.6 cramfs文件系統
9.7 nfs文件系統
9.8 偽文件系統
9.8.1 proc文件系統
9.8.2 sysfs文件系統
9.9 其他文件系統
9.10 構建簡單的文件系統
9.11 小結
參考資源
第10章 mtd子系統
10.1 啟用mtd服務
10.2 mtd基礎知識
10.3 mtd分區
10.3.1 redboot分區表
10.3.2 內核命令行分區
10.3.3 映射驅動程序
10.3.4 閃存芯片驅動程序
10.3.5 特定開發板的初始化
10.4 mtd實用程序
10.5 小結
參考資源
第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 小結
參考資源
第12章 嵌入式開發環境
12.1 交叉開發環境
12.2 主機系統需求
12.3 為目標板提供服務
12.3.1 tftp服務器
12.3.2 bootp/dhcp服務器
12.3.3 nfs服務器
12.3.4 使用nfs為目標板掛載根文件系統
12.3.5 u-boot nfs根掛載示例
12.4 小結
參考資源
第13章 開發工具
13.1 gdb
13.1.1 調試核心轉儲
13.1.2 調用gdb
13.1.3 gdb調試會話
13.2 ddd
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 內核oops
13.5 二進制實用程序
13.5.1 readelf
13.5.2 使用readelf檢查調試信息
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 小結
參考資源
第14章 內核調試技術
14.1 內核調試的難點
14.2 使用kgdb調試內核
14.2.1 kgdb內核配置
14.2.2 支持kgdb的內核啟動
14.2.3 有用的內核斷點
14.3 linux內核的調試
14.3.1 gdb遠程串口協議
14.3.2 調試優化后的內核代碼
14.3.3 gdb用戶定義命令
14.3.4 有用的內核gdb宏
14.3.5 調試可加載模塊
14.3.6 printk調試
14.3.7 magic sysreq鍵
14.4 硬件輔助調試
14.4.1 使用jtag探測器對閃存編程
14.4.2 用jtag探測器進行調試
14.5 無法啟動時
14.5.1 早期串口調試輸出
14.5.2 轉儲printk日志緩沖區
14.5.3 kgdb捕捉崩潰
14.6 小結
參考資源
第15章 調試嵌入式linux應用程序
15.1 目標機調試
15.2 遠程(交叉)調試
15.3 使用共享庫進行調試
15.4 多任務調試
15.4.1 多進程的調試
15.4.2 多線程應用程序的調試
15.4.3 引導裝入程序/閃存代碼的調試
15.5 遠程調試的附加選項
15.5.1 串行端口調試
15.5.2 綁定到正在運行的進程
15.6 小結
參考資源
第16章 移植linux
16.1 linux源代碼的組織
16.2 為開發板定制linux
16.2.1 前提和假設
16.2.2 定制內核初始化
16.2.3 靜態內核命令行
16.3 平臺初始化
16.3.1 早期變量訪問
16.3.2 開發板信息結構
16.3.3 機器相關的調用
16.4 匯總
16.5 小結
參考資源
第17章 linux與實時
17.1 什么是實時
17.1.1 軟實時
17.1.2 硬實時
17.1.3 linux 調度
17.1.4 中斷延遲
17.2 內核搶占
17.2.1 搶占的缺陷
17.2.2 搶占模型
17.2.3 smp內核
17.2.4 搶占延遲源
17.3 實時內核補丁
17.3.1 實時的特性
17.3.2 o(1) 調度器
17.3.3 創建實時進程
17.3.4 臨界區管理
17.4 調試實時內核
17.4.1 軟鎖檢測
17.4.2 搶占調試
17.4.3 調試喚醒時間
17.4.4 喚醒延遲歷史
17.4.5 中斷響應時間
17.4.6 中斷響應歷史
17.4.7 延遲跟蹤
17.4.8 調試死鎖環境
17.4.9 鎖模式的運行時控制權
17.5 小結
參考資源
附錄a 可配置的u-boot命令
附錄b busybox命令
附錄c sdram接口的注意事項
附錄d 開源項目資源
附錄e bdi-2000配置文件示例...