本書介紹Linux 內核的編譯和移植、根文件系統(tǒng)的制作、基礎系統(tǒng)、桌面系統(tǒng), 以及這些軟件在系統(tǒng)中的 作用、軟件之間的依賴關系、各種軟件的移植方法。由于很多樹莓派應用是由Python 語言開發(fā)的, 本書也 專門介紹樹莓派上硬件接口的Python 控制模塊和其他一些基礎應用。全書共分6 章,第1 章介紹Linux 內核的 移植及根文件系統(tǒng)的制作;在第1 章的基礎上, 第2 章移植了一些基礎軟件, 增強了樹莓派的聯(lián)網功能;第3 章 介紹Linux 的基礎圖形庫、文本布局軟件、X Window 系統(tǒng), 直至構成一個完整的XFCE4 桌面環(huán)境;第4 章介 紹一些應用軟件的移植, 包括遠程桌面、音視頻編碼與解碼及媒體播放、文檔閱讀, 以及網絡監(jiān)控軟件;第 5 章 介紹典型的Linux 開發(fā)工具的移植, 移植了編譯器的樹莓派系統(tǒng)初步具備板載開發(fā)能力;鑒于樹莓派被廣泛用于 電子設計制作, 第6 章專門討論樹莓派GPIO 接口的功能, 介紹一款典型的GPIO Python 模塊的使用, 并介紹 各種應用模塊的工作原理和程序控制方法。 本書能對樹莓派愛好者深入學習提供一定的幫助, 對于其他嵌入式開發(fā)人員, 書中介紹的大多數(shù)內容也有 同樣的參考意義。此外, 本書也可作為高等學校電子信息專業(yè)在學習嵌入式Linux 操作系統(tǒng)時的教學參考書。
樹莓派是在電子愛好者中廣受歡迎的一款單板式計算機。自其問世以來 ,全世界眾多的開發(fā)者和愛好者在這個系統(tǒng)上開發(fā)了大量有趣的應用。大多數(shù)應用都是基于 Linux操作系統(tǒng) ,樹莓派官方網站也提供了幾種典型的操作系統(tǒng)映像。用戶只要下載后 ,復制到存儲卡上,操作系統(tǒng)就能運行起來。
多數(shù)人只是在使用這個成熟的操作系統(tǒng)。本書則是介紹如何從零開始 ,從源代碼構造一個可用的 Linux操作系統(tǒng),并在這個系統(tǒng)上實現(xiàn)一些簡單的應用。通過學習這一過程 ,計算機愛好者可以根據(jù)自己的需要移植相關的軟件 ,并自如地調度系統(tǒng)的軟、硬件資源 ,甚至打造自己的 Linux發(fā)行版。
Linux是遵循自由版權協(xié)議的操作系統(tǒng),本書移植的絕大部分軟件都是自由軟件?梢悦赓M獲得 ,其中多數(shù)還允許用戶對其修改和再發(fā)布 ,但用戶仍然需要遵守它們的版權協(xié)議。本書移植的軟件所涉及的版權協(xié)議主要有以下幾種。
. GNU通用公共版權協(xié)議 (General Public License, GPL),出自自由軟件基金會。這是 Linux軟件使用多的一種版權協(xié)議 , Linux內核、 GCC、BusyBox等屬此類 ;該版權協(xié)議要求由 GPL衍生的軟件也必須遵守 GPL規(guī)范。
. GNU寬松通用公共版權協(xié)議 (Lesser General Public License, LGPL),同樣出自自由軟件基金會。以這種版權協(xié)議發(fā)布的軟件允許其他版權協(xié)議 (即使是私有版權 )的軟件使用 ,而不會影響其他版權協(xié)議。通常它們以共享庫的方式被調用 ,以明確版權協(xié)議之間的界線。但 LGPL軟件本身修改后的再發(fā)布仍需要遵守 LGPL規(guī)范。GTK、FFMpeg等軟件以 LGPL發(fā)布。
. BSD及類 BSD版權協(xié)議 ,源自加州大學伯克利分校。該版權協(xié)議要求被授權者保留原著作權聲明,但并不要求其衍生產品必須開源,例如 Tcl/Tk。
. MIT及類 MIT版權協(xié)議,源自麻省理工學院,又稱作 X版權協(xié)議或 X11版權協(xié)議 , X11系統(tǒng)的軟件均以此協(xié)議發(fā)布。它要求被授權者保留著作權和版權聲明 ,對軟件的使用和再發(fā)布相對寬松。它也是自由軟件基金會所認可的自由軟件許可協(xié)議條款,與 GPL兼容。
. Python軟件基金會版權協(xié)議 (Python Software Foundation License, PSFL),出自 Python軟件基金會 ,要求被授權者在使用 Python及衍生產品時須保持原有的版權協(xié)議,它與 GPL兼容,但并不要求再發(fā)布的軟件也開源。
. 其他開源軟件版權協(xié)議,例如 zlib-libpng版權協(xié)議等。這些開源版權協(xié)議的共同特點是允許免費獲得、修改、移植 ,而且不限制商業(yè)使用。但在使用和再發(fā)布時必須保持原版權聲明,明確原作者的貢獻。
相比軟件開發(fā) ,移植軟件的技術含量并沒有那么高 ,大量工作都是重復性的機械勞動。因此也有不少軟件工程師將編譯整個操作系統(tǒng)的工作寫成一組腳本程序 ,一個典型的案例就是 Buildroot。開發(fā)人員通過圖形配置界面 ,選擇自己需要的功能 ,輸入幾條命令 ,剩下的就是等待。軟件下載、編譯、安裝完全自動化實現(xiàn)。這個過程中 ,開發(fā)人員不需要了解軟件的依賴關系,也不需要關心編譯過程,甚至都不需要自己手工安裝編譯器。單純從構建系統(tǒng)的目標來看,這種方法不失為一種方便的選擇,但對理解操作系統(tǒng)的構成幫助不大。
本書基于樹莓派平臺 ,介紹從內核到桌面應用的整套系統(tǒng)的移植過程。在討論軟件移植方法的同時 ,還介紹這些軟件的作用及它們之間的關系。作為一個完整的操作系統(tǒng) ,這些軟件遠遠不夠 ,但已經足夠勝任樹莓派的大部分應用場合。掌握這些軟件的移植方法 ,再移植其他軟件也只是時間問題。
本書面向具有一定 Linux系統(tǒng)使用基礎的樹莓派愛好者。計算機技術的發(fā)展日新月異 ,軟件的更新?lián)Q代更是頻繁。本書在移植過程中使用的軟件 ,隨著時間的推移會漸漸顯得過時。然而 ,得益于人工智能、邊緣計算、嵌入式應用的發(fā)展 , Linux操作系統(tǒng)正處于發(fā)展上升期,開源軟件社區(qū)不斷壯大。在可見的將來 ,軟件移植的方法會越來越規(guī)范、越來越簡單。如果有意愿自己定制 Linux操作系統(tǒng),本書可提供一定的參考。
限于筆者的知識水平和認知能力 ,書中難免存在疏漏之處 ,懇請同行專家及讀者批評指正。
編者
2022年春于南京
第1章 內核與根文件系統(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 調試接口 6
1.3樹莓派的外存儲器 8
1.3.1 SD卡分區(qū) 8
Bootloader 9
1.3.2
1.4 Linux內核 .10
1.4.1 獲取內核源碼.11
1.4.2 配置和編譯內核 .11
1.5根文件系統(tǒng).15
1.5.1 編譯 BusyBox15
1.5.2 初始化 RAMDisk .18
1.5.3 構造 Ext4分區(qū) 27
1.5.4 配置文件 .31
1.5.5 網絡文件系統(tǒng).40
1.6本章小結 40
第2章基礎系統(tǒng). 42
2.1軟件編譯 42
2.1.1 軟件的依賴關系 .42
2.1.2 基礎系統(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 時區(qū)數(shù)據(jù).66
2.4.3 文件系統(tǒng)工具.67
bash67
2.4.5 systemd.68
2.5網絡工具 71
2.5.1 編譯網絡工具.71
2.5.2 遠程連接 .78
2.5.3 無線網絡連接.78
2.5.4 安裝 dropbear81
2.6本章小結 84
2.4.4 第3章桌面系統(tǒng). 86
3.1 X Window系統(tǒng)86
3.2基礎圖形庫.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及其應用程序 128
3.5 XFCE4桌面環(huán)境 131
3.5.1 窗口管理器 xfwm4 .132
3.5.2 會話管理器 xfce4-session.133
3.5.3 桌面設置管理器 xfce4-settings.133
3.5.4 桌面管理器 xfdesktop.134
3.5.5 文件管理器 Thunar 135
3.5.6 終端仿真器 136
3.6 X服務 .136
3.6.1 編譯
xorg-server.138
3.6.2 X系統(tǒng)其他支持 .139
3.6.3 啟動 XFCE4 139
3.7本章小結 141
3.4.4 第4章 Linux應用軟件 142
4.1遠程桌面 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網絡視頻監(jiān)控 .158
4.5本章小結 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的應用 .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運行 Python程序 174
5.5.3交互方式 .175
5.6本章小結 176
第6章樹莓派接口控制. 177
6.1 樹莓派設備擴展 177
GPIO177
6.1.1 PWM179
6.1.2
6.1.3擴展接口資源配置 180
6.2樹莓派 GPIO模塊181
6.2.1安裝模塊.181
6.2.2使用 GPIO模塊 182
6.3 GPIO控制輸出設備 .184
6.4 GPIO輸入功能 185
6.4.1基本輸入功能.185
6.4.2 GPIO高級輸入功能 .186
6.5 PWM模塊.188
6.6傳感器和控制器 190
6.6.1蜂鳴器.190
6.6.2傳感器.191
6.6.3紅外遙控器 191
6.6.4直流電動機 196
6.6.5伺服電動機 197
6.6.6步進電動機 198
6.6.7超聲波測距 203
6.6.8控制 SPI設備 204
6.6.9 I2C應用207
6.7本章小結212
參考文獻 . 214
擴展資源 . 216
索引 217