加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读