环境搭建


1. Linux Build Code服务器配置

ubuntu 版本:18.04 - 22.04(推荐18.04版本,已验证过)

需要安装tool和lib(如果之前服务器有build过android code可以先忽略这个步骤),google Android Build 在 ubuntu 18.04 需要安装的套件:

apt-get install git-core gnupg flex bison build-essential zip curl
zlib1g-dev gcc-multilib g++-multilib
libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev
lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

1.1. 修改sh

如果默认是sh,需要将sh改成 bash 或者 zsh

# sudo rm /bin/sh
# sudo ln –s /bin/bash /bin/sh

2. SDK 代码获取说明

当前Android版本SDK是通过Git Server来远程下载,提前条件是需要提前把Git Server账户跟固定的IP绑定,Git Server下code措施请参考以下步骤:

  1. 客户提供下code服务器对应的外网固定ip提供给Sigmastar的FAE

    可输入以下命令查询:curl ifconfig.me

  2. Sigmastar拿到客户提供的IP之后,会内部跟IT申请一个跟该IP绑定的git账号跟密码并反馈给客户,例如:

    IP:192.168.xxx.x 账号:SD_customer 密码:customer_pass

  3. 确保服务器搭建好git环境,确保下载环境网络畅通(网络端口9080确认打开),硬盘内存足够(大于300G)

    测试网络:telnet git01.sigmastar.com.cn 9080

  4. 将账号密码写入到~/.netrc (如果没有该文件新创建一个即可),这样不用每次重复输入账号密码

    vim ~/.netrc
    machine git01.sigmastar.com.cn login SD_customer    password  customer_pass
    
  5. 使用sigmastar提供的repo.sigmastar 执行repo命令

    repo.sigmastar init -u https://git01.sigmastar.com.cn:9080/aosp/platform/manifest -b  rel_opera -m  xxxx_TAG.xml
    repo.sigmastar sync -f --no-clone-bundle -j8
    

    -m 指定的xxxx_TAG.xml为指定TAG版本,请跟FAE确认版本让FAE提供

    如遇网络波动sync code失败,重复执行repo.sigmastar sync -f --no-clone-bundle -j8 即可

3. SDK 编译步骤说明

Android sdk 整体编译(包含bootloader,kernel,aosp)

  1. Git下code完成后,进入到aosp根目录,执行 Android 环境变量初始化:

    source build/envsetup.sh
    
  2. lunch 到指定的编译设备,这里以 sstar_pioneer5_sdp-userdebug 目标为例

    lunch sstar_pioneer5_sdp-userdebug

    如果编译低内存的版本,请使用带 lr 后缀的配置:

    lunch sstar_pioneer5_sdp_lr-userdebug

  3. 执行编译命令

    ./sstar_make.sh -b -k -a -p -r -u --ota_full
    

    -b:编译 bootloader

    -k:编译 kernel

    -a:编译 aosp

    -r:生成release_sstar_pioneer5_sdp_xxxx_xxxx目录,同时包含sstar_fastboot_flashall.bat升级脚本

    -p:生成package_sstar_pioneer5_sdp_xxxx_xxxx目录,同时包含update.bin(完整的image用于烧录升级)

    -u:生成 udisk_update_sstar_pioneer5_sdp_xxxx_xxxx文件夹,包含SigmastarUpgrade.bin,用于U盘升级。

    -e:打包生成 emmc_update_sstar_pioneer5_ad_lr_xxxx_xxxx 文件夹,里面包含emmc_boot.binemmc_data.bin,用于制做母片,生产时使用烧录器烧录。

    --ota_full:生成全量OTA包full_ota_update.zip,位于$(OUT)目录下。

    --ota:生成增量OTA包incremental_ota_update.zip,位于$(OUT)目录下。

    执行sstar_make.sh后会提示选择对应的board文件,DDR型号,屏参文件,根据实际情况选择。

    公版 SSD2386 默认 SSZ028B-S01A-S 板子对应的选项如下:

    boardselect

    公版 SSD2381 默认 SSZ028C-S01A-S 板子对应的选项如下:

    boardselect

  4. 选择后按回车会开始执行编译生成image,image 生成目录在如下路径:

    -r:aosp_projects/out/target/product/pioneer5_sdp/release_sstar_pioneer5_sdp_20221209_123510

    -p:aosp_projects/out/target/product/pioneer5_sdp/package_sstar_pioneer5_sdp_20221209_123510

    -u:aosp_projects/out/target/product/pioneer5_sdp/udisk_update_sstar_pioneer5_sdp_20221209_123510

    --ota_full:aosp_projects/out/target/product/pioneer5_sdp/full_ota_update.zip

    --ota:aosp_projects/out/target/product/pioneer5_sdp/incremental_ota_update.zip

    其中文件后缀 20221209_123510 日期是动态生成的。

    请根据需要编译参数选择-p,-r,-u,--ota_full或者都打包。

    • 只更新 bootloader 并打包

      1. source build/envsetup.sh
      2. lunch sstar_pioneer5_sdp-userdebug
      3. ./sstar_make.sh -b -a -r -p
      

      会在aosp_projects/out/target/product/pioneer5_sdp/下打包image到文件夹release_sstar_pioneer5_sdp_20221212_163720和package_sstar_pioneer5_sdp_20221212_163720中

    • 只更新 kernel 并打包

      1. source build/envsetup.sh
      2. lunch sstar_pioneer5_sdp-userdebug
      3. ./sstar_make.sh -k -a -r -p
      

      会在aosp_projects/out/target/product/pioneer5_sdp/下打包image到文件夹release_sstar_pioneer5_sdp_20221212_163720和package_sstar_pioneer5_sdp_20221212_163720中

3.1. OTA包说明

编译全量包同时会在 $(OUT) 目录下生成 target_files,这个会记录当前版本的全量信息,后续生成增量 OTA 包会需要用到这个,target_files 每次编译增量或者全量 OTA 包都会生成,生成文件夹名称带编译日期,例如:ota_sstar_pioneer5_sdp_20230501_121058。

3.1.1. 增量OTA包

OTA 增量包是由两个完整的版本 target_files 做比较提取出增量得到的,所以当修改的 AOSP 的代码后要制作增量包,需要之前的版本做过一次构建 OTA 全量或者增量包并生成 target_file 文件。

假设在之前版本已经编译过一次 OTA 全量包并在$(OUT) 目录生成了 ota_sstar_pioneer5_sdp_20230501_121058 并且当前设备也是运行在该版本上,在修改了代码后可以通过以下指令得到了一个基于旧版本更新到新版本的 OTA 增量包:

./sstar_make.sh --ota $(OUT)/ota_sstar_pioneer5_sdp_20230501_121058/sstar_pioneer5_sdp-target_files-eng.xxxx.xx.zip

需要注意的是 sstar_pioneer5_sdp-target_files-eng.xxxx.xx.zip 文件对于每个编译服务器名字不一样,前缀 sstar_pioneer5_sdp-target_files 都是一样的,只需要通过前缀就能够找到这个文件。

最终生成的增量 OTA 包位于 $(OUT)/incremental_ota_update.zip。

4. 编译生成image介绍

image name 内容说明
platform_tools 烧录相关 pc tool
IPL_PRE.bin 硬件初始引导程序,负责引导加载bootloader.img
bootloader.img 引导加载程序镜像,存储 IPL.bin,IPL_CUST.bin,uboot.bin
boot.img 启动内核镜像,存储内核镜像 zImage
cache.img 缓存镜像,存储系统或用户应用产生的临时数据
dtbo.img 设备树镜像,存储内核设备相关信息
env.img 环境变量分区镜像,存储 uboot 环境变量
factory.img 工厂分区镜像,存储工厂数据
logo.img logo 分区镜像,存储 logo 图片
odm.img odm 分区镜像,存储 odm 相关文件
recovery.img recovery 分区镜像,存储 recovery 镜像
partition-table.img 分区表分区镜像,存储 Android 镜像分布信息
sstar_fastboot_flashall.bat fastboot 升级脚本
system.img 系统分区镜像,存储 Android 系统的核心文件
update.img 编译生成所有 image 打包生成的烧录 image
userdata.img 用户数据镜像,存储与用户相关的数据
vendor.img vendor 分区镜像,存储 vendor 相关文件
vendor_boot.img vendor 的 boot 分区镜像,存储 vendor 相关的内核驱动 ko 等