內容簡介
本書是統信UOS套用開發指南,包括5篇,共16章。背景知識篇介紹作業系統簡史以及國產作業系統;套用開發篇是本書的核心,包括開發設計原則、開發環境與開發工具、Qt開發框架、DTK開發框架、DTK外掛程式開發、服務開發、調試與性能最佳化;發布與部署篇介紹包格式、上架部署;桌面套用開發實戰篇介紹6個難度從初級、中級到高級的經典套用案例,以及系統接口案例;常見問題篇介紹核心與驅動、開發工具相關、常用資源,幫助讀者進一步提升開發水平。
本書內容全面,理論與實踐相結合,語言表達清晰、簡潔,有利於讀者參考學習。
本書適合統信UOS的開發人員閱讀,有助於其全面掌握開發內容;也適合有志於參與統信生態構建的信創廠商、套用開發人員閱讀參考。
作者簡介
統信軟體以“打造作業系統創新生態”為使命,由國內領先的作業系統廠家於2019年聯合成立。公司專注於作業系統等基礎軟體的研發與服務,致力於為不同行業的用戶提供穩定、智慧型易用的作業系統產品與解決方案。
圖書目錄
第 1 篇 背景知識
第01章 作業系統簡史
1.1 人工時代 003
1.2 批處理作業系統 003
1.2.1 在線上批處理作業系統 003
1.2.2 脫機批處理作業系統 003
1.3 分時作業系統 004
1.3.1 UNIX 作業系統的誕生 004
1.3.2 可視化作業系統的演進 005
1.3.3 開源 Linux 的誕生與演進 005
第02章 國產作業系統
2.1 國產作業系統的必要性 007
2.2 國產作業系統統信 UOS 007
2.2.1 DDE 009
2.2.2 統信 UOS 生態環境 010
第 2 篇 套用開發
第03章 開發設計原則
3.1 同源異構 013
3.1.1 核心適配 013
3.1.2 ABI 兼容性 013
3.1.3 接口兼容性 014
3.2 兼容性原則 014
3.3 目錄許可權規範 014
3.4 界面設計理念 015
3.4.1 為用戶而設計 015
3.4.2 設計解決的不是視覺問題 015
3.4.3 保持輕量 015
第04章 開發環境與開發工具
4.1 統信 UOS 的安裝 018
4.1.1 物理機單系統安裝 018
4.1.2 物理機多系統安裝 022
4.1.3 VirtualBox 安裝 023
4.1.4 統信 UOS 的基本使用 026
4.1.5 安裝軟體 028
4.2 常見的開發環境配置 029
4.2.1 DTK 開發環境 029
4.2.2 開發第 一個程式:HelloWorld 031
4.3 目錄結構設計 037
4.3.1 項目目錄規範 037
4.3.2 README 檔案 037
4.4 版本控制系統 039
4.4.1 Git 基礎知識 039
4.4.2 安裝 Git 040
4.4.3 配置 Git 041
4.5 Git Flow 開發模型 042
4.5.1 主分支 043
4.5.2 輔助分支 043
4.6 版本號管理 044
4.7 統信 UOS 的開發者模式 044
4.7.1 潛在風險說明 045
4.7.2 開啟方法 045
第05章 Qt 開發框架
5.1 Qt 基礎模組 048
5.1.1 Qt Core 048
5.1.2 Qt GUI 065
5.1.3 Qt Widgets 068
5.1.4 Qt Test 081
5.2 Qt 擴展模組 091
5.2.1 Qt Concurrent 091
5.2.2 Qt BlueTooth 094
5.2.3 Qt D-Bus 097
5.2.4 Qt Image Formats 098
5.3 Qt WebEngine 概述 098
5.3.1 開發 Qt WebEngine Widgets 套用 099
5.3.2 開發與 Qt WebEngine 相關的
Qt Quick 套用 100
5.3.3 命令行參數 100
5.3.4 Qt WebEngine 其他說明 101
5.4 Electron 概述 102
5.4.1 Electron 開發環境 102
5.4.2 第 一個 Electron 程式 103
5.4.3 打包並分發第 一個套用 106
5.4.4 調試方法 106
5.5 常見問題 107
5.5.1 qmake 工程設定模組之間的編譯依賴關係 107
5.5.2 CMake 工程設定模組之間的編譯依賴關係 107
5.5.3 快速使用 QTimer 進行一次計時操作 108
5.5.4 Qt 單元測試傳送事件到控制項中 108
5.5.5 使用事件過濾器 111
5.5.6 信號和槽的連線參數 112
5.5.7 Qt 多執行緒常見使用方法 113
5.5.8 QWidget 坐標系的位置變換 114
5.5.9 Qt 版本區分 116
5.5.10 限制 QLineEdit 內容輸入 117
5.5.11 Qt 通過信號與槽傳遞自定義結構體數據 118
5.5.12 Qt 界面控制項自動關聯信號與槽 119
5.5.13 QString 格式化字元串的使用 119
5.5.14 QDateTime 日期時間類的使用 120
第06章 DTK 開發框架
6.1 DTK 開發簡述 123
6.2 DTK 功能模組介紹 123
6.3 DTK 程式框架創建 124
6.3.1 軟體環境配置和開發包安裝 124
6.3.2 創建 qmake 項目 125
6.3.3 創建 CMake 項目 127
6.4 DTK 圖形控制項使用 128
6.4.1 dtkwidget 的 public 類簡介 128
6.4.2 DMainWindow 簡介 130
6.5 DTK 常用組件 137
6.5.1 布局 137
6.5.2 進度、狀態指示 143
6.5.3 輸入框和編輯框 146
6.5.4 按鈕與選項 150
6.5.5 訊息通知與提示 155
6.6 DTK 中的設定界面框架 159
6.6.1 簡介 160
6.6.2 示例 160
6.6.3 詳解 161
第07章 DTK 高級開發
7.1 外掛程式的工作原理 167
7.2 dde-dock 外掛程式開發 167
7.2.1 dde-dock 外掛程式接口 167
7.2.2 dde-dock 外掛程式開發過程 169
7.3 dde-control-center 外掛程式開發 184
7.3.1 dde-control-center 外掛程式開發的準備工作 184
7.3.2 dde-control-center 外掛程式接口 184
7.3.3 構建 dde-control-center 外掛程式 185
7.3.4 外掛程式載入原理 191
7.4 dfm 外掛程式開發 192
7.4.1 準備工作 193
7.4.2 屬性對話框外掛程式 193
7.4.3 視圖外掛程式 197
7.4.4 麵包屑外掛程式 204
7.4.5 檔案控制器外掛程式 212
7.4.6 檔案預覽外掛程式 219
7.5 PAM 外掛程式 226
7.5.1 PAM 工作流程 226
7.5.2 PAM 配置檔案介紹 227
7.5.3 PAM 主要操作函式 230
7.5.4 PAM 標準接口介紹 231
7.5.5 實現一個 PAM 外掛程式 231
7.6 瀏覽器外掛程式開發 233
7.6.1 NPAPI 外掛程式 233
7.6.2 外掛程式安裝 234
7.6.3 外掛程式識別 234
7.6.4 外掛程式的生命周期 235
7.6.5 NAAPI 的外掛程式開發 236
第08章 服務開發
8.1 systemd 服務開發 242
8.1.1 systemd 系統架構 242
8.1.2 unit 介紹 242
8.1.3 unit 管理 243
8.1.4 unit 服務配置檔案 244
8.1.5 實例 245
8.1.6 systemd 調試 248
8.2 PolicyKit 服務開發 249
8.2.1 PolicyKit 系統架構 249
8.2.2 身份驗證代理 250
8.2.3 聲明操作 250
8.2.4 polkitd 252
8.2.5 pkcheck 252
8.2.6 pkaction 253
第09章 調試與性能最佳化
9.1 GDB 入門 256
9.1.1 何為 GDB 256
9.1.2 GDB 工作原理 256
9.1.3 調用和退出 GDB 256
9.1.4 GDB 基本命令 260
9.1.5 GDB 調試腳本 277
9.1.6 GDB 多執行緒調試 278
9.1.7 GDB 多進程調試 282
9.2 Qt Creator 中的調試和調優 286
9.2.1 代碼調試 286
9.2.2 性能調優 291
9.3 使用 perf 進行性能分析 294
9.3.1 用法 294
9.3.2 事件類型 295
9.3.3 示例 296
9.4 使用 gperftools 進行性能分析 306
9.4.1 編譯安裝 gperftools 306
9.4.2 TCMalloc 307
9.4.3 heap checker 307
9.4.4 heap profile 310
9.4.5 CPU profiler 314
9.5 使用 gprof 進行性能分析 316
9.5.1 編譯 profiling 程式 317
9.5.2 運行 profiling 程式 317
9.5.3 運行 gprof 318
9.5.4 gprof 輸出樣式 318
9.6 使用 Valgrind 與 Sanitizers 進行記憶體分析 321
9.6.1 Valgrind 321
9.6.2 Sanitizers 326
第 3 篇 發布與部署
第 10章 包格式
10.1 Debian 軟體包 335
10.1.1 Debian 軟體包概述 335
10.1.2 統信 UOS 系統安裝 Debian 包 337
10.1.3 構建 deb 軟體包 343
10.1.4 章節小結 358
10.2 RPM 358
10.2.1 RPM 軟體管理命令 358
10.2.2 DNF 包管理器 361
10.2.3 構建 RPM 包 366
10.3 依賴分析與處理 371
10.3.1 軟體包的依賴概述 371
10.3.2 UOS 系統上軟體依賴分析方法及原理 371
10.3.3 UOS 系統使用過程中如何處理依賴 374
10.3.4 UOS 開發過程中常見的依賴問題 379
10.3.5 章節小結 380
第 11章 上架部署
11.1 套用規範 382
11.1.1 目錄結構 382
11.1.2 許可權規範 382
11.2 簽名 382
11.2.1 簽名機制 383
11.2.2 統信 UOS 套用簽名 385
11.2.3 簽名工具的使用 388
11.3 上架 389
11.3.1 套用商店介紹 390
11.3.2 準備工作 391
11.3.3 創建套用 392
11.3.4 上架 393
11.4 區域網路分發 393
11.4.1 私有化套用商店 394
11.4.2 部署流程 394
11.4.3 其他 398
第 4 篇 桌面套用開發實戰
第 12章 經典套用案例
12.1 初級:簡易文本編輯器 403
12.1.1 簡述 403
12.1.2 套用主要功能 403
12.1.3 “關於”界面 404
12.1.4 主業務視圖 408
12.1.5 標題欄 409
12.1.6 文本顯示編輯框及行號欄 414
12.1.7 底部欄 422
12.2 初級:計算器 426
12.2.1 簡述 426
12.2.2 套用主要功能 426
12.2.3 套用入口 427
12.2.4 套用主視窗內容添加 428
12.3 中級:相冊 437
12.3.1 簡述 437
12.3.2 圖片載入 437
12.3.3 縮略圖展示 438
12.3.4 大圖展示 442
12.4 中級:信箱客戶端 444
12.4.1 簡述 444
12.4.2 郵件引擎 444
12.4.3 數據結構 446
12.4.4 實例 447
12.5 高級:影院 448
12.5.1 簡述 448
12.5.2 播放引擎介紹 448
12.5.3 播放引擎接口函式 449
12.5.4 實例 450
12.6 高級:音樂播放器 453
12.6.1 簡述 453
12.6.2 音樂引擎介紹 453
12.6.3 音樂播放接口 453
12.6.4 實例 455
第 13章 系統接口案例
13.1 定時任務 460
13.1.1 cron 簡述 460
13.1.2 systemd 簡述 460
13.2 設備訪問 462
13.2.1 攝像頭 462
13.2.2 揚聲器和麥克風 486
13.2.3 網路 504
13.2.4 藍牙 511
13.3 通知接口的使用 520
13.4 托盤圖示 525
13.4.1 QSystemTrayIcon 類 525
13.4.2 實例 527
第 5 篇 常見問題
第 14章 核心與驅動
14.1 核心編譯 533
14.1.1 編譯 x86/ARM 核心 533
14.1.2 交叉編譯龍芯核心 533
14.1.3 AMD GPU 顯示卡驅動源碼編譯 534
14.2 GPIO 534
14.2.1 數據結構 534
14.2.2 驅動初始化流程 535
14.2.3 示例 535
14.3 input 子系統 536
14.3.1 輸入設備驅動 536
14.3.2 套用示例 538
14.4 hwmon 子系統 539
14.4.1 hwmon 驅動 539
14.4.2 套用示例 541
14.5 LTP 542
14.5.1 LTP 執行原理 542
14.5.2 LTP 環境部署 542
14.5.3 安裝目錄 543
14.5.4 測試執行 543
14.6 驅動問題 543
14.6.1 網卡速度異常問題 543
14.6.2 USB 觸摸板 S3 喚醒問題 544
14.6.3 HDMI 熱插拔連線狀態錯誤問題 546
第 15章 開發工具相關
15.1 其他開發工具 552
15.1.1 VS Code 552
15.1.2 JetBrains 系列 IDE 555
15.1.3 Eclipse 558
15.2 其他語言開發環境搭建 561
15.2.1 Node.js 561
15.2.2 Go 564
15.2.3 Rust 566
第 16章 常用資源
16.1 DTK 接口簡要說明 570
16.1.1 DMainWindow 自定義快捷選單 570
16.1.2 DApplication 接口函式 572
16.1.3 DTK 漢字轉拼音 572
16.1.4 DListView DViewItemAction::setwidget 用法 572
16.1.5 列印預覽 574
16.1.6 DAccessibilityChecker 的用法 575
16.1.7 自定義按鈕背景色 576
16.1.8 幫助手冊 577
16.1.9 日誌檔案 578
16.1.10 系統信息 579
16.1.11 系統通知 580
16.1.12 DRegionMonitor 580
16.2 Linux 開發常用資源 582
16.2.1 libc 手冊 582
16.2.2 man 手冊 582
16.2.3 編輯器 584
16.2.4 工具 585
16.2.5 代理 586
16.2.6 網路安全 586
16.2.7 檔案共享 587
16.2.8 終端 587
16.2.9 圖形界面 588
16.2.10 數據備份與恢復 588
16.2.11 控制台 589
16.2.12 包管理工具 589