內容簡介
本書從教學的角度出發,全面、系統地講述了嵌入式系統及各組成部分的基本知識、技術原理和設計方法,使讀者可以了解嵌入式系統的結構組成,掌握嵌入式系統開發的思路方法,具備嵌入式系統開發的初步分析問題和解決問題的能力。本書上篇是原理部分,內容包括:嵌入式系統概述,ARM處理器和指令集,嵌入式Linux作業系統,嵌入式軟體編程技術,開發環境和調試技術,Boot Loader技術,ARMLinux核心,檔案系統,設備驅動程式設計基礎,字元設備驅動程式設計,塊設備驅動程式設計,網路設備驅動程式開發和嵌入式GUI及應用程式設計; 本書下篇是實驗部分,內容包括: 實驗基礎,開發環境建立,核心和模組構建,檔案系統構建,調試技術演練,字元設備驅動程式設計,塊設備驅動程式設計,網路設備驅動程式設計,MiniGUI實驗設計和Android實驗設計。
本書兼顧教學、科研和工程開發的需要,既可以作為各類院校嵌入式方向的本科生和研究生的嵌入式系統教材,也可以作為嵌入式系統開發工程師的參考書。
圖書目錄
上篇原 理 部 分
第1章嵌入式系統概述
1.1嵌入式系統簡介
1.1.1嵌入式系統歷史與現狀
1.1.2嵌入式系統體系結構
1.1.3套用領域和發展方向
1.2嵌入式處理器
1.2.1嵌入式處理器簡介
1.2.2ARM處理器的套用領域及一般特點
1.2.3ARM處理器系列
1.3嵌入式作業系統
1.3.1嵌入式作業系統簡介
1.3.2嵌入式Linux
1.3.3VxWorks
1.3.4μC/OSⅡ
1.3.5Windows CE
1.3.6Symbian
1.3.7Android
1.3.8iOS
1.3.9其他嵌入式作業系統
1.4嵌入式系統設計
1.4.1嵌入式系統設計過程
1.4.2硬體設計平台的選擇
1.4.3軟體設計平台的選擇
1.4.3嵌入式套用軟體開發
1.4.5測試和最佳化
小結
進一步探索
第2章ARM處理器和指令集
2.1ARM處理器簡介
2.1.1ARM公司和ARM產品簡介
2.1.2ARM指令集體系結構版本
2.1.3ARM處理器系列
2.2ARM指令集簡介
2.2.1RISC簡介
2.2.2ARM狀態和Thumb狀態
2.2.3ARM指令類型和指令的條件域
2.3ARM指令的定址方式
2.3.1立即定址
2.3.2暫存器定址
2.3.3暫存器偏移定址
2.3.4暫存器間接定址
2.3.5基址變址定址
2.3.6多暫存器定址
2.3.7堆疊定址
2.3.8相對定址
2.4ARM指令簡介
2.4.1跳轉指令
2.4.2通用數據處理指令
2.4.3乘法指令
2.4.4Load/Store記憶體訪問指令
2.4.5ARM協處理器指令
2.4.6雜項指令
2.4.7飽和算術指令
2.4.8ARM偽指令
2.5Thumb指令簡介
2.5.1Thumb跳轉指令
2.5.2Thumb通用數據處理指令
2.5.3Thumb算術指令
2.5.4Thumb記憶體訪問指令
2.5.5Thumb軟中斷和斷電指令
2.5.6Thumb偽指令
小結
進一步探索
第3章嵌入式Linux作業系統
3.1嵌入式Linux簡介
3.1.1μCLinux
3.1.2RTLinux
3.1.3紅旗嵌入式Linux
3.2記憶體管理
3.2.1記憶體管理和MMU
3.2.2標準Linux的記憶體管理
3.2.3μCLinux的記憶體管理
3.3進程管理
3.3.1進程和進程管理
3.3.2RTLinux的進程管理
3.3.3標準Linux的進程管理
3.3.4μCLinux的進程管理
3.4檔案系統
3.4.1檔案系統定義
3.4.2Linux檔案系統
3.4.3嵌入式Linux檔案系統
小結
進一步探索
第4章嵌入式軟體編程技術
4.1嵌入式編程基礎
4.1.1嵌入式彙編語言基礎
4.1.2嵌入式高級編程知識
4.1.3嵌入式開發工程
4.2嵌入式彙編編程技術
4.2.1基本語法
4.2.2彙編語言程式設計案例
4.3嵌入式高級編程技術
4.3.1函式可重入
4.3.2中斷處理過程
4.4高級語言與彙編語言混合編程
4.4.1高級語言與彙編語言混合編程概述
4.4.2彙編程式調用C程式
4.4.3C程式調用彙編程式
小結
進一步探索
第5章開發環境和調試技術
5.1交叉開發模式概述
5.2宿主機環境
5.2.1串口終端
5.2.2BOOTP
5.2.3TFTP
5.2.4交叉編譯
5.3目標板環境
5.3.1JTAG接口簡介
5.3.2Boot Loader簡介
5.4交叉編譯工具鏈
5.4.1交叉編譯的構建
5.4.2相關工具
5.5gdb調試器
5.6遠程調試
5.6.1遠程調試原理
5.6.2gdb遠程調試功能
5.6.3使用gdbserver
5.7核心調試
5.7.1核心調試技術
5.7.2kgdb核心調試
5.8網路調試
小結
進一步探索
第6章Boot Loader技術
6.1Boot Loader基本概念
6.1.1Boot Loader所支持的硬體環境
6.1.2Boot Loader的安裝地址
6.1.3Boot Loader相關的設備和基址
6.1.4Boot Loader的啟動過程
6.1.5Boot Loader的操作模式
6.1.6Boot Loader與主機之間的通信設備及協定
6.2Boot Loader典型結構
6.2.1Boot Loader階段1介紹
6.2.2Boot Loader階段2介紹
6.2.3關於串口終端
6.3UBoot簡介
6.3.1認識UBoot
6.3.2UBoot特點
6.3.3UBoot代碼結構分析
6.4vivi簡介
6.4.1認識vivi
6.4.2vivi代碼導讀
小結
進一步探索
第7章ARMLinux核心
7.1ARMLinux核心簡介
7.1.1ARMLinux核心和普通Linux核心的區別
7.1.2ARMLinux的版本控制
7.1.3ARMLinux的代碼結構
7.2ARMLinux記憶體管理
7.2.1影響記憶體管理的兩個方面
7.2.2ARMLinux的存儲機制
7.2.3虛擬記憶體
7.3ARMLinux進程管理和調度
7.3.1進程的表示和生命周期
7.3.2Linux進程的創建、執行和銷毀
7.3.3Linux進程的調度
7.4ARMLinux模組機制
7.4.1Linux模組概述
7.4.2模組代碼結構
7.4.3模組的載入
7.4.4模組的卸載
7.4.5版本依賴
7.5ARMLinux中斷管理
7.6ARMLinux系統調用
7.7ARMLinux系統啟動和初始化
7.7.1使用Boot Loader將核心映像載入
7.7.2核心數據結構初始化——核心引導第一部分
7.7.3外設初始化——核心引導第二部分
7.7.4init進程和inittab腳本
7.7.5rc啟動腳本
7.7.6Shell的啟動
小結
進一步探索
第8章檔案系統
8.1嵌入式檔案系統簡介
8.1.1Linux檔案系統簡介
8.1.2嵌入式檔案系統簡介
8.2嵌入式Linux檔案系統框架
8.3JFFS2嵌入式檔案系統
8.3.1節點的定義
8.3.2數據節點
8.3.3可靠性支持
8.3.4記憶體使用
8.3.5垃圾收集
8.3.6寫平衡
8.3.7JFFS2的不足之處
8.3.8JFFS3簡介
8.4根檔案系統
8.4.1什麼是根檔案系統
8.4.2建立JFFS2根檔案系統
小結
進一步探索
第9章設備驅動程式設計基礎
9.1Linux設備驅動程式簡介
9.1.1設備的分類
9.1.2設備檔案
9.1.3主設備號和次設備號
9.1.4Linux設備驅動代碼的分布
9.1.5Linux設備驅動程式的特點
9.2設備驅動程式結構
9.2.1驅動程式的註冊與註銷
9.2.2設備的打開與釋放
9.2.3設備的讀寫操作
9.2.4設備的控制操作
9.2.5設備的輪詢和中斷處理
9.3Linux核心設備模型
9.3.1設備模型建立的目的
9.3.2sysfs——設備拓撲結構的檔案系統表現
9.3.3驅動模型和sysfs
9.3.4kobject
9.3.5platform匯流排
9.4同步機制
9.4.1同步鎖
9.4.2信號量
9.4.3讀寫信號量
9.4.4原子操作
9.4.5完成事件
9.4.6時間
9.5記憶體映射和管理
9.5.1物理地址映射到虛擬地址
9.5.2核心空間映射到用戶空間
9.6工作佇列
9.7異步I/O
9.8DMA
9.8.1DMA數據傳輸
9.8.2DMA定義
9.8.3DMA映射
小結
進一步探索
第10章字元設備和驅動程式設計
10.1字元設備驅動框架
10.2字元設備驅動開發
10.2.1設備號
10.2.2關鍵數據結構
10.2.3字元設備註冊和註銷
10.3GPIO驅動概述
10.4串列匯流排概述
10.4.1SPI匯流排
10.4.2I2C匯流排
10.4.3SMBus匯流排
10.5I2C匯流排驅動開發
10.5.1I2C驅動架構
10.5.2關鍵數據結構
10.5.3I2C核心
10.5.4I2C匯流排驅動
10.5.5I2C設備驅動
小結
進一步探索
第11章塊設備和驅動程式設計
11.1塊設備驅動程式設計概要
11.1.1塊設備的數據交換方式
11.1.2塊設備讀寫請求
11.2Linux塊設備驅動相關數據結構與函式
11.2.1gendisk結構
11.2.2request結構
11.2.3request_queue佇列
11.2.4bio結構
11.3塊設備的註冊與註銷
11.4塊設備初始化與卸載
11.5塊設備操作
11.6請求處理
11.7MMC卡驅動
11.7.1MMC/SD晶片介紹
11.7.2MMC/SD卡驅動結構
11.7.3MMC卡塊設備驅動分析
11.7.4HSMCI接口驅動設計分析
小結
進一步探索
第12章網路設備驅動程式開發
12.1乙太網基礎知識
12.1.1CSMA/CD協定
12.1.2乙太網幀結構
12.1.3嵌入式系統中常用的絡協定
12.2嵌入式網路設備驅動開發概述
12.3網路設備驅動基本數據結構
12.3.1net_device數據結構
12.3.2sk_buffer數據結構
12.4網路設備初始化
12.5打開和關閉接口
12.6數據接收與傳送
12.7查看狀態與參數設定
12.8AT91SAM9G45網卡驅動
12.8.1EMAC模組簡介
12.8.2模組圖
12.8.3功能描述
12.8.4暫存器描述
12.8.5AT91SAM9G45晶片EMAC控制器驅動分析
小結
進一步探索
第13章嵌入式GUI及應用程式設計
13.1嵌入式GUI設計概述
13.1.1嵌入式GUI簡介
13.1.2嵌入式GUI設計需求
13.1.3嵌入式GUI設計原則
13.1.4主流嵌入式GUI簡介
13.2嵌入式GUI體系結構設計
13.2.1嵌入式GUI體系結構
13.2.2抽象層
13.2.3核心層
13.2.4接口層
13.3基於主流GUI的應用程式設計
13.3.1MiniGUI開發環境搭建
13.3.2基於MiniGUI的應用程式設計
13.3.3Android開發環境搭建
13.3.4基於Android的應用程式設計
小結
進一步探索
下篇實驗部分
第1章實驗基礎
第2章開發環境建立
第3章核心和模組構建
第4章檔案系統構建
第5章調試技術演練
第6章字元設備和驅動程式設計
第7章塊設備驅動程式設計
第8章網路設備驅動程式設計
第9章MiniGUI套用設計
第10章Android套用設計