本書介紹Linux 內(nèi)核的編譯和移植、根文件系統(tǒng)的制作、基礎(chǔ)系統(tǒng)、桌面系統(tǒng), 以及這些軟件在系統(tǒng)中的 作用、軟件之間的依賴關(guān)系、各種軟件的移植方法。由于很多樹莓派應(yīng)用是由Python 語言開發(fā)的, 本書也 專門介紹樹莓派上硬件接口的Python 控制模塊和其他一些基礎(chǔ)應(yīng)用。全書共分6 章,第1 章介紹Linux 內(nèi)核的 移植及根文件系統(tǒng)的制作;在第1 章的基礎(chǔ)上, 第2 章移植了一些基礎(chǔ)軟件, 增強(qiáng)了樹莓派的聯(lián)網(wǎng)功能;第3 章 介紹Linux 的基礎(chǔ)圖形庫、文本布局軟件、X Window 系統(tǒng), 直至構(gòu)成一個(gè)完整的XFCE4 桌面環(huán)境;第4 章介 紹一些應(yīng)用軟件的移植, 包括遠(yuǎn)程桌面、音視頻編碼與解碼及媒體播放、文檔閱讀, 以及網(wǎng)絡(luò)監(jiān)控軟件;第 5 章 介紹典型的Linux 開發(fā)工具的移植, 移植了編譯器的樹莓派系統(tǒng)初步具備板載開發(fā)能力;鑒于樹莓派被廣泛用于 電子設(shè)計(jì)制作, 第6 章專門討論樹莓派GPIO 接口的功能, 介紹一款典型的GPIO Python 模塊的使用, 并介紹 各種應(yīng)用模塊的工作原理和程序控制方法。 本書能對樹莓派愛好者深入學(xué)習(xí)提供一定的幫助, 對于其他嵌入式開發(fā)人員, 書中介紹的大多數(shù)內(nèi)容也有 同樣的參考意義。此外, 本書也可作為高等學(xué)校電子信息專業(yè)在學(xué)習(xí)嵌入式Linux 操作系統(tǒng)時(shí)的教學(xué)參考書。
樹莓派是廣受電子愛好者關(guān)注的便攜式計(jì)算機(jī)系統(tǒng),Linux操作系統(tǒng)是適配樹莓派的主要操作系統(tǒng)。本書系統(tǒng)介紹將Linux操作系統(tǒng)移植到樹莓派的方法與實(shí)現(xiàn),幫助讀者了解操作系統(tǒng)的組成和運(yùn)行方式,理解操作系統(tǒng)基本軟件的作用和它們之間的關(guān)系,掌握樹莓派控制接口的使用方法。全書內(nèi)容涵蓋如下主題:
內(nèi)核與根文件系統(tǒng);
軟件移植方法、基礎(chǔ)軟件包和網(wǎng)絡(luò)工具;
輕量級(jí)Linux桌面環(huán)境XFCE4;
若干Linux應(yīng)用軟件移植;
構(gòu)建板載開發(fā)環(huán)境、移植Python;
樹莓派I/O接口控制。
樹莓派是在電子愛好者中廣受歡迎的一款單板式計(jì)算機(jī)。自其問世以來 ,全世界眾多的開發(fā)者和愛好者在這個(gè)系統(tǒng)上開發(fā)了大量有趣的應(yīng)用。大多數(shù)應(yīng)用都是基于 Linux操作系統(tǒng) ,樹莓派官方網(wǎng)站也提供了幾種典型的操作系統(tǒng)映像。用戶只要下載后 ,復(fù)制到存儲(chǔ)卡上,操作系統(tǒng)就能運(yùn)行起來。
多數(shù)人只是在使用這個(gè)成熟的操作系統(tǒng)。本書則是介紹如何從零開始 ,從源代碼構(gòu)造一個(gè)可用的 Linux操作系統(tǒng),并在這個(gè)系統(tǒng)上實(shí)現(xiàn)一些簡單的應(yīng)用。通過學(xué)習(xí)這一過程 ,計(jì)算機(jī)愛好者可以根據(jù)自己的需要移植相關(guān)的軟件 ,并自如地調(diào)度系統(tǒng)的軟、硬件資源 ,甚至打造自己的 Linux發(fā)行版。
Linux是遵循自由版權(quán)協(xié)議的操作系統(tǒng),本書移植的絕大部分軟件都是自由軟件?梢悦赓M(fèi)獲得 ,其中多數(shù)還允許用戶對其修改和再發(fā)布 ,但用戶仍然需要遵守它們的版權(quán)協(xié)議。本書移植的軟件所涉及的版權(quán)協(xié)議主要有以下幾種。
. GNU通用公共版權(quán)協(xié)議 (General Public License, GPL),出自自由軟件基金會(huì)。這是 Linux軟件使用多的一種版權(quán)協(xié)議 , Linux內(nèi)核、 GCC、BusyBox等屬此類 ;該版權(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é)議。通常它們以共享庫的方式被調(diào)用 ,以明確版權(quán)協(xié)議之間的界線。但 LGPL軟件本身修改后的再發(fā)布仍需要遵守 LGPL規(guī)范。GTK、FFMpeg等軟件以 LGPL發(fā)布。
. BSD及類 BSD版權(quán)協(xié)議 ,源自加州大學(xué)伯克利分校。該版權(quán)協(xié)議要求被授權(quán)者保留原著作權(quán)聲明,但并不要求其衍生產(chǎn)品必須開源,例如 Tcl/Tk。
. MIT及類 MIT版權(quán)協(xié)議,源自麻省理工學(xué)院,又稱作 X版權(quán)協(xié)議或 X11版權(quán)協(xié)議 , X11系統(tǒng)的軟件均以此協(xié)議發(fā)布。它要求被授權(quán)者保留著作權(quán)和版權(quán)聲明 ,對軟件的使用和再發(fā)布相對寬松。它也是自由軟件基金會(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ā)布的軟件也開源。
. 其他開源軟件版權(quán)協(xié)議,例如 zlib-libpng版權(quán)協(xié)議等。這些開源版權(quán)協(xié)議的共同特點(diǎn)是允許免費(fèi)獲得、修改、移植 ,而且不限制商業(yè)使用。但在使用和再發(fā)布時(shí)必須保持原版權(quán)聲明,明確原作者的貢獻(xiàn)。
相比軟件開發(fā) ,移植軟件的技術(shù)含量并沒有那么高 ,大量工作都是重復(fù)性的機(jī)械勞動(dòng)。因此也有不少軟件工程師將編譯整個(gè)操作系統(tǒng)的工作寫成一組腳本程序 ,一個(gè)典型的案例就是 Buildroot。開發(fā)人員通過圖形配置界面 ,選擇自己需要的功能 ,輸入幾條命令 ,剩下的就是等待。軟件下載、編譯、安裝完全自動(dòng)化實(shí)現(xiàn)。這個(gè)過程中 ,開發(fā)人員不需要了解軟件的依賴關(guān)系,也不需要關(guān)心編譯過程,甚至都不需要自己手工安裝編譯器。單純從構(gòu)建系統(tǒng)的目標(biāo)來看,這種方法不失為一種方便的選擇,但對理解操作系統(tǒng)的構(gòu)成幫助不大。
本書基于樹莓派平臺(tái) ,介紹從內(nèi)核到桌面應(yīng)用的整套系統(tǒng)的移植過程。在討論軟件移植方法的同時(shí) ,還介紹這些軟件的作用及它們之間的關(guān)系。作為一個(gè)完整的操作系統(tǒng) ,這些軟件遠(yuǎn)遠(yuǎn)不夠 ,但已經(jīng)足夠勝任樹莓派的大部分應(yīng)用場合。掌握這些軟件的移植方法 ,再移植其他軟件也只是時(shí)間問題。
本書面向具有一定 Linux系統(tǒng)使用基礎(chǔ)的樹莓派愛好者。計(jì)算機(jī)技術(shù)的發(fā)展日新月異 ,軟件的更新?lián)Q代更是頻繁。本書在移植過程中使用的軟件 ,隨著時(shí)間的推移會(huì)漸漸顯得過時(shí)。然而 ,得益于人工智能、邊緣計(jì)算、嵌入式應(yīng)用的發(fā)展 , Linux操作系統(tǒng)正處于發(fā)展上升期,開源軟件社區(qū)不斷壯大。在可見的將來 ,軟件移植的方法會(huì)越來越規(guī)范、越來越簡單。如果有意愿自己定制 Linux操作系統(tǒng),本書可提供一定的參考。
限于筆者的知識(shí)水平和認(rèn)知能力 ,書中難免存在疏漏之處 ,懇請同行專家及讀者批評指正。
編者
2022年春于南京
方元 南京大學(xué)物理學(xué)博士、副教授。現(xiàn)就職于南京大學(xué)電子科學(xué)與工程學(xué)院,長期從事信號(hào)處理、計(jì)算機(jī)組成原理及操作系統(tǒng)領(lǐng)域的課程教學(xué)工作,主要研究領(lǐng)域涉及音頻信號(hào)處理、計(jì)算機(jī)通信和嵌入式系統(tǒng)應(yīng)用。
沈克勤 畢業(yè)于國防科技大學(xué)系統(tǒng)工程專業(yè),于解放軍理工大學(xué)工作多年,從事計(jì)算機(jī)應(yīng)用領(lǐng)域的教學(xué)和研究工作。退役后在南京理工大學(xué)紫金學(xué)院從事物聯(lián)網(wǎng)應(yīng)用的教學(xué)和競賽指導(dǎo)工作。
第1章 內(nèi)核與根文件系統(tǒng) .1
1.1樹莓派簡介 1
1.1.1 核心處理器 . 3
1.1.2 樹莓派操作系統(tǒng) 4
1.1.3 樹莓派接口 . 4
1.2開發(fā)工具 . 4
1.2.1 編譯工具 5
1.2.2 調(diào)試接口 6
1.3樹莓派的外存儲(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 軟件的依賴關(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ǎ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ǔ)圖形庫.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 圖形工具庫
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ì)話管理器 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章板載開發(fā)環(huán)境 162
5.1編譯器 .162
5.2版本控制系統(tǒng) GIT165
5.3 Python簡介.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ù)庫軟件 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章樹莓派接口控制. 177
6.1 樹莓派設(shè)備擴(kuò)展 177
GPIO177
6.1.1 PWM179
6.1.2
6.1.3擴(kuò)展接口資源配置 180
6.2樹莓派 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超聲波測距 203
6.6.8控制 SPI設(shè)備 204
6.6.9 I2C應(yīng)用207
6.7本章小結(jié)212
參考文獻(xiàn) . 214
擴(kuò)展資源 . 216
索引 217