Python에서 bitbake 명령을 사용합시다!
가장 먼저
저는 yocto를 사용하여 사용자 정의 Linux 빌드를 빌드하는 중입니다.
이 작업에서 종종 다음과 같은 요청을 받습니다.
골치 아프지 않나요? 나는 grep하고 싶지 않고 너무 오래 걸리기 때문에 빌드하고 싶지 않습니다 ...
파이썬에서 Bitbake를 사용해 봅시다.
제 생각에는 골칫거리입니다. 그래서 그것에 대해 뭔가를 하는 방법을 조사해 봅시다. 먼저 bitbake 명령에 의한 빌드 메커니즘은 대략 이렇습니다.
이 Tinfoil은 약간 복잡해서 사용하기 쉽지 않습니다. 실제 코드는 here 입니다. 반면에 server_client 간의 IF는 어느 정도 잘 정의되어 있습니다here. 이러한 상황을 고려하면 아래와 같이 해야 할 것 같습니다.
이 bbclient를 Python으로 만들면 언어 서버 등에서 쉽게 사용할 수 있습니다.
내가 만든 것
지금까지의 연구 결과를 바탕으로 내가 만든 bbclient는 아래와 같다.
https://pypi.org/project/bbclient/
자료도 준비했습니다.
할 수 있는 일
IF가 너무 많아서 다 보여드릴 수는 없지만 지금은 이 글의 시작 부분에서 언급한 사용 사례를 구현해 보도록 하겠습니다.
먼저 bbclient 인스턴스를 초기화하는 방법은 아래와 같습니다.
import bbclient
# Initialize bbclient instance
project_path: str = "/PATH/TO/POKY"
init_command: str = ". oe-init-build-env"
client: BBClient = BBClient(project_path, init_command)
# launch server
server_adder: str = "localhost"
server_port: int = 8081
client.start_server(server_adder, server_port)
# set event filter
ui_handler: int = client.get_uihandler_num()
client.set_event_mask(ui_handler, logging.DEBUG, {}, ["*"])
# paser recipes and create caches
ret = client.parse_files()
client.wait_done_async()
이 클라이언트를 사용하여 다음 각 사용 사례를 구현할 수 있습니다.
I need a list of recipe files that inherit a specific bbclass (like core-image.bbclass).
ret: List[GetRecipeInheritsResult] = client.get_recipe_inherits()
recipes_inherit = [i for i in ret if "/PATH/TO/core-image.bbclass" in i.inherit_file_paths]
for i in recipes_inherit:
print(i.recipe_file_path)
I need you to list the variables (e.g. PE, PV, PR) with all packages
ret: List[GetRecipesResult] = client.get_recipes()
for i in ret:
data_store_index: int = client.parse_recipe_file(i.recipe_files)
pe: Any = client.data_store_connector_cmd(data_store_index, "getVar", "PE")
pv: Any = client.data_store_connector_cmd(data_store_index, "getVar", "PE")
pr: Any = client.data_store_connector_cmd(data_store_index, "getVar", "PE")
print(pe, pv, pr)
I need you to list the bbappend files for a specific package (e.g. gcc).
ret: List[str] = client.find_best_provider("gcc")
target_recipe_file_path: str = ret[3]
ret: List[str] = client.get_file_appends(target_recipe_file_path)
print(ret)
이 클라이언트에서 이미지를 빌드하고 종속성 taskdepends 파일을 생성할 수도 있습니다.
드디어
사용해보고 싶으신 분들은 꼭 이용해보세요!
Reference
이 문제에 관하여(Python에서 bitbake 명령을 사용합시다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/angrymane/lets-use-bitbake-commands-from-python-3k8c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)