一般嵌入式系統開發,都是從 NXP、SILICON 或 MediaTek 等晶片廠購買開發板,進而取得相對應的 SDK,再加入自主的想法來進行開發。
就本人在嵌入式系統打滾多年的經驗,就算集齊 SDK + EVK + Specification + User guide,你也不可能招喚神龍,哈哈,說笑了!
其實是距離建立第一份 Codebase 還有一大段的路要走。
flowchart LR
1stCodebase[1st Codebase]
SDK --> 1stCodebase --> Repository
不知各位是否有自己在網路上抓取 Opensource(SDK) 後,照著 Building guide 進行編譯,也會手足無措。
有可能系統環境不同,而欠缺 library。
Python、node.js 版本差異造成問題!
編譯工具缺失!甚至已經抓取不到!
最糟的還有,Building guide 本身就是幌子!
屈屈一個 Opensource 就可能發生這麼大的問題,更何況是整個作業系統!
你可能認為 SDK 已經是前人“整理”出來的,為什麼還需要花時間或心血在上面。但當你吸收完下面的章節就會知道,不同的因素排列組合,就可能有千萬種結果,而前人也只是幫你指出其中一個可能而已。
[ChatGPT] Codebase 的功用
程式碼庫(Codebase)在軟體開發過程中具有多種重要功能,它是一個組織、儲存和管理程式碼的中心化地方。以下是程式碼庫的主要功能和好處:
- 程式碼管理: 程式碼庫用於存儲和管理您的應用程式代碼。這包括源代碼文件、配置文件、資源文件等。它確保了代碼的安全性和一致性。
- 版本控制: 程式碼庫允許您使用版本控制系統(Version Control System,VCS)來跟蹤和記錄代碼的不同版本。這有助於團隊協作、代碼追蹤和回滾到先前的版本。
- 團隊協作: 多個開發者可以共享和協作於同一程式碼庫中。每個開發者可以檢查、編輯和提交他們的更改,並與團隊成員協作解決問題。
- 分支管理: 程式碼庫允許您創建和管理不同的分支,每個分支可以用於不同的功能、修復錯誤或版本。這使得同時進行多個任務變得容易。
- 容錯和復原: 使用版本控制系統,您可以輕鬆回滾到以前的代碼版本,以解決問題或恢復正常運行狀態,即使出現了錯誤或問題。
- 測試和部署: 程式碼庫允許您創建版本標籤(tags)或發行分支,以便對應用程式進行測試和部署。這有助於確保生產環境中運行的是穩定和可靠的代碼。
- 文檔和註釋: 程式碼庫通常允許開發者添加文檔和註釋,以說明代碼的功能、使用方法和重要信息。這有助於新成員理解代碼並提供支援。
- 共享和開源: 如果您選擇將程式碼庫設為開源,您可以輕鬆地共享代碼和參與開源社區。這有助於促進知識共享和協作。
- 自動化: 程式碼庫通常與自動化工具集成,以實現持續集成和持續交付(CI/CD),從而實現更快的開發和部署週期。
- 安全性: 程式碼庫可以提供訪問控制和權限管理,以確保只有授權的人員能夠訪問、修改和提交代碼。這有助於維護代碼的安全性和完整性。
總之,程式碼庫是軟體開發過程中的一個核心元素,它有助於組織、保護、協作和管理您的程式碼,同時提供了版本控制、容錯復原和協作的許多好處。不同的團隊和項目可以選擇不同的程式碼庫工具和流程,以滿足其需求。
- 小故事
在專案開啟時,都會指派成員先去研究其可行性,當然有 SDK 時,就要先進行彙整、編譯和測試。以下就是一個很糟的專案案例。
我:「你最近研究的東西相關的文件放那?」
先遣隊:「都在官網提供的 GitHub」
我:「那要從那開始 ?」
先遣隊:「官網都有寫」
我:「那 SDK,又放在那?編的如何?」
先遣隊:「官網都有,你自己不會抓哦!」
從圖中可以知道,第一份 Codebase 是要花費多少功夫才能完成。
就算釋出第一份 Codebase,隨著專案進行,需求的變更,而額外的 Opensource(SDK) 會有所增減,因此牽動到整個 Codebase,那你還會覺得之後都不會再更動嗎?
stateDiagram-v2
GetSDK: Get SDK
GetToolchain: Get Toolchain
WriteBuildtools: Write Buildtools
BuildError: Build Error
FixBuild: Fix Error
Start --> GetSDK
GetSDK --> GetToolchain
GetToolchain --> WriteBuildtools
WriteBuildtools --> Build
Build --> BuildError
BuildError --> FixBuild
FixBuild --> WriteBuildtools
Build --> BuildOK
BuildOK --> Repository
Repository -->End
從專案開啟,拿到 SDK 後,就需要花部分人力進行 Codebase 整合,之後進到版本控管後,才有利於開發/測試人員進行開發和測試!
就目前工作的經驗,一般要完成 1st Codebase,至少需要 3*人月。
flowchart LR
Start
subgraph Codebase
direction LR
subgraph SDK
direction LR
XXX-SDK
Toolchain
end
subgraph Customer
direction LR
Application
end
Opensource
Buildtools
end
subgraph Repository
direction LR
svn
git
end
subgraph Members
direction LR
memberA
memberB
memberC
memberD
memberX
memberY
memberZ
releaser
end
subgraph Target
direction LR
linux
RaspberryPi
end
Start-->memberX-->|collect|Codebase-->|push|Repository<-->|clone / push|Members
Members-->|burn / deploy|Target
memberY-->|collect|Codebase
memberZ-->|collect|Codebase
FW[FW-verX.XX.XX]
releaser -->|release| FW
Target-->End
FW-->End
Codebase 其實就跟 Project 很像,只是切入的角度不同;有試過一次又一次的說明,建立 Codebase 的重要性,對方還是不得其門而入。
這邊就試著用不同的角度切入,當然所畫之狀態圖只是一個概念,非絕對,每個狀態都有可能造成結束或跳至任何一個狀態。
stateDiagram-v2
Start: 專案設立
Collect: 搜集資料
Summary: 匯整資料
DB: 建立檔案
Readme: 說明文件
Share: 分享情報
Assign: 工作分配
Schedule: 時間排程
Todo: 執行任務
End: 完成專案
Start --> Todo
Todo --> Collect
Collect --> Summary
Summary --> DB
DB --> Readme
Readme --> Collect
Readme --> Share
Share --> Assign
Assign --> Schedule
Schedule --> Todo
Schedule --> End
軟體開發套件(英語:Software Development Kit, SDK)指一些被軟體工程師用於為特定的軟體套件、軟體框架、硬體平台及作業系統等建立應用軟體的開發工具之集合。
Created and designed by Lanka Hsu.
HelperX is available under the BSD-3-Clause license. See the LICENSE file for more info.