1. 環境准備
按照前面幾節的分享,我們已經知道了oe-init-build-env是如何建立yocto項目環境的,下面我們繼續研究bitbake腳本,在這之前,因為我們選擇qemuarm64為目標機進行開發,所以需要修改配置文件conf/local.conf,設置MACHINE為qemuarm64:

2. bitbake腳本分析
2.1 導入必要的包,注意這里用到了sys.path.insert並且連續調用兩次os.path.dirname取得bitbake的祖父目錄,然后再加上lib,這樣就將poky-sumo-19.0.0/bitbake/lib注冊到包搜索路徑,從而可以在后面import bb:
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(__file__)),
'lib'))
try:
import bb
except RuntimeError as exc:
sys.exit(str(exc))
from bb import cookerdata
from bb.main import bitbake_main, BitBakeConfigParameters, BBMainException
2.2 檢測區域是否為utf-8:
if sys.getfilesystemencoding() != "utf-8":
sys.exit("Please use a locale setting which supports UTF-8 (such as LANG=en_US.UTF-8).\nPython can't change the filesystem locale after loading so we need a UTF-8 when Python starts or things won't work.")
2.3 執行bitbake_main,此前進行版本檢測:bitbake腳本本身定義了__version__為"1.37.0",同時在bitbake/lib/bb/__init__.py也定義了__version__為“1.37.0”,這里進行一個版本的對比。
__version__ = "1.37.0"
if __name__ == "__main__":
if __version__ != bb.__version__:
sys.exit("Bitbake core version and program version mismatch!")
try:
sys.exit(bitbake_main(BitBakeConfigParameters(sys.argv),
cookerdata.CookerConfiguration()))
except BBMainException as err:
sys.exit(err)
except bb.BBHandledException:
sys.exit(1)
except Exception:
import traceback
traceback.print_exc()
sys.exit(1)
