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