yocto-sumo源码解析(六): setup_bitbake
发布时间:2020-12-14 03:45:38 所属栏目:大数据 来源:网络整理
导读:1. 创造日志handler: 在status_only模式,不需要日志以及UI # Ensure logging messages get sent to the UI as events handler = bb.event.LogHandler() if not configParams.status_only: # In status only mode there are no logs and no UI logger.addHa
|
1. 创造日志handler: 在status_only模式,不需要日志以及UI # Ensure logging messages get sent to the UI as events
handler = bb.event.LogHandler()
if not configParams.status_only:
# In status only mode there are no logs and no UI
logger.addHandler(handler)
?2. 取得ui模块并设置特征集: if configParams.server_only:
featureset = []
ui_module = None
else:
ui_module = import_extension_module(bb.ui,configParams.ui,‘main‘)
# Collect the feature set for the UI
featureset = getattr(ui_module,"featureSet",[])
if extrafeatures:
for feature in extrafeatures:
if not feature in featureset:
featureset.append(feature)
?3. 远程模式下返回远程server连接: server_connection = None
if configParams.remote_server:
# Connect to a remote XMLRPC server
server_connection = bb.server.xmlrpcclient.connectXMLRPC(configParams.remote_server,featureset,configParams.observe_only,configParams.xmlrpctoken)
4. 本地模式下返回本地server连接: else:
retries = 8
while retries:
try:
topdir,lock = lockBitbake()
sockname = topdir + "/bitbake.sock"
if lock:
if configParams.status_only or configParams.kill_server:
logger.info("bitbake server is not running.")
lock.close()
return None,None
# we start a server with a given configuration
logger.info("Starting bitbake server...")
# Clear the event queue since we already displayed messages
bb.event.ui_queue = []
server = bb.server.process.BitBakeServer(lock,sockname,configuration,featureset)
else:
logger.info("Reconnecting to bitbake server...")
if not os.path.exists(sockname):
print("Previous bitbake instance shutting down?,waiting to retry...")
i = 0
lock = None
# Wait for 5s or until we can get the lock
while not lock and i < 50:
time.sleep(0.1)
_,lock = lockBitbake()
i += 1
if lock:
bb.utils.unlockfile(lock)
raise bb.server.process.ProcessTimeout("Bitbake still shutting down as socket exists but no lock?")
if not configParams.server_only:
try:
server_connection = bb.server.process.connectProcessServer(sockname,featureset)
except EOFError:
# The server may have been shutting down but not closed the socket yet. If that happened,# ignore it.
pass
if server_connection or configParams.server_only:
break
except BBMainFatal:
raise
except (Exception,bb.server.process.ProcessTimeout) as e:
if not retries:
raise
retries -= 1
if isinstance(e,(bb.server.process.ProcessTimeout,BrokenPipeError)):
logger.info("Retrying server connection...")
else:
logger.info("Retrying server connection... (%s)" % traceback.format_exc())
if not retries:
bb.fatal("Unable to connect to bitbake server,or start one")
if retries < 5:
time.sleep(5)
?5. 清理日志handler,返回服务器连接以及ui模块: if configParams.kill_server:
server_connection.connection.terminateServer()
server_connection.terminate()
bb.event.ui_queue = []
logger.info("Terminated bitbake server.")
return None,None
# Restore the environment in case the UI needs it
for k in cleanedvars:
os.environ[k] = cleanedvars[k]
logger.removeHandler(handler)
return server_connection,ui_module
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
