這是一本帶領讀者快速熟悉、掌握龍芯派開發的專著。
本書基於龍芯派二代開發板,首先由淺入深地介紹了龍芯派二代的架構、龍芯派的啟動和開發配置、Linux 基本操作與常用工具等內容,帶領讀者快速上手龍芯派;然後通過Qt 程式設計、智慧家居、無人機編隊系統、數位採集系統、個人路由器、網路加速、圖像識別、語音關鍵字檢索等多個專案,手把手地帶領讀者掌握龍芯派開發的方法,並提供了專案代碼供讀者一步步學習。
目錄
第01章 初識龍芯派
1.1 主機板簡介 002
1.2 背景知識 003
1.2.1 LoongISA、ARM 和X86 003
1.2.2 龍芯處理器的起源和發展 003
第02章 啟動龍芯派
2.1 第一次上電啟動 006
2.1.1 上電檢查與開機 006
2.1.2 串口通信獲知主機板狀態 006
2.2 連接顯示器 012
2.2.1 關於顯示器的基礎知識 012
2.2.2 連接顯示器 013
2.2.3 修改顯示模式 013
2.3 連接網路 015
2.3.1 連接有線網路 015
2.3.2 連接無線網路 017
2.3.3 修改網路參數 018
2.3.4 網路應用: SSH 遠程式控制制 019
2.3.5 網路應用: Samba 檔共用 020
2.4 安裝系統 021
2.4.1 平臺基礎知識 021
2.4.2 安裝Loongnix 022
2.4.3 安裝Debian 025
第03章 使用龍芯派
3.1 基本操作 028
3.1.1 龍芯支援的Linux 發行版本 028
3.1.2 Linux 系統目錄樹 028
3.1.3 用戶許可權 030
3.1.4 Linux 基礎命令 031
3.1.5 Linux 進階命令 041
3.2 常用工具 058
3.2.1 套裝軟體管理 058
3.2.2 編輯器 071
3.2.3 編譯器 072
3.2.4 調試器 075
3.2.5 git 079
3.2.6 Docker 081
第04章 龍芯派的軟體發展
4.1 嵌入式開發 085
4.1.1 本地編譯和交叉編譯 086
4.1.2 龍芯工具鏈 087
4.1.3 搭建Linux 編譯環境 088
4.1.4 第一個Linux 程式 102
4.2 系統程式設計 103
4.2.1 搭建系統編譯環境 103
4.2.2 PMON 104
4.2.3 更新PMON 106
4.2.4 編譯內核 107
4.2.5 更換編譯好的內核 112
4.2.6 系統模組和驅動 113
4.2.7 GPIO 管腳複用配置 115
4.3 感知世界 118
4.3.1 嵌入式系統外設 119
4.3.2 GPIO – LED 版摩爾斯電碼 119
4.3.3 PWM – LED 閃光燈 124
第05章 基於Qt 開發拼圖遊戲的設計與實現
5.1 應用需求設計 132
5.1.1 應用功能 132
5.1.2 應用介面預覽 133
5.2 配置交叉編譯環境 136
5.2.1 開發環境要求 136
5.2.2 交叉編譯的流程 136
5.2.3 下載安裝交叉編譯工具鏈 136
5.2.4 下載Qt 源碼 137
5.2.5 選擇需要的選項參數 138
5.2.6 編譯Qt 源碼 139
5.2.7 下載Qt Creator 4.8 140
5.2.8 在Qt Creator 中配置交叉編譯環境 141
5.3 使用Qt Creator 143
5.4 主體代碼前的準備 146
5.4.1 標頭檔配置 146
5.4.2 函數和主要變數聲明 147
5.5 構造遊戲介面 148
5.5.1 介面初始化 148
5.5.2 創建計時器,構建計時、計分、
計步聯繫 149
5.5.3 繪製圖片分割線 149
5.5.4 添加功能按鈕 150
5.5.5 放置圖片 152
5.6 圖片切割,打亂圖片 153
5.6.1 使用cutImage() 分割圖片 153
5.6.2 挖空圖片塊 153
5.6.3 使用Random() 函數打亂圖片塊 153
5.6.4 圖片移動 155
5.7 滑鼠事件 156
5.7.1 判斷拼圖狀態,關聯計步 156
5.7.2 為滑鼠操作添加限定條件 157
5.8 計時得分 158
5.8.1 判斷完成狀態 158
5.8.2 彈出分數對話方塊 159
5.9 將應用拷貝到龍芯派上 160
5.10 實戰演練 161
5.10.1 嘗試解決一個bug 161
5.10.2 為拼圖遊戲添加鍵盤控制 162
5.11 項目總結 165
第06章 使用感測器搭建智慧家居原型
6.1 項目概覽 167
6.2 主要技術要點 168
6.3 系統架構 168
6.3.1 實體層 168
6.3.2 網路層 169
6.3.3 應用層 170
6.4 雲- 端通信部分搭建 171
6.4.1 環境準備 171
6.4.2 阿裡雲Python 開發環境搭建 171
6.4.3 構建Python 虛擬環境 171
6.4.4 安裝阿裡雲Python 依賴的庫 172
6.4.5 安裝Python 的串口庫pyserial 174
6.4.6 註冊阿裡雲平臺 175
6.4.7 編寫通信程式 175
6.5 項目總結 178
第07章 基於室內定位技術的無人機編隊系統
7.1 應用概覽 180
7.2 主要技術要點 181
7.3 系統架構 181
7.3.1 飛行器定位導航流程 182
7.3.2 飛行器系統 182
7.3.3 室內定位系統 183
7.3.4 龍芯派編隊導航系統 184
7.4 搭建龍芯派編隊導航系統 185
7.4.1 環境準備 185
7.4.2 實現系統連接 185
7.4.3 飛行軌跡腳本 187
7.5 實戰演練 190
7.6 附錄:單架無人機飛行腳本參考代碼 190
7.7 項目總結 194
第08章 基於libmodbus 開發數位採集系統
8.1 開發流程概述 198
8.2 基於龍芯派的交叉編譯環境搭建 198
8.2.1 交叉編譯libmodbus 開發庫 199
8.2.2 下載安裝交叉編譯工具鏈 199
8.2.3 下載libmodbus 源碼 200
8.2.4 指定交叉編譯工具鏈 200
8.2.5 編譯libmodbus 源碼 200
8.2.6 配置Code::Blocks 201
8.3 主體代碼前的準備 203
8.3.1 設定檔格式 203
8.3.2 資料表結構設計 204
8.4 主體函數實現 204
8.5 資料獲取模組 206
8.6 資料處理模組 208
8.6.1 libmodbus 實現的資料收發流程 208
8.6.2 資料處理模組的代碼實現 211
8.7 報警模組 213
8.7.1 短信報警 213
8.7.2 郵件報警 214
8.8 資料入庫 215
8.8.1 SQLite 3 介紹 215
8.8.2 結果入庫 216
8.9 編譯應用程式並移植到龍芯派上 216
8.10 項目總結 217
第09章 使用OpenWrt 搭建個人路由器
9.1 需求設計 219
9.1.1 系統需求 219
9.1.2 應用需求 220
9.2 系統選型 220
9.2.1 資源考察 220
9.2.2 OpenWrt 簡介 221
9.2.3 如何提問和參與 222
9.3 添加硬體平臺 223
9.3.1 熟悉源碼 223
9.3.2 流程梳理 225
9.3.3 開始移植 225
9.4 深入開發環境 228
9.4.1 使用Linux 作業系統 228
9.4.2 開啟旅程 229
9.5 應用開發入門 234
9.5.1 系統軟體 234
9.5.2 網頁應用 235
9.6 項目總結 235
第10章 使用 DPDK 進行網路加速
10.1 初識DPDK 237
10.1.1 為什麼要用DPDK 237
10.1.2 DPDK 能做什麼 238
10.1.3 DPDK 的框架簡介 239
10.2 再觀DPDK 239
10.2.1 體系架構相關 239
10.2.2 DPDK EAL 初始化過程 241
10.3 DPPK EAL 中的重要函數 246
10.3.1 rte_eal_cpu_init(void) 246
10.3.2 eal_hugepage_info_init() 248
10.3.3 rte_eal_pci_init() 251
10.3.4 rte_eal_memory_init() 257
10.3.5 rte_eal_memzone_init() 268
10.3.6 rte_eal_pci_probe() 271
10.4 DPDK 的運行 274
10.4.1 在龍芯派上運行DPDK 的常式l2fwd 274
10.4.2 DPDK 的應用實例:l2fwd程式解析 276
10.5 項目總結 281
第11章 使用 DPDK 進行網路加速 使用 OpenCV+Qt 實現圖像識別
11.1 準備工作 283
11.2 Buildroot 構建檔案系統 284
11.2.1 下載Buildroot 284
11.2.2 Buildroot 目錄結構 285
11.2.3 配置Buildroot 286
11.3 內核編譯並添加到啟動項 290
11.3.1 內核編譯 290
11.3.2 添加龍芯啟動項 291
11.4 搭建Qt+OpenCV 開發環境 293
11.5 OpenCV 基礎 296
11.5.1 Mat 基本圖像容器 297
11.5.2 圖元的表示 297
11.5.3 Haar 特徵 297
11.6 編寫第一個OpenCV 程式 297
11.6.1 代碼編寫 298
11.6.2 介面設計 301
11.6.3 程式測試 303
11.6.4 代碼優化 304
11.7 從攝像頭採集影像處理 308
11.7.1 準備工作 309
11.7.2 編寫採集代碼 310
11.8 實戰演練 314
11.8.1 採集人臉資訊 314
11.8.2 訓練採集到的人臉資訊 318
11.8.3 編寫人臉匹配程式 323
11.9 項目總結 328
第12章 語音關鍵字檢索
12.1 應用需求設計 330
12.2 配置交叉編譯環境 330
12.2.1 開發環境要求 331
12.2.2 下載安裝交叉編譯工具 331
12.3 系統代碼設計 332
12.3.1 系統函式定義 332
12.3.2 提取語音特徵 333
12.3.3 註冊語音作為範本 338
12.3.4 對待測語音進行檢測 339
12.4 將應用拷貝到龍芯派上 345
12.5 實戰演練 345
12.6 項目總結 346
作者介紹
胡偉武:龍芯中科技術有限公司董事長。
杜安利:龍芯中科技術有限公司副總裁。長期從事國產嵌入式電腦、國產軟硬體設備的研發和管理工作,在能源、交通、網安通信、工業互聯網等多個領域,提供基於國產龍芯處理器的應用解決方案,奮戰在我國電子資訊化、工業控制設備國產化、安全應用的第一線。
喬崇:龍芯中科技術有限公司嵌入式事業部技術總監,參與龍芯系列晶片的研發工作,目前在龍芯負責嵌入軟體bios、內核、嵌入式作業系統、模擬器、模擬器的研發工作。
葉騏寧:龍芯中科技術有限公司嵌入式事業部工程師。