一键教会OpenHarmony-4.1-Release的small系统的rootfs制作过程

itopen组织
1、提供OpenHarmony优雅实用的小工具
2、手把手适配riscv + qemu + linux的三方库移植
3、未来计划riscv + qemu + ohos的三方库移植 + 小程序开发
4、一切拥抱开源,拥抱国产化

一、rootfs制作命令

small系统的rootfs制作脚本为build/ohos/packages/fs_process.py,制作的命令为
build/ohos/packages/fs_process.py
--product dayu900
--root-path /home/itopen/OpenHarmony/OpenHarmony-v4.0-Release/
--out-path /home/itopen/OpenHarmony/OpenHarmony-v4.0-Release/out/dayu900/dayu900
--log-path /home/itopen/OpenHarmony/OpenHarmony-v4.0-Release/out/dayu900/dayu900/build.log
--product-path /home/itopen/OpenHarmony/OpenHarmony-v4.0-Release/vendor/hihope/dayu900

二、fs_process.py文件解析

该文件主要就是class Packer的解析,因此解析每一个接口即可

2.1 init解析

源代码如下

def __init__(self, packer_args) -> None:
    self.config = Config() # 该类在build/hb/resources/config.py
    self.replace_items = {
        r'${product_name}': self.config.product,
        r'${root_path}': self.config.root_path,
        r'${out_path}': self.config.out_path
    }
    self.packing_process = [
        self.mv_usr_libs, self.create_fs_dirs, self.fs_link,
        self.fs_filemode, self.fs_make_cmd, self.fs_tear_down
    ]
    self.fs_cfg = None
    self.chmod_dirs = []

源代码功能

初始化参数

源代码解析

  • 调用Config类获取product_name、root_path、out_path
    Config类是通过解析ohos_config.json文件获取了上面的相关参数,该文件在编译开始或者执行hb set时自动生成并位于代码根目录下
  • self.replace_items解析结果如下
    • ${product_name}: dayu900
    • ${root_path}: /home/wen_fei/OpenHarmony/dayu900-v4.0-release
    • ${out_path}: /home/itopen/OpenHarmony/OpenHarmony-v4.0-Release/out/dayu900/dayu900

2.2 fs_make解析

源代码如下

def fs_make(self, cmd_args):
    fs_cfg_path = os.path.join(self.config.product_path, 'fs.yml')
    if not os.path.isfile(fs_cfg_path):
        LogUtil.hb_info(f'{fs_cfg_path} not found, stop packing fs. '
                      'If the product does not need to be packaged, ignore it.')
        return
    if self.config.fs_attr is None:
        LogUtil.hb_info('component compiling, no need to pack fs')
        return

    fs_cfg_list = IoUtil.read_yaml_file(fs_cfg_path)
    for fs_cfg in fs_cfg_list:
        self.fs_cfg = self.fs_attr_process(fs_cfg)
        if self.fs_cfg.get('fs_dir_name', None) is None:
            continue
        for fs_process_func in self.packing_process:
            fs_process_func()

源代码功能

设置self.fs_cfg并调用处理函数

源代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值