這個名字的問題在於它來自羅馬神話,而不是像我們大多數的產品一樣來自希臘神話。菲尼克斯已經被充電器奪走了…
本自述文件記錄如何從原始碼編譯和建構 Venus OS。
首先,確保這確實是您想要或需要的。編譯需要幾個小時,需要大量磁碟空間,並產生映像和 sdk,它們都可以作為二進位檔案 swu 和 sdk 下載。
即使您正在開發 Venus 作業系統的某一部分(例如其驅動程式之一或 GUI),仍然沒有必要從原始程式碼建立完整的 Venus 作業系統。
請務必先閱讀 Venus OS wiki。
所以,如果你堅持認為:這個倉庫是建造 Venus 的起點。它包含圍繞 bitbake 和 git 的包裝函數來取得和編譯原始碼。
對於完整的構建,您需要存取 Victron Energy 的私人複製品。也可以只建置開源套件(但目前不會自動檢查)。
Venus 使用 OpenEmbedded 作為建置系統。
建置 Venus 需要 Linux。在 Victron,我們使用 Ubuntu 來實現此目的。
# clone this repository
git clone https://github.com/victronenergy/venus.git
cd venus
# install host packages (Debian based)
sudo make prereq
# fetch needed subtrees
# use make fetch-all instead, if you have access to all the private repos.
make fetch
最後一個 fetch 指令已將一些內容複製到./sources/
目錄中。首先是 bitbake,它是 OpenEmbedded 中類似 make 的建置工具的一部分。除此之外,您還會發現 openembedded-core 和各種其他層,其中包含定義 Venus 的配方和其他元資料。
現在是時候真正開始建造了(這可能需要幾個小時)。選擇以下範例命令之一:
# build all, this will take a while though... it builds for all MACHINES as found
# in conf/machines.
make venus-images
# build for a specific machine
make ccgx-venus-image
make beaglebone-venus-image
# build the swu file only
make ccgx-swu
# build from within the bitbake shell.
# this will have the same end result as make ccgx-swu
make ccgx-bb
bitbake venus-swu
上述入門說明將自動選擇用於分發的 Venus OS 的設定。也可以使用替代設置,例如建立較新的 OE 版本:
make CONFIG=rocko fetch-all
若要查看您的結帳正在使用哪個配置,請查看 ./conf 符號連結。它將連結到 ./configs 目錄中的配置之一。
每個配置都有幾個檔案:
repos.conf
包含需要簽署的儲存庫。可以使用make update-repos.conf
重建它。metas.whitelist
包含將新增至 bblayers.conf 的元目錄,但前提是它們實際存在。machines
包含可以在此配置中建置的機器列表若要新增儲存庫,請將其放入來源中,然後簽出所需的分支並設定上游分支。可以透過以下方式使結果永久化: make repos.conf
。
不要忘記將新儲存庫中要使用的目錄新增至metas.whitelist。
repos
指令Repos 就像 git submodule foreach -q git 一樣,但更短,所以你可以這樣做:
./repos 推送原點 ./repos 標籤 xyz
它將推送所有、標記所有等。
./repos 簽出標記名
# patches not in upstream yet
./repos cherry -v
# local changes with respect to upstream
./repos diff @{u}
# local changes with respect to the push branch
./repos diff 'origin/`git rev-parse --abbrev-ref HEAD`'
or if you have git 2.5+ ./repos diff @{push}
./repos log @{u}..upstream/`git rev-parse --abbrev-ref @{u} | grep -o "[a-Z0-9]*$"` --oneline
# rebase your local checkout branches on upstream master
./repos fetch origin
./repos rebase 'origin/$checkout_branch'
# checkout the branches as per used config
./repos checkout '$checkout_branch'
# tag & push venus repo as well as all repos.
git tag v2.21
git push origin v2.21
./repos tag v2.21
./repos push origin v2.21
維護版本所基於的基礎分支將以b
為前綴。
此範例示範如何建立新的維護分支。上下文是 master 已經在開發 v2.30 了。最新的官方版本是 v2.20。因此我們創建了一個名為 b2.20 的分支,其中第一個版本將是 v2.21;稍後,如果需要另一個維護版本,v2.22 就會被推到頂部;等等。
# clone & make a branch in the venus repo
git clone [email protected]:victronenergy/venus.git venus-b2.20
cd venus-b2.20
git checkout v2.20
git checkout -b b2.20
# fetch all the meta repos
make fetch-all
# clone, prep and push them
./repos checkout v2.20
./repos checkout -b b2.20
./repos push --set-upstream origin b2.20
# update the used config to the new branch
make update-repos.conf
git commit -a -m "pin dunfell branches to b2.20"
# update the raspbian config to the new branch
[
Now manually update the raspbian config file, and commit that as well.
See some earlier branch for example.
]
git commit -a -m "pin raspbian branches to b2.20"
# Update gitlab-ci.yml
[
Now, modify .gitlab-ci.yml. See a previous maintenance branch for
how that is done.
]
git commit -a -m "Don't touch SSTATE cache & build from b2.20"
# Push the new branch and changes to the venus repo
# Note that this causes a (useless) CI build to start on the builder once
# it syncs. Easily cancelled in the gitlab ui.
git push --set-upstream origin b2.20
現在一切都準備好了;並準備開始採摘。
請注意,有兩種方法可以向後移植變更。一是從元儲存庫中取得完整的提交;另一種是從來源儲存庫新增補丁。如果可以,請應用方法一。但是,如果儲存庫(例如 mk2-dbus 或 gui)有大量提交,而您只需要其中一個;那你必須只服用補丁。
更改必須非常小、經過充分測試或非常重要
git cherry-pick -x
在提交訊息中附加一個漂亮的(從[ref]中挑選的)行backported from
,就像這個一樣到提交訊息中(**backported to v2.22**)
或適用的地方(**backported to v2.22 as a patch**)
添加到每個補丁和版本被向後移植。要構建,請在鏡像/venus 儲存庫上建立一個管道,並為維護分支運行它。不需要變數。
如果你遇到這樣的問題:
如果可以透過以下方式修復: make einstein-bb bitbake -c cleanall packagegroup-machine-base
然後再試一次