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)