本書詳細(xì)介紹嵌入式系統(tǒng)開發(fā)過程中的主要技術(shù)問題,著重講解嵌入式Linux系統(tǒng)的設(shè)計與實現(xiàn),注重理論和實驗的結(jié)合。全書分為13章,內(nèi)容包括緒論、Linux基礎(chǔ)知識、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服務(wù)器設(shè)計、嵌入式Linux的GUI等內(nèi)容。
本書通俗易懂,圖文并茂,注重理解與實例,大部分章節(jié)配有實例和源程序,可操作性強。本書可作為計算機(jī)學(xué)科、電子信息類相關(guān)專業(yè)本科生、研究生及工程碩士的嵌入式系統(tǒng)課程的教材,也可供相關(guān)研究人員、工程技術(shù)人員閱讀參考。
本書著重講解嵌入式Linux系統(tǒng)的設(shè)計與實現(xiàn),注重理論和實驗的結(jié)合。本書配套學(xué)習(xí)資源豐富,包括:課件、學(xué)習(xí)建議、源代碼和教學(xué)網(wǎng)站。
前言
嵌入式系統(tǒng)正在重新塑造人們的認(rèn)知、生活、工作和娛樂方式。隨著物聯(lián)網(wǎng)及國內(nèi)外嵌入式產(chǎn)品進(jìn)一步開發(fā)和推廣,嵌入式系統(tǒng)已經(jīng)滲透到科學(xué)研究、工程設(shè)計、軍事技術(shù)、商業(yè)文化藝術(shù)及人們?nèi)粘I钪械姆椒矫婷妗@著嵌入式系統(tǒng)構(gòu)建的智能手機(jī)、人工智能、AR/VR、無人機(jī)、智能穿戴設(shè)備、汽車自動駕駛和智能家居系統(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)絡(luò)和文件系統(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)絡(luò)功能強大等特點,從而成為嵌入式市場的領(lǐng)先者。
本書大部分內(nèi)容曾作為武漢大學(xué)電子信息學(xué)院研究生嵌入式原理與應(yīng)用課程的講義連續(xù)使用多屆,取得良好的教學(xué)效果。編者總結(jié)了多年的科研經(jīng)驗和案例,力求從基本概念、基本原理、基本方法和基本應(yīng)用出發(fā),使讀者能扎實、系統(tǒng)地掌握嵌入式Linux系統(tǒng)開發(fā)的方法和技能。
全書分為13章:
第1章緒論;
第2章為Linux操作系統(tǒng)入門基礎(chǔ);
第3章介紹Linux系統(tǒng)環(huán)境下的程序設(shè)計基礎(chǔ);
第4章學(xué)習(xí)Linux外殼程序的編程方法;
第5章介紹如何構(gòu)建嵌入式Linux開發(fā)平臺;
第6章對ARM調(diào)試工具、編譯環(huán)境進(jìn)行介紹;
第7章對嵌入式Bootloader技術(shù)進(jìn)行詳細(xì)的分析;
第8章詳細(xì)講述Linux內(nèi)核配置方法;
第9章以嵌入式操作系統(tǒng)ARMLinux為例,對其內(nèi)核進(jìn)行詳細(xì)的剖析,其原理也適用其他架構(gòu)的處理器;
第10章對嵌入式文件系統(tǒng)進(jìn)行綜合描述和具體分析;
第11章介紹嵌入式Linux多線程編程方法;
第12章就構(gòu)建嵌入式Web服務(wù)器使用的相關(guān)技術(shù)進(jìn)行了詳細(xì)的分析;
第13章詳細(xì)介紹嵌入式圖形用戶界面的原理和設(shè)計方法。
本書特點
圖文并茂,注重整體內(nèi)容框架的講解,培養(yǎng)學(xué)生的大局觀。例如,第1章用多幅圖片描述嵌入式Linux系統(tǒng)開發(fā)的整體框架及開發(fā)流程,便于讀者快速入門;
第8章用一張框圖描述整個Linux內(nèi)核代碼樹的結(jié)構(gòu),便于理解與記憶。
通俗易懂,注重理解與實例。大部分章節(jié)配有實例和源代碼,引導(dǎo)讀者逐步熟悉各種開發(fā)工具和環(huán)境,使讀者建立感性認(rèn)識,為進(jìn)一步深入學(xué)習(xí)打下良好的基礎(chǔ),可操作性極強。
代碼規(guī)范細(xì)致,內(nèi)容深入,起點較高。在實例源代碼中,進(jìn)行了非常詳細(xì)的注釋,可以引導(dǎo)讀者理解和掌握編寫程序的關(guān)鍵過程。在注重基礎(chǔ)和實踐的同時,注重知識的擴(kuò)充,如本書對線程、網(wǎng)絡(luò)編程及圖形用戶界面編程做了深入的講解,使讀者對嵌入式Linux系統(tǒng)的開發(fā)水平有本質(zhì)的提高。
每章都給出了主要內(nèi)容、本章小結(jié)以及思考題,有利于提升讀者的自學(xué)效果。
作者分工與致謝
本書由金偉正編著,徐穎、金詩怡參與了部分翻譯和編輯工作,他們的工作對本書的定稿起了很大的作用。本書參考了Embedded Linux Primer: A Practical, RealWorld
Approach、Linux Kernel Development 3rd Edition等書籍,有些內(nèi)容取材于國內(nèi)外最新的教材和技術(shù)資料,詳見參考文獻(xiàn),有興趣的讀者可以進(jìn)一步查閱。在此,謹(jǐn)向多位原作者表達(dá)誠摯的敬意和真誠的感謝。本書的部分資料來自網(wǎng)絡(luò),無法一一列舉,在此一并感謝。同時,特別感謝武漢大學(xué)電子信息學(xué)院對本書給予的大力支持。
聯(lián)系作者
由于編寫時間倉促,編著者的水平有限,書中難免存在不妥或錯誤之處,如果您對本書有任何意見或建議,或?qū)Ρ緯械膬?nèi)容或章節(jié)有興趣,不妨發(fā)電子郵件告訴我們(電子郵箱jwz@whu.edu.cn),您提出的問題和建議是編著者前進(jìn)的動力。
金偉正2017年3月于武漢大學(xué)
學(xué)習(xí)建議
本書定位
本書可作為計算機(jī)學(xué)科、電子信息類相關(guān)專業(yè)本科生、研究生及工程碩士的嵌入式系統(tǒng)課程的教材,也可供相關(guān)研究人員、工程技術(shù)人員閱讀參考。
建議授課學(xué)時
如果將本書作為教材使用,建議將課程的教學(xué)分為課堂講授和學(xué)生自主上機(jī)兩個層次。課堂講授建議36~48學(xué)時,學(xué)生自主上機(jī)建議18~24學(xué)時。教師可以根據(jù)不同的教學(xué)對象或教學(xué)大綱要求安排學(xué)時數(shù)和教學(xué)內(nèi)容。
教學(xué)內(nèi)容、重點和難點提示、課時分配
序號
教學(xué)內(nèi)容
教學(xué)重點
教學(xué)難點
課時分配
第1章
緒論
嵌入式系統(tǒng)開發(fā)的一般過程、嵌入式操作系統(tǒng)
嵌入式系統(tǒng)開發(fā)的一般過程及方法
2學(xué)時
第2章
Linux基礎(chǔ)知識
認(rèn)識Linux操作系統(tǒng)、
Linux基本操作命令、
Linux文件與目錄系統(tǒng)、
Linux網(wǎng)絡(luò)服務(wù)
Linux基本操作命令的使用
2學(xué)時
第3章
Linux編程環(huán)境
Linux編程環(huán)境、VIM及Emacs的使用、GNU make使用及Makefile編程、
GDB的使用方法
GNU make使用及Makefile編程方法
2學(xué)時
第4章
Linux
外殼程序編程
創(chuàng)建和運行外殼程序、外殼程序的編程
2學(xué)時
第5章
構(gòu)建嵌入式
Linux開發(fā)平臺
GNU跨平臺開發(fā)工具鏈、
嵌入式Linux內(nèi)核及根文件系統(tǒng)、Bootloader簡介
GNU跨平臺開發(fā)工具鏈的建立過程
4學(xué)時
第6章
ARM調(diào)試環(huán)境
ARM調(diào)試工具簡介、
ADS軟件調(diào)試工具
2學(xué)時
第7章
嵌入式
Bootloader技術(shù)
Bootloader的基本概念、典型結(jié)構(gòu)框架、分析和移植
Bootloader的移植
6學(xué)時
第8章
Linux內(nèi)核配置
內(nèi)核開發(fā)特點、嵌入式Linux內(nèi)核代碼結(jié)構(gòu)、嵌入式Linux內(nèi)核配置
嵌入式Linux內(nèi)核配置原理及方法
6學(xué)時
第9章
ARMLinux
內(nèi)核分析和移植
ARMLinux的結(jié)構(gòu)組成、
ARMLinux的移植
ARMLinux的移植
6學(xué)時
續(xù)表
序號
教學(xué)內(nèi)容
教學(xué)重點
教學(xué)難點
課時分配
第10章
嵌入式文件系統(tǒng)
Linux文件系統(tǒng)結(jié)構(gòu)與特征、嵌入式文件系統(tǒng)的類型、根文件系統(tǒng)的構(gòu)建
根文件系統(tǒng)的構(gòu)建及設(shè)計
4學(xué)時
第11章
嵌入式Linux
多線程編程
Linux線程編程基礎(chǔ)、線程的同步與互斥
4學(xué)時
第12章
嵌入式Web
服務(wù)器設(shè)計
TCP/IP、UDP及HTTP等協(xié)議、socket編程基礎(chǔ)、嵌入式Web服務(wù)器介紹、Web服務(wù)器構(gòu)建
嵌入式Web服務(wù)器類型及Web服務(wù)器構(gòu)建
4學(xué)時
第13章
嵌入式Linux
的GUI
嵌入式GUI簡介、MiniGUI及Qt/Embedded程序設(shè)計
MiniGUI及Qt/
Embedded的移植
4學(xué)時
網(wǎng)上資源
本書的教學(xué)資源可從武漢大學(xué)課程中心網(wǎng)推薦課程中獲取,網(wǎng)址為: http://kczx.whu.edu.cn/G2S/ShowSystem/CourseCommend.aspx。如果課時寬裕,教師可選取一些專家講座或公開課視頻,在課堂上播放,以擴(kuò)大學(xué)生的眼界。
作者簡介金偉正 武漢大學(xué)電子信息學(xué)院副教授,碩士生導(dǎo)師。全國安全防范報警系統(tǒng)標(biāo)準(zhǔn)化技術(shù)委員會TC100通信會員,廣東省安防協(xié)會高級會員。有著豐富的教學(xué)經(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需求分析及概要設(shè)計
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基礎(chǔ)知識
2.1認(rèn)識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)絡(luò)服務(wù)簡介
2.5.1Linux支持的網(wǎng)絡(luò)協(xié)議
2.5.2Linux的網(wǎng)絡(luò)服務(wù)
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擴(kuò)展簡介
3.4GNU make管理項目
3.4.1make簡介
3.4.2編寫Makefile文件的規(guī)則
3.5GDB調(diào)試
3.5.1GDB命令介紹
3.5.2GDB調(diào)試?yán)?/p>
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條件表達(dá)式
4.4.1if表達(dá)式
4.4.2case表達(dá)式
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應(yīng)用舉例
4.10本章小結(jié)
4.11思考題
第5章構(gòu)建嵌入式Linux開發(fā)平臺
5.1GNU跨平臺開發(fā)工具鏈
5.1.1基礎(chǔ)知識
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與主機(jī)之間的通信方式
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)存保護(hù)機(jī)制
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的存儲管理機(jī)制
9.2.3ARMLinux存儲機(jī)制的建立
9.2.4ARMLinux對進(jìn)程虛擬空間的管理
9.3ARMLinux進(jìn)程管理與調(diào)度
9.3.1task_struct數(shù)據(jù)結(jié)構(gòu)
9.3.2Linux進(jìn)程的創(chuàng)建、執(zhí)行和消亡
9.3.3ARM_Linux的進(jìn)程調(diào)度
9.4ARMLinux中斷與中斷處理
9.4.1Linux處理中斷概述
9.4.2ARM體系程序的執(zhí)行流程
9.4.3ARM處理器對異常中斷的響應(yīng)及返回過程
9.5Linux驅(qū)動程序簡介
9.5.1設(shè)備的分類
9.5.2設(shè)備號
9.5.3設(shè)備節(jié)點
9.5.4用戶空間和內(nèi)核空間
9.6Linux模塊化機(jī)制
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外設(shè)初始化
9.7.3init進(jìn)程和linittab文件
9.7.4rc啟動腳本
9.7.5shell的啟動
9.8ARMLinux內(nèi)核裁減
9.9ARMLinux移植
9.9.1移植準(zhǔn)備
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)設(shè)置
10.5BusyBox
10.5.1BusyBox簡介
10.5.2使用BusyBox構(gòu)建根文件系統(tǒng)
10.6嵌入式文件系統(tǒng)的設(shè)計
10.6.1文件系統(tǒng)格式的選型的基本策略
10.6.2混合型文件系統(tǒng)的設(shè)計
10.7本章小結(jié)
10.8思考題
第11章嵌入式Linux多線程編程
11.1線程基本概念
11.1.1Linux線程簡介
11.1.2Linux線程編程基礎(chǔ)
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服務(wù)器設(shè)計
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)絡(luò)服務(wù)
12.3socket編程基礎(chǔ)
12.3.1socket描述
12.3.2socket描述符
12.4嵌入式Web服務(wù)器介紹
12.4.1協(xié)議標(biāo)準(zhǔn)
12.4.2瘦Web服務(wù)器
12.4.3嵌入式應(yīng)用接口技術(shù)
12.4.4實現(xiàn)形式
12.4.5RomPager
12.4.6EMIT
12.5Web服務(wù)器構(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程序設(shè)計基礎(chǔ)
13.2.1MiniGUI V1.3.3軟件包
13.2.2MiniGUI的特點
13.2.3窗口處理過程
13.2.4MiniGUI的線程機(jī)制
13.2.5MiniGUI的體系結(jié)構(gòu)
13.2.6MiniGUI的底層引擎
13.2.7MiniGUI的三種運行模式
13.2.8MiniGUI移植
13.3Qt/Embedded程序設(shè)計基礎(chǔ)
13.3.1Qt/Embedded圖形引擎實現(xiàn)基礎(chǔ)
13.3.2Qt/Embedded事件驅(qū)動基礎(chǔ)
13.3.3Qt/Embedded底層支持分析
13.3.4Qt/Embedded移植
13.4本章小結(jié)
13.5思考題
參考文獻(xiàn)