鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

镜像一键式编译脚本

华为提供一键式编译Kbox安卓镜像的自动化脚本。一键式编译脚本包含了编译构建的全部流程,若参考本章节使用了一键式编译脚本进行镜像编译,则可以跳过软件编译后续章节直接进行软件部署。

自动化脚本实现了安装编译依赖包编译AOSP源码与镜像生成章节的操作。使用自动化脚本需要准备AOSP源码、华为提供的Kbox二进制文件包、ExaGear转码包和Android代码补丁包、编译脚本包,请参见表1获取。自动化脚本的使用步骤如下:

  1. 首先在“/home”目录下手动创建“auto_compile”目录,用于存放AOSP源码以及自动化脚本。

    请确保“/home”目录的剩余空间大于250GB,可通过df -h命令查看磁盘空间情况。

    1
    2
    mkdir -p /home/auto_compile
    cd /home/auto_compile
    
  2. “/home/auto_compile”目录下载AOSP源码,版本为android-11.0.0_r48,将下载好的AOSP源码目录重命名为“aosp”
  3. 请参见软件环境下载Kbox-AOSP11.zip文件到本地,上传到服务器的“/home/auto_compile”目录,并解压。
    cd /home/auto_compile
    unzip Kbox-AOSP11.zip
  4. 修改容器网络配置。
    1. 编辑kbox11_android_build.sh脚本。
      1
      2
      cd /home/auto_compile/Kbox-AOSP11/make_img_sample/kbox11_android_build
      vim kbox11_android_build.sh
      
    2. 按“i”进入编辑模式,修改以下内容,用于配置容器的DNS地址。需保证配置的地址可用,且按照文件的格式进行配置,否则可能导致编译获得的镜像不可用。配置格式参考示例如下。
      1
      DNS=xx.xx.xx.xx
      
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
  5. 请参见软件环境下载Android Kbox二进制文件包、ExaGear转码包、Meson、Mesa源码、LLVM源码、libdrm源码、libva源码和Cloudphone应用安装包到本地。在如下指定目录中创建“package”文件夹。
    1
    2
    cd /home/auto_compile/Kbox-AOSP11/make_img_sample/kbox11_android_build
    mkdir -p package
    

    将下载的文件上传至服务器的“/home/auto_compile/Kbox-AOSP11/make_img_sample/kbox11_android_build/package”目录。

    需保持下载的第三方库源码(Mesa、LLVM、libdrm、libva)及解压出的文件夹名与“/home/auto_compile/Kbox-AOSP11/make_img_sample/00_kbox_prepare.sh”文件中配置的“<package>_version”“<package>_src”变量值一致。若不一致可重命名源码文件夹再重新打包。

  6. 执行kbox11_android_build.sh自动化脚本完成Kbox编译。
    1
    2
    cd /home/auto_compile/Kbox-AOSP11/make_img_sample/kbox11_android_build && chmod +x kbox11_android_build.sh
    ./kbox11_android_build.sh
    

    此脚本执行时间需要一小时以上,请耐心等待。脚本执行完成会有如下回显。如遇脚本执行报错,优先排查脚本并联系华为工程师。

    1
    2
    3
    ---------------Success--------------
    /home/auto_compile/aosp/android.tar
    ---------------End--------------
    

    至此,Kbox安卓镜像制作完成,在AOSP源码目录下会生成名为“android.tar”的Kbox镜像。

故障处理

问题现象一:

执行kbox11_android_build.sh自动化脚本时可能出现“'format_info.h' file not found”类报错,原因为Mesa多线程编译概率性导致编译所依赖的头文件生成滞后,导致编译失败。

1
2
3
../src/mesa/main/formats.c:81:10: fatal error: 'format_info.h' file not found
#include "format_info.h"
1 error generated.

解决步骤

  1. 使环境变量生效。
    1
    source ~/.bashrc
    
  2. 重新编译。
    1
    2
    3
    4
    cd /home/auto_compile/aosp
    source build/envsetup.sh
    lunch kbox_arm64-user
    make -j
    
    如果出现相同报错,请再次执行make -j命令编译,直到不再出现相同报错。执行成功后,会有如下回显:
    1
    #### build completed successfully (xx:xx (mm:ss)) ####
    
  3. 继续执行以下命令用于生成“android.tar”的Kbox镜像。
    1
    2
    3
    cp -r /home/auto_compile/Kbox-AOSP11/make_img_sample/kbox11_android_build/create-package.sh /home/auto_compile/aosp
    chmod +x create-package.sh
    ./create-package.sh /home/auto_compile/aosp/out/target/product/arm64/system.img
    

问题现象二:

执行kbox11_android_build.sh自动化脚本时,可能出现“No such file or directory”类报错, 原因为依赖包解压所得文件夹名称发生变化比如附加后缀,一键式脚本中无法识别到解压出来的文件夹名称,导致编译失败。

解决步骤:

以下步骤仅供参考,具体操作以实际为主。

  1. 找到报错的软件压缩包后解压。
    unzip drm-libdrm-2.4.111.zip
  2. 修改解压文件夹名为编译报错中提示的文件名(一键式脚本中预设的文件名)。
    mv libdrm-libdrm-2.4.111-f801b07a60740425604d6563e5dc399375108bc4 drm-libdrm-2.4.111
  3. 压缩目录,新做一个软件包,使用新软件包进行一键式脚本编译即可。
    mv drm-libdrm-2.4.111.zip drm-libdrm-2.4.111.zip.bak
    zip -r drm-libdrm-2.4.111.zip  drm-libdrm-2.4.111

执行kbox11_android_build.sh自动化脚本时也可能出现依赖缺失类报错, 这类报错同样可能由于软件包内容更新产生的新的依赖导致。遇到该类型的报错,直接在环境上安装缺失的包即可。