本書(shū)介紹Linux 內(nèi)核的編譯和移植、根文件系統(tǒng)的制作、基礎(chǔ)系統(tǒng)、桌面系統(tǒng), 以及這些軟件在系統(tǒng)中的 作用、軟件之間的依賴(lài)關(guān)系、各種軟件的移植方法。由于很多樹(shù)莓派應(yīng)用是由Python 語(yǔ)言開(kāi)發(fā)的, 本書(shū)也 專(zhuān)門(mén)介紹樹(shù)莓派上硬件接口的Python 控制模塊和其他一些基礎(chǔ)應(yīng)用。全書(shū)共分6 章,第1 章介紹Linux 內(nèi)核的 移植及根文件系統(tǒng)的制作;在第1 章的基礎(chǔ)上, 第2 章移植了一些基礎(chǔ)軟件, 增強(qiáng)了樹(shù)莓派的聯(lián)網(wǎng)功能;第3 章 介紹Linux 的基礎(chǔ)圖形庫(kù)、文本布局軟件、X Window 系統(tǒng), 直至構(gòu)成一個(gè)完整的XFCE4 桌面環(huán)境;第4 章介 紹一些應(yīng)用軟件的移植, 包括遠(yuǎn)程桌面、音視頻編碼與解碼及媒體播放、文檔閱讀, 以及網(wǎng)絡(luò)監(jiān)控軟件;第 5 章 介紹典型的Linux 開(kāi)發(fā)工具的移植, 移植了編譯器的樹(shù)莓派系統(tǒng)初步具備板載開(kāi)發(fā)能力;鑒于樹(shù)莓派被廣泛用于 電子設(shè)計(jì)制作, 第6 章專(zhuān)門(mén)討論樹(shù)莓派GPIO 接口的功能, 介紹一款典型的GPIO Python 模塊的使用, 并介紹 各種應(yīng)用模塊的工作原理和程序控制方法。 本書(shū)能對(duì)樹(shù)莓派愛(ài)好者深入學(xué)習(xí)提供一定的幫助, 對(duì)于其他嵌入式開(kāi)發(fā)人員, 書(shū)中介紹的大多數(shù)內(nèi)容也有 同樣的參考意義。此外, 本書(shū)也可作為高等學(xué)校電子信息專(zhuān)業(yè)在學(xué)習(xí)嵌入式Linux 操作系統(tǒng)時(shí)的教學(xué)參考書(shū)。
樹(shù)莓派是廣受電子愛(ài)好者關(guān)注的便攜式計(jì)算機(jī)系統(tǒng),Linux操作系統(tǒng)是適配樹(shù)莓派的主要操作系統(tǒng)。本書(shū)系統(tǒng)介紹將Linux操作系統(tǒng)移植到樹(shù)莓派的方法與實(shí)現(xiàn),幫助讀者了解操作系統(tǒng)的組成和運(yùn)行方式,理解操作系統(tǒng)基本軟件的作用和它們之間的關(guān)系,掌握樹(shù)莓派控制接口的使用方法。全書(shū)內(nèi)容涵蓋如下主題:
內(nèi)核與根文件系統(tǒng);
軟件移植方法、基礎(chǔ)軟件包和網(wǎng)絡(luò)工具;
輕量級(jí)Linux桌面環(huán)境XFCE4;
若干Linux應(yīng)用軟件移植;
構(gòu)建板載開(kāi)發(fā)環(huán)境、移植Python;
樹(shù)莓派I/O接口控制。
樹(shù)莓派是在電子愛(ài)好者中廣受歡迎的一款單板式計(jì)算機(jī)。自其問(wèn)世以來(lái) ,全世界眾多的開(kāi)發(fā)者和愛(ài)好者在這個(gè)系統(tǒng)上開(kāi)發(fā)了大量有趣的應(yīng)用。大多數(shù)應(yīng)用都是基于 Linux操作系統(tǒng) ,樹(shù)莓派官方網(wǎng)站也提供了幾種典型的操作系統(tǒng)映像。用戶(hù)只要下載后 ,復(fù)制到存儲(chǔ)卡上,操作系統(tǒng)就能運(yùn)行起來(lái)。
多數(shù)人只是在使用這個(gè)成熟的操作系統(tǒng)。本書(shū)則是介紹如何從零開(kāi)始 ,從源代碼構(gòu)造一個(gè)可用的 Linux操作系統(tǒng),并在這個(gè)系統(tǒng)上實(shí)現(xiàn)一些簡(jiǎn)單的應(yīng)用。通過(guò)學(xué)習(xí)這一過(guò)程 ,計(jì)算機(jī)愛(ài)好者可以根據(jù)自己的需要移植相關(guān)的軟件 ,并自如地調(diào)度系統(tǒng)的軟、硬件資源 ,甚至打造自己的 Linux發(fā)行版。
Linux是遵循自由版權(quán)協(xié)議的操作系統(tǒng),本書(shū)移植的絕大部分軟件都是自由軟件?梢悦赓M(fèi)獲得 ,其中多數(shù)還允許用戶(hù)對(duì)其修改和再發(fā)布 ,但用戶(hù)仍然需要遵守它們的版權(quán)協(xié)議。本書(shū)移植的軟件所涉及的版權(quán)協(xié)議主要有以下幾種。
. GNU通用公共版權(quán)協(xié)議 (General Public License, GPL),出自自由軟件基金會(huì)。這是 Linux軟件使用多的一種版權(quán)協(xié)議 , Linux內(nèi)核、 GCC、BusyBox等屬此類(lèi) ;該版權(quán)協(xié)議要求由 GPL衍生的軟件也必須遵守 GPL規(guī)范。
. GNU寬松通用公共版權(quán)協(xié)議 (Lesser General Public License, LGPL),同樣出自自由軟件基金會(huì)。以這種版權(quán)協(xié)議發(fā)布的軟件允許其他版權(quán)協(xié)議 (即使是私有版權(quán) )的軟件使用 ,而不會(huì)影響其他版權(quán)協(xié)議。通常它們以共享庫(kù)的方式被調(diào)用 ,以明確版權(quán)協(xié)議之間的界線。但 LGPL軟件本身修改后的再發(fā)布仍需要遵守 LGPL規(guī)范。GTK、FFMpeg等軟件以 LGPL發(fā)布。
. BSD及類(lèi) BSD版權(quán)協(xié)議 ,源自加州大學(xué)伯克利分校。該版權(quán)協(xié)議要求被授權(quán)者保留原著作權(quán)聲明,但并不要求其衍生產(chǎn)品必須開(kāi)源,例如 Tcl/Tk。
. MIT及類(lèi) MIT版權(quán)協(xié)議,源自麻省理工學(xué)院,又稱(chēng)作 X版權(quán)協(xié)議或 X11版權(quán)協(xié)議 , X11系統(tǒng)的軟件均以此協(xié)議發(fā)布。它要求被授權(quán)者保留著作權(quán)和版權(quán)聲明 ,對(duì)軟件的使用和再發(fā)布相對(duì)寬松。它也是自由軟件基金會(huì)所認(rèn)可的自由軟件許可協(xié)議條款,與 GPL兼容。
. Python軟件基金會(huì)版權(quán)協(xié)議 (Python Software Foundation License, PSFL),出自 Python軟件基金會(huì) ,要求被授權(quán)者在使用 Python及衍生產(chǎn)品時(shí)須保持原有的版權(quán)協(xié)議,它與 GPL兼容,但并不要求再發(fā)布的軟件也開(kāi)源。
. 其他開(kāi)源軟件版權(quán)協(xié)議,例如 zlib-libpng版權(quán)協(xié)議等。這些開(kāi)源版權(quán)協(xié)議的共同特點(diǎn)是允許免費(fèi)獲得、修改、移植 ,而且不限制商業(yè)使用。但在使用和再發(fā)布時(shí)必須保持原版權(quán)聲明,明確原作者的貢獻(xiàn)。
相比軟件開(kāi)發(fā) ,移植軟件的技術(shù)含量并沒(méi)有那么高 ,大量工作都是重復(fù)性的機(jī)械勞動(dòng)。因此也有不少軟件工程師將編譯整個(gè)操作系統(tǒng)的工作寫(xiě)成一組腳本程序 ,一個(gè)典型的案例就是 Buildroot。開(kāi)發(fā)人員通過(guò)圖形配置界面 ,選擇自己需要的功能 ,輸入幾條命令 ,剩下的就是等待。軟件下載、編譯、安裝完全自動(dòng)化實(shí)現(xiàn)。這個(gè)過(guò)程中 ,開(kāi)發(fā)人員不需要了解軟件的依賴(lài)關(guān)系,也不需要關(guān)心編譯過(guò)程,甚至都不需要自己手工安裝編譯器。單純從構(gòu)建系統(tǒng)的目標(biāo)來(lái)看,這種方法不失為一種方便的選擇,但對(duì)理解操作系統(tǒng)的構(gòu)成幫助不大。
本書(shū)基于樹(shù)莓派平臺(tái) ,介紹從內(nèi)核到桌面應(yīng)用的整套系統(tǒng)的移植過(guò)程。在討論軟件移植方法的同時(shí) ,還介紹這些軟件的作用及它們之間的關(guān)系。作為一個(gè)完整的操作系統(tǒng) ,這些軟件遠(yuǎn)遠(yuǎn)不夠 ,但已經(jīng)足夠勝任樹(shù)莓派的大部分應(yīng)用場(chǎng)合。掌握這些軟件的移植方法 ,再移植其他軟件也只是時(shí)間問(wèn)題。
本書(shū)面向具有一定 Linux系統(tǒng)使用基礎(chǔ)的樹(shù)莓派愛(ài)好者。計(jì)算機(jī)技術(shù)的發(fā)展日新月異 ,軟件的更新?lián)Q代更是頻繁。本書(shū)在移植過(guò)程中使用的軟件 ,隨著時(shí)間的推移會(huì)漸漸顯得過(guò)時(shí)。然而 ,得益于人工智能、邊緣計(jì)算、嵌入式應(yīng)用的發(fā)展 , Linux操作系統(tǒng)正處于發(fā)展上升期,開(kāi)源軟件社區(qū)不斷壯大。在可見(jiàn)的將來(lái) ,軟件移植的方法會(huì)越來(lái)越規(guī)范、越來(lái)越簡(jiǎn)單。如果有意愿自己定制 Linux操作系統(tǒng),本書(shū)可提供一定的參考。
限于筆者的知識(shí)水平和認(rèn)知能力 ,書(shū)中難免存在疏漏之處 ,懇請(qǐng)同行專(zhuān)家及讀者批評(píng)指正。
編者
2022年春于南京
方元 南京大學(xué)物理學(xué)博士、副教授,F(xiàn)就職于南京大學(xué)電子科學(xué)與工程學(xué)院,長(zhǎng)期從事信號(hào)處理、計(jì)算機(jī)組成原理及操作系統(tǒng)領(lǐng)域的課程教學(xué)工作,主要研究領(lǐng)域涉及音頻信號(hào)處理、計(jì)算機(jī)通信和嵌入式系統(tǒng)應(yīng)用。
沈克勤 畢業(yè)于國(guó)防科技大學(xué)系統(tǒng)工程專(zhuān)業(yè),于解放軍理工大學(xué)工作多年,從事計(jì)算機(jī)應(yīng)用領(lǐng)域的教學(xué)和研究工作。退役后在南京理工大學(xué)紫金學(xué)院從事物聯(lián)網(wǎng)應(yīng)用的教學(xué)和競(jìng)賽指導(dǎo)工作。
第1章 內(nèi)核與根文件系統(tǒng) .1
1.1樹(shù)莓派簡(jiǎn)介 1
1.1.1 核心處理器 . 3
1.1.2 樹(shù)莓派操作系統(tǒng) 4
1.1.3 樹(shù)莓派接口 . 4
1.2開(kāi)發(fā)工具 . 4
1.2.1 編譯工具 5
1.2.2 調(diào)試接口 6
1.3樹(shù)莓派的外存儲(chǔ)器 8
1.3.1 SD卡分區(qū) 8
Bootloader 9
1.3.2
1.4 Linux內(nèi)核 .10
1.4.1 獲取內(nèi)核源碼.11
1.4.2 配置和編譯內(nèi)核 .11
1.5根文件系統(tǒng).15
1.5.1 編譯 BusyBox15
1.5.2 初始化 RAMDisk .18
1.5.3 構(gòu)造 Ext4分區(qū) 27
1.5.4 配置文件 .31
1.5.5 網(wǎng)絡(luò)文件系統(tǒng).40
1.6本章小結(jié) 40
第2章基礎(chǔ)系統(tǒng). 42
2.1軟件編譯 42
2.1.1 軟件的依賴(lài)關(guān)系 .42
2.1.2 基礎(chǔ)系統(tǒng)軟件.43
2.1.3 軟件編譯方法.44
2.2包管理器 49
2.2.1 數(shù)據(jù)壓縮 .49
2.2.2 編譯 dpkg56
2.2.3 安裝包格式 57
2.3安裝軟件包.60
2.4其他軟件編譯.61
2.4.1 Vim編輯器 .61
2.4.2 時(shí)區(qū)數(shù)據(jù).66
2.4.3 文件系統(tǒng)工具.67
bash67
2.4.5 systemd.68
2.5網(wǎng)絡(luò)工具 71
2.5.1 編譯網(wǎng)絡(luò)工具.71
2.5.2 遠(yuǎn)程連接 .78
2.5.3 無(wú)線網(wǎng)絡(luò)連接.78
2.5.4 安裝 dropbear81
2.6本章小結(jié) 84
2.4.4 第3章桌面系統(tǒng). 86
3.1 X Window系統(tǒng)86
3.2基礎(chǔ)圖形庫(kù).91
3.2.1 libpng92
3.2.2 libjpeg.95
JasPer .96
3.2.3 TIFF.97
3.2.4
3.2.5 librsvg.104
3.3 文字顯示及渲染 105
Glib 107
3.3.1 3.3.2 FreeType .111
HarfBuzz .116
3.3.3 FriBidi.117
3.3.4
3.3.5 Fontconfig118
3.3.6 Pango119
3.4 圖形工具庫(kù)
GTK120
GDK-PixBuf122
3.4.1 ATK122
3.4.2 Cairo.123
3.4.3 mesa .126
3.4.5 GTK及其應(yīng)用程序 128
3.5 XFCE4桌面環(huán)境 131
3.5.1 窗口管理器 xfwm4 .132
3.5.2 會(huì)話(huà)管理器 xfce4-session.133
3.5.3 桌面設(shè)置管理器 xfce4-settings.133
3.5.4 桌面管理器 xfdesktop.134
3.5.5 文件管理器 Thunar 135
3.5.6 終端仿真器 136
3.6 X服務(wù) .136
3.6.1 編譯
xorg-server.138
3.6.2 X系統(tǒng)其他支持 .139
3.6.3 啟動(dòng) XFCE4 139
3.7本章小結(jié) 141
3.4.4 第4章 Linux應(yīng)用軟件 142
4.1遠(yuǎn)程桌面 142
4.1.1 移植 VNC142
4.1.2 中文化.144
4.2媒體播放器.147
4.2.1 音、視頻編碼與解碼.147
4.2.2 音頻子系統(tǒng) 149
4.2.3 播放器 mpv .154
4.3文檔閱讀工具 .155
4.3.1 Poppler .155
libsecret.156
4.3.2 libXML2157
4.3.3
4.3.4 gspell 158
4.4網(wǎng)絡(luò)視頻監(jiān)控 .158
4.5本章小結(jié) 161
第5章板載開(kāi)發(fā)環(huán)境 162
5.1編譯器 .162
5.2版本控制系統(tǒng) GIT165
5.3 Python簡(jiǎn)介.166
5.3.1 Python發(fā)展史 .166
5.3.2 Python編程理念167
5.3.3 Python的應(yīng)用 .167
5.4 Python的移植 .167
5.4.1數(shù)據(jù)庫(kù)軟件 SQLite.169
5.4.2 Tcl/Tk 170
5.4.3編譯 Python 171
5.4.4安裝 pip 172
5.5 Python基本使用 173
5.5.1 Python編程工具173
5.5.2運(yùn)行 Python程序 174
5.5.3交互方式 .175
5.6本章小結(jié) 176
第6章樹(shù)莓派接口控制. 177
6.1 樹(shù)莓派設(shè)備擴(kuò)展 177
GPIO177
6.1.1 PWM179
6.1.2
6.1.3擴(kuò)展接口資源配置 180
6.2樹(shù)莓派 GPIO模塊181
6.2.1安裝模塊.181
6.2.2使用 GPIO模塊 182
6.3 GPIO控制輸出設(shè)備 .184
6.4 GPIO輸入功能 185
6.4.1基本輸入功能.185
6.4.2 GPIO高級(jí)輸入功能 .186
6.5 PWM模塊.188
6.6傳感器和控制器 190
6.6.1蜂鳴器.190
6.6.2傳感器.191
6.6.3紅外遙控器 191
6.6.4直流電動(dòng)機(jī) 196
6.6.5伺服電動(dòng)機(jī) 197
6.6.6步進(jìn)電動(dòng)機(jī) 198
6.6.7超聲波測(cè)距 203
6.6.8控制 SPI設(shè)備 204
6.6.9 I2C應(yīng)用207
6.7本章小結(jié)212
參考文獻(xiàn) . 214
擴(kuò)展資源 . 216
索引 217