鸿蒙源码编译脚本解读
1 env_setup.sh
将doc文档目录下的dockfile 文件内容检查一下 复制到了build目录下 判断bash 替换数据源 source.list 将复制的dockfile移动重命名为rundocker.sh 执行rundocker.sh
这个文件就是 安装了一些软件
2 prebuilts_download.sh
检查环境 执行prebuilts_download.py下载一些软件 下软件的时候
读取prebuilts_download_config.json的配置的哪些软件 到"../openharmony_prebuilts", 解压使用更目录下的perbuilts目录下的软件
3 build.sh
检查环境编译参数 用了hb 就执行main.py没有就执行scripts/entry.py
3.1 entry.py
添加编译参数检查编译参数 执行 build/build_scripts/build.py
3.2 build.py
查找build/config/BUILDCONFIG.gn 作为参数 用Python执行build/hb/main.py
3.3 main.py
定义了执行各种任务,我们只看看build的任务 _init_build_module方法执行OHOSBuildModule.py ,改类的接口中定义了执行顺序 prebuild,preload,load,gn,ninja, post_build
上面方法 prebuild 也就是参数传递 绑定
OHOSPreloader.py
执行preload的工作 类的接口preload_interface.py接口中run方法定义了各方法执行流程
_generate_build_prop 拼接参数key=value输出到本地 "out/preloader/product_name/build.prop"
_generate_build_config_json 将参数整理成json输出成文件到 "out/preloader/product_name/build_config.json"
_generate_parts_json 将参数按key排序放入key为parts的json输出 "out/preloader/product_name/parts.json"
_generate_parts_config_json 将参数:-./替换_ 成json输出到 "out/preloader/product_name/parts_config.json"
_generate_syscap_json 过滤参数中的syscap 输出到 "out/preloader/product_name/syscap.json"
exclusions "out/preloader/product_name/exclusion_modules.json"
_generate_subsystem_config_json 输出到 "out/preloader/product_name/subsystem_config.json" 先获取产品的子系统_get_product_specific_subsystem
在获取设备的子系统 _get_device_specific_subsystem
将空的配置文件 build/hb 'resources/config/config.json' 输出到 'out/ohos_config.json') 改文件里面的三个路径读取子系统配置
subsystem_config_json device_config_json product_config_json 应该是对应build文件夹下的sub_system_config.json 和 vendor和device下面的三个子系统配置文件夹。
实际情况是空的 loader阶段 有判断为空就写死读取 build下面的 'build/subsystem_config.json'
main.py中的 set_args_resolver = SetArgsResolver(set_args_dict) 填充参数 也有类似判空复制 'build/subsystem_config.json'
SetArgsResolver有参数绑定函数功能 参数的值都 通过绑定函数 赋值到了 config里面 否则找到代码逻辑中的值哪里来
执行的时候不会写默认的参数 默认的参数在'resources/args/default/buildargs.json') 中不同的参数分不同的阶段的phase字段区分 prebuild loader等等阶段
all_args = Arg.read_args_file(module_type)读取参数的时候会把默认参数地址写入
4 loader.py loader阶段加载子系统 先扫描子系统subsystem_info.py中执行 subsystem_scan.py中执行scan 只扫描vendor和device文件夹下的子系统配置文件,和配置文件中子系统路径下的 'ohos.build'和 'bundle.json' 文件 。
更多推荐


所有评论(0)