XCD SM8650 android u 说明
一、xcd 本地编译需要申请手机部那边的secboot签名权限( 按需申请,不需要可以不申请)
secboot 签名申请和说明参考文档:参考文档:SecureBoot签名问题汇总及解决方法
没有secboot权限会报类似下面的错误:

二、代码下载
repo 工具:必须执行下面的命令(个人本地的Ubuntu 或者Centos 环境)
必须执行!必须执行!必须执行! A、B、C步骤执行一个即可
A、如果执行 sudo which repo 命令返回内容不为空时,请执行下面的命令:
sudo wget -nv http://cnbj1-inner-fds.api.xiaomi.net/repos/tools/repo -O $(sudo which repo)
sudo chmod 755 $(sudo which repo)B、如果执行 which repo 命令返回内容不为空时,请执行下面的命令:
wget -nv http://cnbj1-inner-fds.api.xiaomi.net/repos/tools/repo -O $(which repo)
chmod 755 $(which repo)C、如果执行 sudo which repo 或者 which repo 命令返回内容都为空时,请执行下面的命令:
sudo wget -nv http://cnbj1-inner-fds.api.xiaomi.net/repos/tools/repo -O ~/bin/repo
sudo chmod 755 ~/bin/repo执行以下命令,每个机器只需执行一次
# 步骤1、必须执行该命令,设置 ~/.gitconfig信息
git config --global user.name "xx" ## xx需要替换成自己gerrit上设置的 Username 值
git config --global user.email "公司邮箱"
# 步骤2、必须执行该命令,否则不能push代码
git config --global url."ssh://$(git config --get user.name)@gerrit.auto.mioffice.cn".pushInsteadOf ssh://$(git config --get user.name)@slave.auto.mioffice.cn
# 步骤3、添加ssh public key 到 Gerrit web 界面
# 查找 .ssh/目录下的 id_ed25519.pub(或者id_rsa.pub)文件,将内容添加到 https://gerrit.auto.mioffice.cn/settings/#SSHKeys代码下载命令
代码下载命令请在这个网页里copy
https://tailor.auto.xiaomiev.com/device/branch/list
该网页的入口可以从以下地方跳转
- Gerrit

- Grapple next

1、快速下载代码,但project的commit只显示最新的一个:
# SSI侧代码(主要是高通功能代码,对应system、product编译):
建立目录 xxx1 并进入xxx1(xxx1可以自己定义)
repo init -u ssh://$(git config --get user.name)@slave.auto.mioffice.cn:29418/platform/manifest.git -b xcd-init -m xcd_ssi.xml --repo-url=ssh://$(git config --get user.name)@slave.auto.mioffice.cn:29418/tools/repo --repo-rev=aosp-stable --no-repo-verify --depth=1 --git-lfs
repo sync -cd --no-tags -j4
# Vendor侧代码分支(小米侧功能代码,对应vendor、odm编译):
建立目录 xxx2 并进入xxx2(xxx2可以自己定义,但要与 xxx1 不同)
repo init -u ssh://$(git config --get user.name)@slave.auto.mioffice.cn:29418/platform/manifest.git -b xcd-init -m xcd_vendor.xml --repo-url=ssh://$(git config --get user.name)@slave.auto.mioffice.cn:29418/tools/repo --repo-rev=aosp-stable --no-repo-verify --depth=1 --git-lfs
repo sync -cd --no-tags -j4
# BP侧代码下载:
建立目录 xxx3 并进入xxx3(xxx3可以自己定义,但要与 xxx1 、xxx2 不同)
repo init -u ssh://$(git config --get user.name)@slave.auto.mioffice.cn:29418/platform/manifest.git -b xcd-init -m xcd_bp.xml --repo-url=ssh://$(git config --get user.name)@slave.auto.mioffice.cn:29418/tools/repo --repo-rev=aosp-stable --no-repo-verify --depth=1 --git-lfs
repo sync -cd --no-tags -j4【备注】
1、xcd项目project仓以 xcd-init- 开头的分支为镜像分支,会定期同步手机部侧的代码,所以不要在该类型的分支上提交修改,push 权限已经被锁死
2、xcd项目project仓以 xcd-auto- 开头的分支可以进行修改移植,如果需求手机部侧的修改可以从 备注1 中说的分支按需进行cherry-pick或者移植
3、如果没有下载权限,找 葛云源 老师开通下载权限
四、编译环境
1、docker环境(要求内存比较大(60G),如果内存不够需要增加swap分区50G大小)
docker权限(确保执行docker 命令时不需要使用sudo)
#创建名为 docker 的组,如果之前已经创建该组,可以忽略该步骤
sudo groupadd docker
#将当前用户加入docker组
sudo gpasswd -a $(whoami) docker
#重启docker服务
sudo systemctl restart docker
# 添加docker访问和执行权限
sudo chmod a+rw /var/run/docker.sock
# 验证是否生效
docker images# docker编译环境:
mkdir -p ${HOME}/tmp
wget "https://cnbj1-inner-fds.api.xiaomi.net/repos/docker_xcd.sh" -O docker_xcd.sh && chmod a+x docker_xcd.sh
bash docker_xcd.sh
# 特殊说明:如果代码路径是单独挂载到一个磁盘上,需要将挂载文件路径放到用户家目录下面。
# 参考文档:https://www.yiricheng.cn/?p=702、XCD 编译方式(以suiren native 版本为例)
# 定义本地代码目录和编译产物输出目录
targetfiles_dir=${HOME}/out_merge
missi_code_dir="MISSI侧代码绝对路径,即SSI侧代码下载到本地的路径"
vendor_code_dir="Vendor侧代码绝对路径,即Vendor侧代码下载到本地的路径"
rm -rf ${targetfiles_dir}
mkdir ${targetfiles_dir}
# 主线使用 cn,E2/E3/E4/E4U1/E4U2使用 native
buildRegion="cn"
# buildRegion="native"
#SSI侧编译
./miui/pangu/build_tools/mibuild.py build_system --soc-vendor qcom --build-variant userdebug --build-family auto --build-region ${buildRegion} --ssi-src-dir ${missi_code_dir} --target-files-dir ${targetfiles_dir} --support-bit only64
./miui/pangu/build_tools/mibuild.py build_product --soc-vendor qcom --build-variant userdebug --build-family auto --device-name suiren --build-region ${buildRegion} --ssi-src-dir ${missi_code_dir} --target-files-dir ${targetfiles_dir}
# Vendor侧编译
./miui/pangu/build_tools/mibuild.py build_vendor --soc-vendor qcom --build-variant userdebug --platform-name auto8650 --build-region ${buildRegion} --vendor-src-dir ${vendor_code_dir} --target-files-dir ${targetfiles_dir}
./miui/pangu/build_tools/mibuild.py build_kernel --soc-vendor qcom --build-variant userdebug --platform-name auto8650 --device-name suiren --build-region native --kernel-type odm --vendor-src-dir ${vendor_code_dir} --target-files-dir ${targetfiles_dir}
./miui/pangu/build_tools/mibuild.py build_odm --soc-vendor qcom --build-variant userdebug --device-name suiren --build-region ${buildRegion} --vendor-src-dir ${vendor_code_dir} --target-files-dir ${targetfiles_dir}
#merge target files
./miui/pangu/build_tools/mibuild.py merge_all_target_files --soc-vendor qcom --device-name suiren --build-family auto --platform-name auto8650 --build-region ${buildRegion} --script-dir ./miui/pangu --target-files-dir ${targetfiles_dir} --system-target-files ${targetfiles_dir}/missi_auto_.*-target_files-.*.zip --product-target-files ${targetfiles_dir}/miproduct_suiren_.*-target_files-*.zip --vendor-target-files ${targetfiles_dir}/mivendor_auto8650_.*-target_files-*.zip --odm-target-files ${targetfiles_dir}/miodm_suiren_.*-target_files-*.zip --system-otatools ${targetfiles_dir}/system-otatools.zip --vendor-otatools ${targetfiles_dir}/vendor-otatools.zip
#生成super.img
cd ${targetfiles_dir}
./otatools/bin/build_super_image merged-target_files.zip super.img
#生成out.zip
cd ${targetfiles_dir}
./otatools/bin/img_from_target_files merged-target_files.zip out.zip
# 生成线刷包
export BUILD_PROFILE="u-native"
unzip ${targetfiles_dir}/suiren_misc_images.zip -d ${targetfiles_dir}/flash_tgz
# 下载bp(modem)侧的产物,下载地址: https://cloud.mioffice.cn/#/product/file-store/objects/xcd-project?regionId=ck99jqjcc00291bn9m9e39uos
# 例如 下载suiren 7月15号主线的分支,路径为: 202407/suiren/20240715/24.07.15.D.native.userroot.20240715010011/bp/suiren_native-target_files-bp-24.07.15.D.zip
# 解压bp产品并把需要的文件copy到线刷包目录
unzip -q suiren_native-target_files-bp-24.07.15.D.zip -d ${targetfiles_dir}/bp_target_file
${vendor_code_dir}/device/xiaomi/suiren/images/copy-files-from-bp-target-files.sh ${targetfiles_dir}/bp_target_file ${targetfiles_dir}/flash_tgz/images/
cp ${targetfiles_dir}/super.img ${targetfiles_dir}/flash_tgz/images/
unzip ${targetfiles_dir}/out.zip -d ${targetfiles_dir}/out_zip_tmp/
cp -rf ${targetfiles_dir}/out_zip_tmp/{boot.img,init_boot.img,recovery.img,system_other.img,userdata.img,cust.img,vbmeta.img,vendor_boot.img,dtbo.img,vbmeta_system.img,vbmeta_vendor.img,exaid.img,countrycode.img} ${targetfiles_dir}/flash_tgz/images/ || true
unzip ${targetfiles_dir}/merged-target_files.zip RADIO/abl.elf -d ${targetfiles_dir}/out_zip_tmp/
cp -rf ${targetfiles_dir}/out_zip_tmp/RADIO/abl.elf ${targetfiles_dir}/flash_tgz/images/
# flash_gen_crc_list.py 是python2写的,使用python3执行时需要修改一些地方
python ${targetfiles_dir}/flash_tgz/flash_gen_crc_list.py
# ${targetfiles_dir}/flash_tgz/ 目录下的文件就是对应的线刷包3、XCD 的source lunch方式对应选项
# 主线使用 cn,E2/E3/E4/E4U1/E4U2使用 native
buildRegion="cn"
# buildRegion="native"
#SSI侧编译 - system 编译
source build/envsetup.sh
lunch missi_auto_${buildRegion}_only64-userdebug
make target-files-package
#product编译
source build/envsetup.sh
lunch miproduct_suiren_${buildRegion}-userdebug
make target-files-package
# Vendor侧编译 - vendor 编译
source build/envsetup.sh
lunch mivendor_auto8650_${buildRegion}-userdebug
make target-files-package
# odm编译需求先编译kernel:
source build/envsetup.sh
lunch miodm_suiren_${buildRegion}-userdebug
RECOMPILE_KERNEL=1 LTO=thin ./kernel_platform/build/android/prepare_vendor.sh
source build/envsetup.sh
lunch miodm_suiren_${buildRegion}-userdebug
make target-files-package4、BP(modem)编译命令说明:
cd xxx(本地下载的bp代码路径)
bash ./vendor/qcom/fusion/fusion_tools.sh
cd vendor/qcom/non-hlos-sm8650
bash ./n801_build_all.sh5、昆仑的编译说明:
五、板子升级
1、MCU升级(目前mcu烧录版本还没有dailybuild,可以找张敏贤/范林江 要最新的临时版本文件),需要mcu烧录器(miniwiggle)
2、android侧升级
A、使用corgi平台上在线刷机工具(factory版本不支持在线edl刷机):
点击在线刷机按钮


【备注】:Ubuntu刷机问题解决文档: EDL刷机指导
B、本地刷机(本地环境有adb 和 fastboot工具):
adb reboot bootloader
# windows环境:flash_all.bat
# Ubuntu环境:flash_all.sh没有编译BP的Image使用这种方式快速刷机:
- 需要先EDL刷入基础包(手机那边提供的可以运行完整系统的即可)
- 然后增量刷入我们自己的super
fastboot flash super super.img && fastboot flash vbmeta vbmeta.img && fastboot flash vbmeta_system vbmeta_system.img && fastboot flash boot boot.img && fastboot reboot六、临时特殊流程
临时Patch合入
http://gerrit.auto.mioffice.cn/c/cockpit/core/platform/frameworks/base/+/66304
待WiFi和Perf问题解决之后不需要再引用这个Patch @常志波 @李伟
启动权限配置
adb shell setprop persist.sys.uncheck_privapp_permission true
adb启动
adb remount
# 需要umount -l /system/app (路径是你想要替换包的路径,只支持两个层级)之后再push📌 上面命令可能会报错,需要重启xcd, 重新remount 重新执行上面的命令。
或者push到/product/pangu/system/app下使用
七、Xcd ROM平台版本权限申请
1、xcd版本的dailybuild版本在ROM平台下载:https://preview.admin.iccc.mioffice.cn/rom/#/rom/versionInfo
如果是查看对应的分支版本,请根据 车型、版本类型 查询

2、ROM平台产品版本权限申请链接:
