本書詳細介紹嵌入式系統(tǒng)開發(fā)過程中的主要技術(shù)問題,著重講解嵌入式Linux系統(tǒng)的設計與實現(xiàn),注重理論和實驗的結(jié)合。全書分為13章,內(nèi)容包括緒論、Linux基礎知識、Linux編程環(huán)境、Linux外殼程序編程、構(gòu)建嵌入式Linux開發(fā)平臺、ARM調(diào)試環(huán)境、嵌入式Bootloader技術(shù)、Linux內(nèi)核配置、ARMLinux內(nèi)核分析和移植、嵌入式文件系統(tǒng)、嵌入式Linux多線程編程、嵌入式Web服務器設計、嵌入式Linux的GUI等內(nèi)容。
本書通俗易懂,圖文并茂,注重理解與實例,大部分章節(jié)配有實例和源程序,可操作性強。本書可作為計算機學科、電子信息類相關(guān)專業(yè)本科生、研究生及工程碩士的嵌入式系統(tǒng)課程的教材,也可供相關(guān)研究人員、工程技術(shù)人員閱讀參考。
本書著重講解嵌入式Linux系統(tǒng)的設計與實現(xiàn),注重理論和實驗的結(jié)合。本書配套學習資源豐富,包括:課件、學習建議、源代碼和教學網(wǎng)站。
前言
嵌入式系統(tǒng)正在重新塑造人們的認知、生活、工作和娛樂方式。隨著物聯(lián)網(wǎng)及國內(nèi)外嵌入式產(chǎn)品進一步開發(fā)和推廣,嵌入式系統(tǒng)已經(jīng)滲透到科學研究、工程設計、軍事技術(shù)、商業(yè)文化藝術(shù)及人們?nèi)粘I钪械姆椒矫婷。圍繞著嵌入式系統(tǒng)構(gòu)建的智能手機、人工智能、AR/VR、無人機、智能穿戴設備、汽車自動駕駛和智能家居系統(tǒng)等,極大地便利和豐富了人們的生活。由于嵌入式系統(tǒng)的研究和開發(fā)是一個理論性、實踐性非常強的工作,因此開發(fā)嵌入式系統(tǒng)需要高素質(zhì)的研發(fā)人員。它不但要求研發(fā)人員熟悉嵌入式處理器的硬件結(jié)構(gòu),還要求更多地掌握嵌入式系統(tǒng)開發(fā)的各個環(huán)節(jié),如Bootloader、內(nèi)核、驅(qū)動、網(wǎng)絡和文件系統(tǒng)等,同時還必須具備所屬行業(yè)的相關(guān)知識和豐富的實踐經(jīng)驗。
嵌入式Linux操作系統(tǒng)遵循GNU的GPL條款,具有源代碼開放、代碼工整、工作穩(wěn)定、內(nèi)核結(jié)構(gòu)清晰、移植方便、系統(tǒng)內(nèi)核小、執(zhí)行效率高和網(wǎng)絡功能強大等特點,從而成為嵌入式市場的領(lǐng)先者。
本書大部分內(nèi)容曾作為武漢大學電子信息學院研究生嵌入式原理與應用課程的講義連續(xù)使用多屆,取得良好的教學效果。編者總結(jié)了多年的科研經(jīng)驗和案例,力求從基本概念、基本原理、基本方法和基本應用出發(fā),使讀者能扎實、系統(tǒng)地掌握嵌入式Linux系統(tǒng)開發(fā)的方法和技能。
全書分為13章:
第1章緒論;
第2章為Linux操作系統(tǒng)入門基礎;
第3章介紹Linux系統(tǒng)環(huán)境下的程序設計基礎;
第4章學習Linux外殼程序的編程方法;
第5章介紹如何構(gòu)建嵌入式Linux開發(fā)平臺;
第6章對ARM調(diào)試工具、編譯環(huán)境進行介紹;
第7章對嵌入式Bootloader技術(shù)進行詳細的分析;
第8章詳細講述Linux內(nèi)核配置方法;
第9章以嵌入式操作系統(tǒng)ARMLinux為例,對其內(nèi)核進行詳細的剖析,其原理也適用其他架構(gòu)的處理器;
第10章對嵌入式文件系統(tǒng)進行綜合描述和具體分析;
第11章介紹嵌入式Linux多線程編程方法;
第12章就構(gòu)建嵌入式Web服務器使用的相關(guān)技術(shù)進行了詳細的分析;
第13章詳細介紹嵌入式圖形用戶界面的原理和設計方法。
本書特點
圖文并茂,注重整體內(nèi)容框架的講解,培養(yǎng)學生的大局觀。例如,第1章用多幅圖片描述嵌入式Linux系統(tǒng)開發(fā)的整體框架及開發(fā)流程,便于讀者快速入門;
第8章用一張框圖描述整個Linux內(nèi)核代碼樹的結(jié)構(gòu),便于理解與記憶。
通俗易懂,注重理解與實例。大部分章節(jié)配有實例和源代碼,引導讀者逐步熟悉各種開發(fā)工具和環(huán)境,使讀者建立感性認識,為進一步深入學習打下良好的基礎,可操作性極強。
代碼規(guī)范細致,內(nèi)容深入,起點較高。在實例源代碼中,進行了非常詳細的注釋,可以引導讀者理解和掌握編寫程序的關(guān)鍵過程。在注重基礎和實踐的同時,注重知識的擴充,如本書對線程、網(wǎng)絡編程及圖形用戶界面編程做了深入的講解,使讀者對嵌入式Linux系統(tǒng)的開發(fā)水平有本質(zhì)的提高。
每章都給出了主要內(nèi)容、本章小結(jié)以及思考題,有利于提升讀者的自學效果。
作者分工與致謝
本書由金偉正編著,徐穎、金詩怡參與了部分翻譯和編輯工作,他們的工作對本書的定稿起了很大的作用。本書參考了Embedded Linux Primer: A Practical, RealWorld
Approach、Linux Kernel Development 3rd Edition等書籍,有些內(nèi)容取材于國內(nèi)外最新的教材和技術(shù)資料,詳見參考文獻,有興趣的讀者可以進一步查閱。在此,謹向多位原作者表達誠摯的敬意和真誠的感謝。本書的部分資料來自網(wǎng)絡,無法一一列舉,在此一并感謝。同時,特別感謝武漢大學電子信息學院對本書給予的大力支持。
聯(lián)系作者
由于編寫時間倉促,編著者的水平有限,書中難免存在不妥或錯誤之處,如果您對本書有任何意見或建議,或?qū)Ρ緯械膬?nèi)容或章節(jié)有興趣,不妨發(fā)電子郵件告訴我們(電子郵箱jwz@whu.edu.cn),您提出的問題和建議是編著者前進的動力。
金偉正2017年3月于武漢大學
學習建議
本書定位
本書可作為計算機學科、電子信息類相關(guān)專業(yè)本科生、研究生及工程碩士的嵌入式系統(tǒng)課程的教材,也可供相關(guān)研究人員、工程技術(shù)人員閱讀參考。
建議授課學時
如果將本書作為教材使用,建議將課程的教學分為課堂講授和學生自主上機兩個層次。課堂講授建議36~48學時,學生自主上機建議18~24學時。教師可以根據(jù)不同的教學對象或教學大綱要求安排學時數(shù)和教學內(nèi)容。
教學內(nèi)容、重點和難點提示、課時分配
序號
教學內(nèi)容
教學重點
教學難點
課時分配
第1章
緒論
嵌入式系統(tǒng)開發(fā)的一般過程、嵌入式操作系統(tǒng)
嵌入式系統(tǒng)開發(fā)的一般過程及方法
2學時
第2章
Linux基礎知識
認識Linux操作系統(tǒng)、
Linux基本操作命令、
Linux文件與目錄系統(tǒng)、
Linux網(wǎng)絡服務
Linux基本操作命令的使用
2學時
第3章
Linux編程環(huán)境
Linux編程環(huán)境、VIM及Emacs的使用、GNU make使用及Makefile編程、
GDB的使用方法
GNU make使用及Makefile編程方法
2學時
第4章
Linux
外殼程序編程
創(chuàng)建和運行外殼程序、外殼程序的編程
2學時
第5章
構(gòu)建嵌入式
Linux開發(fā)平臺
GNU跨平臺開發(fā)工具鏈、
嵌入式Linux內(nèi)核及根文件系統(tǒng)、Bootloader簡介
GNU跨平臺開發(fā)工具鏈的建立過程
4學時
第6章
ARM調(diào)試環(huán)境
ARM調(diào)試工具簡介、
ADS軟件調(diào)試工具
2學時
第7章
嵌入式
Bootloader技術(shù)
Bootloader的基本概念、典型結(jié)構(gòu)框架、分析和移植
Bootloader的移植
6學時
第8章
Linux內(nèi)核配置
內(nèi)核開發(fā)特點、嵌入式Linux內(nèi)核代碼結(jié)構(gòu)、嵌入式Linux內(nèi)核配置
嵌入式Linux內(nèi)核配置原理及方法
6學時
第9章
ARMLinux
內(nèi)核分析和移植
ARMLinux的結(jié)構(gòu)組成、
ARMLinux的移植
ARMLinux的移植
6學時
續(xù)表
序號
教學內(nèi)容
教學重點
教學難點
課時分配
第10章
嵌入式文件系統(tǒng)
Linux文件系統(tǒng)結(jié)構(gòu)與特征、嵌入式文件系統(tǒng)的類型、根文件系統(tǒng)的構(gòu)建
根文件系統(tǒng)的構(gòu)建及設計
4學時
第11章
嵌入式Linux
多線程編程
Linux線程編程基礎、線程的同步與互斥
4學時
第12章
嵌入式Web
服務器設計
TCP/IP、UDP及HTTP等協(xié)議、socket編程基礎、嵌入式Web服務器介紹、Web服務器構(gòu)建
嵌入式Web服務器類型及Web服務器構(gòu)建
4學時
第13章
嵌入式Linux
的GUI
嵌入式GUI簡介、MiniGUI及Qt/Embedded程序設計
MiniGUI及Qt/
Embedded的移植
4學時
網(wǎng)上資源
本書的教學資源可從武漢大學課程中心網(wǎng)推薦課程中獲取,網(wǎng)址為: http://kczx.whu.edu.cn/G2S/ShowSystem/CourseCommend.aspx。如果課時寬裕,教師可選取一些專家講座或公開課視頻,在課堂上播放,以擴大學生的眼界。
作者簡介金偉正 武漢大學電子信息學院副教授,碩士生導師。全國安全防范報警系統(tǒng)標準化技術(shù)委員會TC100通信會員,廣東省安防協(xié)會高級會員。有著豐富的教學經(jīng)驗,出版過教材和專著多部,寫作經(jīng)驗豐富。
目錄
第1章緒論
1.1嵌入式系統(tǒng)概述
1.1.1嵌入式系統(tǒng)的歷史
1.1.2嵌入式系統(tǒng)的特點
1.1.3嵌入式處理器
1.1.4嵌入式系統(tǒng)的發(fā)展趨勢
1.2嵌入式系統(tǒng)開發(fā)
1.2.1需求分析及概要設計
1.2.2嵌入式系統(tǒng)中的硬件及軟件
1.2.3嵌入式系統(tǒng)開發(fā)的一般過程
1.3嵌入式操作系統(tǒng)
1.3.1嵌入式操作系統(tǒng)的分類
1.3.2嵌入式操作系統(tǒng)的特點
1.3.3典型的嵌入式操作系統(tǒng)
1.3.4嵌入式操作系統(tǒng)的選擇
1.4本章小結(jié)
1.5思考題
第2章Linux基礎知識
2.1認識Linux操作系統(tǒng)
2.1.1Linux簡明歷史
2.1.2Linux系統(tǒng)的特點和組成
2.1.3Linux的開發(fā)過程
2.2基本操作命令
2.2.1字符界面簡介
2.2.2常用命令簡介
2.3Linux文件與目錄系統(tǒng)
2.3.1Linux文件系統(tǒng)類型介紹
2.3.2Linux目錄系統(tǒng)
2.4shell簡介
2.5網(wǎng)絡服務簡介
2.5.1Linux支持的網(wǎng)絡協(xié)議
2.5.2Linux的網(wǎng)絡服務
2.6本章小結(jié)
2.7思考題
第3章Linux編程環(huán)境
3.1Linux編程環(huán)境介紹
3.1.1開發(fā)工具環(huán)境
3.1.2基于文本模式的開發(fā)平臺
3.1.3集成開發(fā)平臺Eclipse CDT
3.1.4文檔幫助環(huán)境
3.2常用編輯器
3.2.1VIM編輯器
3.2.2Emacs編輯器
3.3gcc編譯器的使用
3.3.1gcc的主要選項
3.3.2GNU C擴展簡介
3.4GNU make管理項目
3.4.1make簡介
3.4.2編寫Makefile文件的規(guī)則
3.5GDB調(diào)試
3.5.1GDB命令介紹
3.5.2GDB調(diào)試例程
3.5.3基于GDB的圖形界面調(diào)試工具
3.6本章小結(jié)
3.7思考題
第4章Linux外殼程序編程
4.1創(chuàng)建和運行外殼程序
4.1.1創(chuàng)建外殼程序
4.1.2運行外殼程序
4.2使用外殼變量
4.2.1給變量賦值
4.2.2讀取變量的值
4.2.3位置變量和其他系統(tǒng)變量
4.2.4引號的作用
4.3數(shù)值運算命令
4.4條件表達式
4.4.1if表達式
4.4.2case表達式
4.5循環(huán)語句
4.5.1for語句
4.5.2while語句
4.5.3until語句
4.5.4repeat語句
4.6shift命令
4.7select語句
4.8函數(shù)
4.9shell應用舉例
4.10本章小結(jié)
4.11思考題
第5章構(gòu)建嵌入式Linux開發(fā)平臺
5.1GNU跨平臺開發(fā)工具鏈
5.1.1基礎知識
5.1.2GNU跨平臺開發(fā)工具鏈的建立過程
5.2嵌入式Linux內(nèi)核
5.3嵌入式Linux根文件系統(tǒng)
5.4Bootloader簡介
5.5本章小結(jié)
5.6思考題
第6章ARM調(diào)試環(huán)境
6.1ARM調(diào)試工具簡介
6.1.1JTAG仿真器
6.1.2MultiICE Server
6.2ADS軟件調(diào)試工具
6.2.1使用Metrowork
CodeWarrior for ARM Developer Suite
6.2.2使用RealView Debugger
6.2.3使用AXD Debugger
6.3本章小結(jié)
6.4思考題
第7章嵌入式Bootloader技術(shù)
7.1Bootloader的基本概念
7.1.1Bootloader的安裝點和啟動過程
7.1.2Bootloader的模式
7.1.3Bootloader與主機之間的通信方式
7.2Bootloader典型結(jié)構(gòu)框架
7.2.1Bootloader總體流程
7.2.2Bootloader的stage1
7.2.3Bootloader的stage2
7.3典型Bootloader分析和移植
7.3.1Blob
7.3.2UBoot
7.4其他Bootloader簡介
7.4.1Redboot
7.4.2ARMBoot
7.4.3PPCBoot
7.5本章小結(jié)
7.6思考題
第8章Linux內(nèi)核配置
8.1內(nèi)核概述
8.2嵌入式Linux內(nèi)核代碼結(jié)構(gòu)
8.3內(nèi)核開發(fā)的特點
8.3.1沒有l(wèi)ibc庫
8.3.2GNU C
8.3.3沒有內(nèi)存保護機制
8.3.4不要輕易在內(nèi)核中使用浮點數(shù)
8.3.5容積小而固定的棧
8.3.6同步和并發(fā)
8.3.7可移植性的重要性
8.4嵌入式Linux內(nèi)核的配置
8.4.1Makefile
8.4.2配置文件
8.4.3Linux內(nèi)核配置選項
8.5配置舉例
8.6本章小結(jié)
8.7思考題
第9章ARMLinux內(nèi)核分析和移植
9.1ARM微處理器
9.1.1RISC體系結(jié)構(gòu)
9.1.2ARM微處理器的類型
9.1.3ARM微處理器的寄存器結(jié)構(gòu)
9.1.4ARM微處理器的指令結(jié)構(gòu)
9.2ARMLinux內(nèi)存管理
9.2.1內(nèi)存管理單元(MMU)
9.2.2ARMLinux的存儲管理機制
9.2.3ARMLinux存儲機制的建立
9.2.4ARMLinux對進程虛擬空間的管理
9.3ARMLinux進程管理與調(diào)度
9.3.1task_struct數(shù)據(jù)結(jié)構(gòu)
9.3.2Linux進程的創(chuàng)建、執(zhí)行和消亡
9.3.3ARM_Linux的進程調(diào)度
9.4ARMLinux中斷與中斷處理
9.4.1Linux處理中斷概述
9.4.2ARM體系程序的執(zhí)行流程
9.4.3ARM處理器對異常中斷的響應及返回過程
9.5Linux驅(qū)動程序簡介
9.5.1設備的分類
9.5.2設備號
9.5.3設備節(jié)點
9.5.4用戶空間和內(nèi)核空間
9.6Linux模塊化機制
9.6.1Linux的模塊化
9.6.2模塊的載入
9.6.3模塊的卸載
9.7ARMLinux系統(tǒng)啟動與初始化
9.7.1內(nèi)核數(shù)據(jù)結(jié)構(gòu)的初始化
9.7.2外設初始化
9.7.3init進程和linittab文件
9.7.4rc啟動腳本
9.7.5shell的啟動
9.8ARMLinux內(nèi)核裁減
9.9ARMLinux移植
9.9.1移植準備
9.9.2移植步驟
9.9.3配置內(nèi)核選項
9.9.4修改Kernel文件系統(tǒng)部分代碼
9.10本章小結(jié)
9.11思考題
第10章嵌入式文件系統(tǒng)
10.1Linux文件系統(tǒng)結(jié)構(gòu)與特征
10.1.1Linux文件系統(tǒng)概述
10.1.2Linux文件系統(tǒng)布局
10.1.3Linux支持的文件系統(tǒng)
10.2嵌入式文件系統(tǒng)簡介
10.2.1NOR Flash與NAND Flash介紹
10.2.2MTD介紹
10.2.3cramfs文件系統(tǒng)簡介
10.2.4romfs文件系統(tǒng)簡介
10.2.5JFFS文件系統(tǒng)簡介
10.2.6YAFFS文件系統(tǒng)簡介
10.3構(gòu)建根文件系統(tǒng)
10.4根文件系統(tǒng)設置
10.5BusyBox
10.5.1BusyBox簡介
10.5.2使用BusyBox構(gòu)建根文件系統(tǒng)
10.6嵌入式文件系統(tǒng)的設計
10.6.1文件系統(tǒng)格式的選型的基本策略
10.6.2混合型文件系統(tǒng)的設計
10.7本章小結(jié)
10.8思考題
第11章嵌入式Linux多線程編程
11.1線程基本概念
11.1.1Linux線程簡介
11.1.2Linux線程編程基礎
11.2多線程同步
11.2.1互斥鎖
11.2.2條件變量
11.2.3信號量
11.3生產(chǎn)者消費者問題
11.3.1生產(chǎn)者消費者問題簡介
11.3.2生產(chǎn)者消費者問題實例
11.4本章小結(jié)
11.5思考題
第12章嵌入式Web服務器設計
12.1TCP/IP協(xié)議
12.1.1TCP/IP協(xié)議棧
12.1.2TCP/IP協(xié)議棧的數(shù)據(jù)流向
12.1.3TCP協(xié)議與UDP協(xié)議
12.2HTTP協(xié)議
12.2.1HTTP協(xié)議的方法
12.2.2HTTP協(xié)議消息頭
12.2.3HTTP協(xié)議使用舉例
12.2.4內(nèi)核網(wǎng)絡服務
12.3socket編程基礎
12.3.1socket描述
12.3.2socket描述符
12.4嵌入式Web服務器介紹
12.4.1協(xié)議標準
12.4.2瘦Web服務器
12.4.3嵌入式應用接口技術(shù)
12.4.4實現(xiàn)形式
12.4.5RomPager
12.4.6EMIT
12.5Web服務器構(gòu)建
12.6本章小結(jié)
12.7思考題
第13章嵌入式Linux的GUI
13.1嵌入式GUI簡介
13.1.1MiniGUI
13.1.2Qt/Embedded
13.1.3NanoX
13.1.4OpenGUI
13.2MiniGUl程序設計基礎
13.2.1MiniGUI V1.3.3軟件包
13.2.2MiniGUI的特點
13.2.3窗口處理過程
13.2.4MiniGUI的線程機制
13.2.5MiniGUI的體系結(jié)構(gòu)
13.2.6MiniGUI的底層引擎
13.2.7MiniGUI的三種運行模式
13.2.8MiniGUI移植
13.3Qt/Embedded程序設計基礎
13.3.1Qt/Embedded圖形引擎實現(xiàn)基礎
13.3.2Qt/Embedded事件驅(qū)動基礎
13.3.3Qt/Embedded底層支持分析
13.3.4Qt/Embedded移植
13.4本章小結(jié)
13.5思考題
參考文獻