嵌入式 Linux 系統設計及應用 — 基於國產龍芯 SoC
內容描述
龍芯系列微處理器是中國擁有自主知識產權的中央處理器,中國科學院計算技術研究所從2001 年開始研製龍芯系列處理器,於2010 年正式成立龍芯中科技術有限公司(以下簡稱龍芯中科),主要產品包括龍芯1 號CPU、龍芯2 號CPU 及龍芯3 號CPU。本書是基於龍芯俱樂部與龍芯中科合作開發的南京龍眾創芯電子科技有限公司承製的智龍開發板,圍繞龍芯1 號芯片LS1C 進行嵌入式系統開發講解,也包含龍芯中科的2K 龍芯派、南京龍眾創芯電子科技有限公司 的龍芯3A3000 開發者電腦的內容。 本書內容共分3 篇。基礎篇包含實驗平臺和開發環境的搭建。中級篇為Linux 基礎應用編程,包含線程、信號、網絡等基本操作。高級篇包含開發板硬件編程、驅動程序編寫等高級操作。附錄主要為嵌入式系統開發常用資料和智龍開發板的電路原理圖。本書結合實踐案例及應用場景,按照嵌入式系統的開發流程組織內容,使讀者能熟練掌握從開發環境搭建到編寫完整工程的流程。同時提供內核源碼及實例代碼,並給出測試結果,方便讀者參考。 本書具有廣泛的適用性,不僅可用於MIPS 架構的龍芯1 號芯片的嵌入式系統開發,還可用於基於Linux 操作系統的嵌入式系統學習。其中在內核原理、應用程序編寫,如虛擬機編譯、程序下載、調試、應用開發、內核裁減等方面與同類ARM 架構芯片相比,開發過程是通用的。本書可作為應用型本科、高職高專院校嵌入式系統方面的課程教材,也可作為相關開發人員的自學教材和參考手冊。
目錄大綱
1 章實驗平台及背景知識 2
11 本書使用的開發板及作系統 2
111 龍芯系列芯片 3
112 龍芯1 號微處理器 4
113 智龍開發板資源 5
114 智龍開發板使用的作系統 5
115 龍芯派一代開發板資源 8
116 龍芯派一代與智龍開發板的差異 10
117 龍芯派一代開發板作與啟動盤製作 11
118 龍芯派二代開發板作 20
12 全龍芯的交編譯平台 24
121 在龍芯3A3000 主機Loongni 系統中搭建龍芯1C 開發環境 24
122 中標麒麟作系統 27
123 深度作系統 28
124 普華作系統 29
13 安裝Ubuntu/Fedora 及其他程序 31
14 虛擬機常用目錄 31
15 Windows 下需要安裝的其他軟件 32
16 一點常識 34
17 本書使用的網絡資源 35
2 章虛擬機安裝Linu 作系統 37
21 下載VMware Player 並安裝 37
22 下載Ubuntu 桌面系統 37
23 安裝Ubuntu 37
24 進入終端的方法 39
25 建立root 用戶並自動登錄 39
26 安裝VMware Tools 40
27 安裝必要的軟件 42
28 查看相關版本和信息 43
29 虛擬機Linu 系統中TFTP 服務搭建44
3 章安裝工具鏈、編譯內核、製作文件系統 47
31 安裝交編譯工具gcc-43-ls232 47
32 編譯和燒寫PMON 48
33 編譯和燒寫內核 49
34 製作根文件系統 51
341 配置和編譯BusyBo 51
342 創建文件系統目錄 53
343 創建系統配置文件 53
344 複製庫文件 56
35 製作根文件系統鏡像 58
351 安裝鏡像文件製作工具 58
352 製作根文件系統鏡像文件 60
353 燒寫根文件系統 61
4 章使用buildroot 構建根文件系統 62
41 獲取buildroot 62
42 系統構建 62
43 燒寫根文件系統鏡像 63
44 根文件系統軟件包的定制 63
45 buildroot 構建交編譯工具鏈 67
5 章簡單應用編程Hello World 69
51 智龍開發板上運行程序 69
52 友善之臂開發板mini2440 上運行程序 70
53 ARM 架構應用程序的移植 71
6 章簡單驅動程序編寫 74
61 驅動的原理及編寫流程 74
62 驅動模塊的加載與卸載 75
63 簡單的Linu 驅動 75
64 驅動的編譯和執行 76
65 內核配置驅動 80
66 LED 子系統剖析 82
67 led_trigger 接口分析 89
中級篇應用
7 章Linu 應用編程 93
71 Linu 應用編程的基礎知識 93
72 文件I/O 編程 93
73 進程和線程 96
74 多進程作 97
75 進程間的通信 99
751 管道 99
752 消息隊列105
753 共享內存107
76 多線程作 109
761 線程控制109
762 線程屬性111
763 互斥鎖113
764 信號量117
77 網絡編程 119
771 網絡編程基礎概念119
772 網絡編程實例122
773 網絡編程小結132
78 OpenVPN 使用 132
781 OpenVPN 簡介132
782 OpenVPN 在智龍上的移植133
783 生成證書和私鑰133
784 服務器端啟動VPN 服務135
785 客戶端連接VPN 服務器136
786 在虛擬機中測試連接137
787 在普華桌面作系統中測試連接 138
79 應用編程總結 140
8 章開發板硬件接口編程 141
81 點亮一個LED 燈 141
811 LED 的作接口 141
812 LED 控制 142
813 在程序中作LED 燈 142
82 GPIO 硬件編程 143
821 GPIO 和sysfs 作接口 144
822 GPIO 基本作 145
823 在C 程序中作GPIO 146
83 按鍵應用層編程 148
831 按鍵作接口 148
832 在程序中作按鍵 151
84 U 盤和SD 卡 152
841 U 盤 152
842 SD 卡 153
85 RTC 時鐘 154
86 串口讀寫 155
861 串口硬件說明 155
862 用minicom 作串口 156
863 用接口作串口 157
864 在程序中作串口 158
高級篇驅動
9 章NFS 文件系統搭建 163
91 在虛擬機端安裝NFS 163
92 配置虛擬機NFS 164
93 配置開發板NFS 165
94 使用NFS 166
941 在開發板上掛載NFS 服務 166
942 建立網絡文件系統166
10 章配置Eclipse 編程 168
101 用Eclipse 開發應用程序 168
102 用Eclipse 開發內核模塊 170
11 章一個簡單的字符設備驅動 175
111 主設備號和次設備號 175
1111 設備編號的表達176
1112 分配和釋放設備編號176
112 重要的數據結構 178
113 字符設備的註冊 181
114 具體實例 182
1141 file_operations 結構體設計185
1142 模塊初始化、模塊卸載函數實現186
1143 讀寫函數的實現187
1144 驅動程序編譯187
1145 驅動程序編譯和加載188
1146 驅動程序測試188
115 一些有用的資料 189
116 修改為模塊註銷自動刪除設備節點 190
12 章misc 雜項設備驅動 191
121 misc 使用的結構體和函數 191
122 misc 設備的優點 193
123 內核源碼 193
124 具體實例 195
13 章PWM控制輸出 199
131 利用LED_PWM 199
132 自己編寫驅動文件 205
14 章I2C 總線和設備驅動 214
141 I2C 總線概述 214
142 Linu I2C 設備驅動 214
1421 I2C adapter 215
1422 I2C 子系統驅動模塊的API 220
1423 I2C client 的註冊220
1424 I2C driver 224
1425 I2C adapter 的註冊225
1426 I2C tools 的使用228
1427 內核模塊分析 231
143 實例分析at24c 232
144 實例分析DS3231 234
15 章SPI 總線和設備驅動 236
151 SPI 總線概述 236
1511 硬件結構 236
1512 工作時序 237
152 Linu SPI 設備驅動軟件架構 238
153 SPI 通用接口層 238
1531 SPI 總線和類 238
1532 spi_master 結構 239
1533 spi_device 結構 240
1534 spi_driver 結構 241
1535 spi_message 和spi_transfer 結構 242
154 SPI 控制器驅動 244
1541 定義控制器設備 244
1542 註冊SPI 控制器的platform_driver 246
1543 註冊spi_master 246
155 SPI 數據傳輸 249
156 實例分析:驅動編寫之SPI設備靜態註冊spidevc 250
157 實例分析:驅動編寫之SPI設備動態註冊spikec 253
158 編寫測試程序 260
16 章CAN 總線和設備驅動 266
161 智龍開發板硬件CAN 接口 266
162 Socket CAN 268
163 測試工具 269
164 Socket CAN 在智龍上的測試:使用工具iproute2 269
165 Socket CAN 在智龍上的測試:使用工具canutils 273
166 編寫CAN 的socket 收發測試程序canapp 277
1661 程序設計說明 277
1662 程序發送示例 280
1663 程序接收示例 281
1664 發送和接收測試282
17 章嵌入式GUI 編程 284
171 使用外部LCD 控制器的LCD 編程 284
1711 硬件接口284
1712 GPIO 口作函數284
1713 LCD 作293
1714 編寫Makefile 294
1715 代碼及運行結果295
172 基於Qt 使用內部LCD 控制器的GUI 編程 302
1721 關於Qt 302
1722 Qt 的移植過程303
1723 配置buildroot 304
1724 下載並運行例程306
1725 搭建Qt 環境及編寫應用程序308
1726 PMON 及內核源碼的修改313
1727 支持鍵盤輸入和串口、LCD 同時輸出314
18 章ADC 驅動及應用 315
181 配置ADC 驅動 315
182 硬件管腳分配 316
183 應用測試 316
184 應用層編程 316
19 章內核訪問外設I/O 資源 319
191 MIPS 的內存映 319
192 動態映方式 320
193 靜態映方式 326
194 mmap 內存映 328
1941 mmap 系統調用328
1942 系統調用mmap 用於共享內存的兩種方式329
1943 mmap 進行內存映的原理329
1944 內存映的步驟333
195 mmap 編程示例 333
20 章PMON 源碼編譯、燒寫、
啟動及裸機編程 335
201 PMON 源碼分析 335
202 PMON 燒寫 336
2021 採用編程器更新PMON 到SPI Flash 336
2022 網絡更新PMON 到SPI Flash 336
2023 網絡更新PMON 到NAND Flash 337
203 NAND Flash 存儲器分區 337
204 內核啟動過程 338
2041 內核從NAND Flash 中加載 338
2042 內核從SD Card 中加載 339
2043 內核從tftp 中加載 340
2044 設置PMON 的IP 地址 340
205 PMON 的內置命令 341
206 PMON 龍芯官方參考 342
207 PMON 裸機編程 342
21 章在Windows 環境下搭建龍芯1C開發環境及龍芯1C 庫 344
211 交編譯工具鏈的下載和安裝 344
212 MinGW 的下載和安裝 345
213 編譯 347
214 調試和運行 348
215 運行點燈程序 349
216 龍芯1C 庫350
22 章智龍開發板應用及其他龍芯開發板 351
221 智龍開發板應用例程 351
2211 WiFi 小車應用 351
2212 北斗導航應用 351
2213 龍印3D 打印機 352
2214 LCD 擴展板 353
2215 其他應用開發例程 353
222 龍芯機器人控制器 354
2221 硬件結構 354
2222 燒錄內核與根文件系統 354
2223 機器人控制器的PWM 輸出作 356
2224 機器人控制器的應用 357
223 智龍開發板在高校和社區中的推廣應用 357
2231 高校應用 357
2232 龍芯CPU 高校開源計劃&
作者介紹
孫冬梅(1975.1-):博士後,副教授,2004年獲南京理工大學測試計量技術及儀器專業博士學位;2011.1~2015.12進入南京工業大學“動力工程及工程熱物理”博士後流動站,從事研究工作。
現任江蘇省儀器儀表學會理事,江蘇省射頻識別技術標準化技術委員會委員。
2012年主持了江蘇省博士後基金“大型風電迴轉支承多源振動信號故障診斷的數據融合方法研究”;2009年主持江蘇省高校自然科學基金項目“基於熱導式微流量智能傳感器的分析儀器開發研究” 。
參與了多項國家自然科學基金開發研究,完成了多項科研項目,有豐富的理論及實踐經驗;近幾年來,在國內外核心期刊上發表學術論文50多篇。