本書詳細介紹了Linux操作系統的配置與使用,在嵌入式系統上移植Linux系統,以及Linux系統上應用程序的開發技術。主要內容包括: 嵌入式系統簡介、Linux系統安裝與配置、Linux系統的使用基礎、Linux系統C語言程序設計、開發環境搭建、嵌入式Linux系統移植、Linux并發程序設計、Linux網絡程序設計、Linux文件應用程序設計、Linux系統設備驅動模型、驅動程序開發以及圖形用戶界面程序設計。
閱讀本書,要求讀者具有C語言程序設計與嵌入式系統基礎知識。本書可以作為高等院校計算機類、電子信息科學類及物聯網工程等專業的本科生或研究生教材,也可以作為嵌入式工程技術人員學習Linux程序設計的參考書.
小型化、智能化是計算機系統的發展趨勢。嵌入式系統由于其在功耗、體積、可靠性等方面的優勢,當前在消費電子、工業控制、物聯網等方面具有廣泛的應用。Linux系統是一個開源的操作系統,用戶群越來越大,已成為嵌入式系統的主流軟件平臺。本書詳細介紹了Linux系統以及嵌入式Linux開發環境搭建、系統移植過程,既說明了操作步驟,又進行了適當的原理分析,比較透徹地講解了嵌入式Linux系統的工作過程。在Linux平臺應用編程方面,比較全面介紹了Linux系統密切相關的多任務程序、網絡程序及文件操作程序設計等內容。在Linux系統驅動程序設計方面,介紹了Linux系統的設備驅動模型,并介紹了Platform驅動程序、混雜驅動程序及中斷驅動程序的編寫方法。此外,本書還詳細介紹了基于Qt的圖形用戶界面程序設計方法,Qt類庫的架構及主要類的成員說明。全書深入淺出,系統地介紹了嵌入式Linux程序設計技術,適用于相關專業課程教學用書。本書結構清晰,內容豐富,淺顯易懂,可操作性強,適合作為高校嵌入式系統開發課程的教材,也可供從事相關領域工作的工程技術人員參考。
前言Foreword
嵌入式系統在功耗、移動性等方面具有傳統計算機所不具備的優點,在當前工業控制、物聯網以及消費電子等多個領域具有廣闊的應用前景,發展潛力巨大。隨著嵌入式CPU的性能不斷提高,嵌入式系統具有逐漸取代桌面PC的趨勢,成為計算機技術發展的新方向。Linux內核支持x86、PowerPC、ARM等主流的CPU架構,移植性能好,內核可以根據需要進行裁減,同時Linux有龐大的用戶群,Linux平臺應用程序具有統一的開發接口,在系統之間遷移比較容易。基于Linux操作系統平臺已成為嵌入式系統開發的主流,越來越多的嵌入式系統開發商在產品中使用Linux系統作為應用平臺。隨著Linux內核結構以及實時性功能的不斷完善,Linux系統在嵌入式領域的應用范圍將越來越廣。當前,嵌入式Linux程序設計方面的人才缺口巨大。一方面,企業研發嵌入式系統產品需要大量嵌入式軟件開發人才;另一方面,由于專業劃分及課程本身對知識結構的要求,只有少數高校在相關專業開設了嵌入式Linux程序設計課程,適合高校相關專業課程體系及教學特點的教材也比較缺乏。基于上述背景,本書的編寫旨在以C語言程序設計、嵌入式系統程序設計課程為先修課,滿足計算機應用、電子信息及物聯網工程等專業學時安排的嵌入式Linux程序設計教學的需要。全書共分為11章。第1章緒論介紹Linux的發展過程及版權特點,講述了Linux操作系統的特點和內核的主要組成部分,嵌入式Linux交叉編譯過程以及Linux內核在嵌入式系統應用中的優勢、不足及改進途徑。第2章嵌入式系統概述介紹了計算機系統功能的演變過程,嵌入式系統在計算機系統分類中所處的位置,嵌入式系統的概念與應用領域、分類及特點,嵌入式系統的組成,ARM體系結構特點及常見的ARM微處理器,ARM的編程模型,常見的嵌入式操作系統以及嵌入式系統的開發過程。第3章Linux系統安裝與配置介紹了Linux的內核版本和發行版本、安裝過程,Linux系統的啟動配置及程序安裝方法。第4章Linux系統操作基礎介紹了Linux系統的使用和操作,包括文件管理、用戶管理以及網絡管理等部分。第5章Linux系統C語言程序設計介紹了C語言特點,常用頭文件及編譯環境變量的配置,C語言程序設計過程,編譯器GCC、調試器GDB的用法,工程管理器make的用法,模塊化程序設計方法,ARM平臺交叉編譯環境的搭建以及Linux系統常見的C語言集成開發環境。第6章Linux系統移植介紹了在嵌入式硬件上安裝Linux操作系統的過程,分為內核引導程序Bootloader、Linux內核、文件系統等三個部分的移植。第7章Linux并發程序設計介紹了Linux多進程程序設計、進程之間的通信以及多線程程序設計。第8章Linux網絡編程介紹了Linux套接字,Linux基于TCP的程序以及Linux基于UDP的程序設計。第9章Linux文件編程介紹了Linux文件的概念,文件的讀寫操作、文件的加鎖訪問以及文件的并行訪問復用模型等。第10章Linux設備驅動程序設計介紹了設備驅動模型,總線型的設備驅動程序開發、中斷設備驅動程序以及混雜型設備驅動程序開發。第11章用戶界面程序設計介紹了Qt的安裝,Qt應用程序基本結構以及Qt的常用類。本書第4章、第7章、第8章和第9章由張莉莉編寫,其余各章由田衛新編寫并負責全書統稿。在本書編寫過程中,袁軍、張富生、鮑靈利、徐昊等提供了幫助,在此表示感謝。由于編者水平有限,書中疏漏之處在所難免,懇請讀者批評指正!
作者2016年10月
目錄Contents
第1章緒論1
1.1Linux系統簡介1
1.1.1早期操作系統的發展1
1.1.2Linux系統的發展過程2
1.1.3Linux的版權2
1.2Linux操作系統特點3
1.2.1Linux系統特性3
1.2.2Linux與其他操作系統的比較5
1.3Linux內核組成7
1.3.1進程管理8
1.3.2內存管理9
1.3.3虛擬文件系統9
1.3.4網絡子系統11
1.4Linux在嵌入式系統中的應用12
1.4.1嵌入式Linux系統優勢12
1.4.2嵌入式Linux交叉編譯過程13
1.4.3嵌入式Linux的不足及改進14
習題16
第2章嵌入式系統概述17
2.1計算機系統發展及分類17
2.1.1計算機的主要應用領域17
2.1.2計算機系統分類20
2.2嵌入式系統簡介21
2.2.1嵌入式系統定義21
2.2.2嵌入式系統的分類與特點22
2.2.3嵌入式系統發展歷史23◆嵌入式Linux程序設計目錄2.2.4嵌入式系統組成24
2.3ARM簡介27
2.3.1ARM體系結構特點27
2.3.2ARM系列微處理器28
2.3.3ARM編程模型33
2.4嵌入式操作系統36
2.4.1嵌入式Linux36
2.4.2VxWorks37
2.4.3QNX37
2.4.4Windows CE37
2.4.5Palm OS37
2.5嵌入式系統開發過程38
2.5.1嵌入式系統整體開發過程38
2.5.2嵌入式硬件開發流程41
2.5.3嵌入式軟件開發流程43
習題44
第3章Linux系統安裝與配置45
3.1Linux系統版本45
3.1.1Linux 內核版本45
3.1.2Linux系統發行版本49
3.2Linux的安裝過程51
3.2.1系統最低配置與推薦配置51
3.2.2安裝前準備工作51
3.2.3硬盤分區52
3.2.4安裝系統52
3.3Linux系統目錄結構及基本配置60
3.3.1Linux目錄結構60
3.3.2系統啟動過程61
3.3.3登錄切換64
3.3.4安裝程序65
習題67
第4章Linux系統操作基礎68
4.1Shell與命令行68
4.1.1Shell概述68
4.1.2Shell命令的分類69
4.1.3Shell命令使用技巧69
4.2文件管理70
4.2.1什么是文件70
4.2.2Linux文件系統70
4.2.3Linux文件系統相關命令71
4.3用戶管理82
4.3.1用戶類型82
4.3.2用戶賬號管理83
4.3.3組管理86
4.4網絡管理87
4.4.1網絡的基本配置87
4.4.2網絡狀態命令89
4.5進程管理93
4.5.1什么是進程93
4.5.2進程管理命令93
4.5.3進程查看命令95
習題97
第5章Linux系統C語言程序設計98
5.1C語言概述98
5.1.1C語言發展過程98
5.1.2C語言的特點99
5.1.3C語言與Linux系統100
5.2Linux系統C語言程序設計過程102
5.2.1Linux系統C語言程序流程102
5.2.2gcc的編譯選項103
5.3GDB調試器用法105
5.3.1gdb使用流程105
5.3.2gdb基本命令109
5.4make工程管理器113
5.4.1makefile基本結構114
5.4.2makefile變量115
5.4.3makefile規則118
5.5模塊化程序設計119
5.5.1靜態庫的實現119
5.5.2動態庫的實現121
5.6ARM平臺Linux交叉編譯環境121
5.6.1源碼編譯方式122
5.6.2二進制解壓安裝123
5.7集成開發環境124
5.7.1Qt Creator125
5.7.2KDevelop125
5.7.3Code::Blocks125
5.7.4NetBeans126
5.7.5Eclipse127
習題128
第6章Linux系統移植129
6.1UBoot移植129
6.1.1BootLoader簡介129
6.1.2UBoot介紹133
6.1.3UBoot裝載過程133
6.1.4OK6410開發板UBoot的移植149
6.2Linux內核移植150
6.2.1計算機處理器架構150
6.2.2Linux內核及源碼結構153
6.2.3Linux內核移植155
6.3根文件系統移植163
6.3.1虛擬文件系統164
6.3.2文件系統分類165
6.3.3根文件系統的掛載過程167
6.3.4根文件系統制作170
習題173
第7章Linux并發程序設計174
7.1Linux進程174
7.2進程控制175
7.2.1獲取進程ID176
7.2.2創建進程176
7.2.3進程調度179
7.2.4進程終止180
7.2.5等待進程結束181
7.2.6守護進程183
7.3進程之間的通信186
7.3.1管道186
7.3.2信號193
7.3.3消息隊列203
7.3.4信號量208
7.3.5共享內存213
7.4線程216
7.4.1創建輕量級進程217
7.4.2POSIX線程218
7.4.3線程屬性222
7.4.4線程之間的同步與互斥226
習題237
第8章Linux網絡編程238
8.1網絡編程的基本知識238
8.2套接字239
8.2.1套接字函數239
8.2.2本地套接字243
8.2.3網絡套接字246
8.3TCP程序設計253
8.4UDP程序設計257
8.5套接字屬性設置261
習題265
第9章Linux文件編程266
9.1底層文件I/O266
9.1.1文件描述符267
9.1.2底層文件I/O函數267
9.2高級文件操作270
9.2.1文件加鎖270
9.2.2多路復用276
9.3標準文件I/O285
9.3.1打開和關閉文件286
9.3.2文件讀寫288
習題291
第10章Linux設備驅動程序設計292
10.1設備驅動模型簡介292
10.1.1底層數據模型292
10.1.2上層設備模型297
10.1.3字符設備驅動模型應用接口302
10.2platform設備驅動程序設計306
10.2.1platform_device注冊306
10.2.2platform_driver注冊307
10.2.3platform設備驅動框架源碼310
10.3設備驅動程序編譯及加載313
10.3.1編譯Linux設備驅動程序313
10.3.2驅動程序的加載314
10.4設備驅動程序硬件訪問317
10.4.1內存與I/O設備317
10.4.2中斷320
10.5驅動程序設計實例分析321
10.5.1蜂鳴器驅動程序設計321
10.5.2中斷驅動程序333
10.5.3混雜設備驅動程序336
習題339
第11章用戶界面程序設計340
11.1Qt簡介及安裝340
11.1.1Qt簡介340
11.1.2Qt安裝341
11.2Qt程序設計入門343
11.2.1命令行方式編程343
11.2.2Qt Creator方式345
11.2.3Qt程序的運行機制353
11.3Qt常用類介紹357
11.3.1Qt分組類庫357
11.3.2Qt類庫介紹359
習題382