MS11编译刷机说明

一、分支说明

1.1 开发分支

研发人员工作的开发分支,用于开发新功能,解决BUG等等。

branch: dev

manifest: s-watt-dev.xml

1.2 发布分支

发布分支是为了某一次软件发布特意从dev分支拉出来的,针对这一次软件发布的bugfix或者功能完善在这个分支上直接修改提交。

1.2.1 版本E2

branch: release

manifest: s-watt-release-e2-1.1.0.xml

release e2分支信息

1.3 其他分支

待补充。

二、代码下载

参考8295 Xiaomi开发环境配置指导

2.1 安装依赖工具

sudo apt install git curl python

2.2 安装repo

mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod +x ~/bin/repo
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
source ~/.bashrc

2.3 配置Gerrit

2.3.1 配置git

git config --global user.email xxx@xiaomi.com
git config --global user.name xxx

上面命令中的xxx请用邮箱前缀代替。

2.3.2 生成本地Key

一路回车,不需要输入。

ssh-keygen -t rsa -C "userEmail"

如果rsa 显示证书验证失败,需要配置成ed25519 key 类型。

ssh-keygen -t ed25519 -C "userEmail"

执行成功会在$HOME目录下生成.ssh目录,里面有公钥文件id_rsa.pub或者id_ed25519.pub

2.3.3 导入公钥

用浏览器打开gerrit.auto.mioffice.cn,首次打开时请正确填写username(邮箱前缀)。然后进入http://gerrit.auto.mioffice.cn/settings/#SSHKeys,把上面生成的公钥文本输入进去:

点击ADD NEW SSH KEY导入公钥,然后测试gerrit连接。

ssh -p 29418 $(git config --get user.name)@gerrit.auto.mioffice.cn

看到如下信息,表面公钥导入成功。

  ****    Welcome to Gerrit Code Review    ****
 
  Hi xxxx, you have successfully connected over SSH.
 
  Unfortunately, interactive shells are disabled.
  To clone a hosted Git repository, use:

如出现如下报错,请check gerrit -User Settings- Username 项 是否和 git config 中的一致

ssh -p 29418 $(git config --get user.name)@gerrit.auto.mioffice.cn
xxx@gerrit.auto.mioffice.cn: Permission denied (publickey).

2.4 下载代码

下面是代码下载的方法,其中高亮的是branch(-b)和manifest(-m),请根据实际需要做修改。

repo init -u ssh://$(git config --get user.name)@slave.auto.mioffice.cn:29418/platform/manifest.git -b dev -m s-watt-dev.xml --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
 
repo sync -c -j2

如果代码下载遇到如下的错误,可能是没有权限导致,请联系王乐飞(wanglefei1@xiaomi.com)开通权限。

Downloading manifest from ssh://xxx@gerrit.auto.mioffice.cn:29418/platform/manifest.git
fatal: Project not found: platform/manifest
fatal: Could not read from remote repository.
 
Please make sure you have the correct access rights
and the repository exists.
manifests: sleeping 4.0 seconds before retrying
fatal: Project not found: platform/manifest
fatal: Could not read from remote repository.
 
Please make sure you have the correct access rights
and the repository exists.
fatal: cannot obtain manifest ssh://xxx@gerrit.auto.mioffice.cn:29418/platform/manifest.git

三、编译环境准备

3.1 安装docker

为了简化环境配置,同时避免由环境差异带来的问题,我们使用了docker来编译,SCM提供了统一的docker镜像。在Ubuntu或者Deepin Linux使用下面的方法安装docker。

sudo apt install docker.io

其他系统的安装方法需要自行上网查找。

3.2 下载docker镜像

sudo docker pull micr.cloud.mioffice.cn/micar-build-ci/8295_ubuntu1604:latest

刷机

docker环境中,sudo密码: buildmicar。

四、编译方法

4.1 进入docker环境

源码根目录下有脚本:docker_run.sh,直接在源码根目录执行脚本sudo docker_run.sh

chengtao@chengtao-PC:/media/chengtao/code/ms11_es2_06625$ sudo ./docker_run.sh
请输入密码:
验证成功
code dir not specified, set current dir as code dir.
Code dir is /media/chengtao/code/ms11_es2_06625
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
 
[buildmc@ubuntu-16.04:~] $

dock_run.sh 也可以指定源码目录,在-d 后面指定源码目录:

sudo docker_run.sh -d SRCDIR

执行成功后,进入了docker的命令行,在命令行执行:cd workspace进入源码目录。

4.2 编译

源码根目录下提供快速编译脚本mk.sh,如下:

📷 截图:在 [buildmc@ubuntu-16.04:~/workspace]$ 路径下执行 ls 命令后的文件列表,右侧脚本文件 “mk.sh” 被红色框突出显示

可使用mk.sh快速编译各模块,支持的指令如下:

  ./mk.sh all           全部编译
  ./mk.sh android       编译Android
  ./mk.sh qnx           编译QNX
  ./mk.sh boot          编译XBL
  ./mk.sh tz            编译tz
  ./mk.sh sparse        生成分区表、下载配置文件rawprogram、切分sparse格式的镜像
  ./mk.sh qfil          打包镜像,生成使用高通QFIL下载的镜像目录
  ./mk.sh fastflash     打包镜像,生成fastboot下载的镜像目录
  ./mk.sh ota           生成OTA的包,输出为output/usb/soc.zip

4.2.1 全部编译

第一次编译使用./mk.sh all,全部编译后,会在源码根目录下生成两个目录qfildirfastflashdirqfildir中包含了高通QFIL工具刷机使用的镜像和相关文件,fastflashdir中包含fastboot刷机使用的镜像和相关文件。

4.2.2 部分编译

当前支持部分编译androidqnxxbl(boot)tz,但是在编译完成以后,如果需要刷机验证,还需要再执行打包命令,如果是通过fastboot刷机,执行命令./mk.sh fastflash;如果是通过QFIL刷机,执行命令./mk.sh qfil。打包命令执行完成后,最新的镜像就在各自的目录下。

如果修改了分区表,需要执行命令./mk.sh sparse,然后再执行./mk.sh qfil打包,使用QFIL刷机。

其它编译方法详见:MS11源码的多种编译方法

五、刷机方法

📌 Watt release images 包更新说明 (2023/02/28变更)

5.1 Fastboot刷机

📌

  • 新设备第一次需要用PCAT或edl来刷机。
  • 如果分区有改变,需要用edl或PCAT来烧录provision并初始化分区。

编译成功后,会生成fastboot刷机目录fastflashdir

此目录中包含一个flashfast.sh刷机脚本,支持的指令如下:

cd fastflashdir
./flashfast.sh all    //全刷
./flashfast.sh android  //刷写android镜像
./flashfast.sh qnx   //刷写qnx镜像
./flashfast.sh tz    //刷写 tz镜像
./flashfast.sh boot  //刷写 boot

首先在QNX的命令行下面输入命令:reset -f或者在上电启动过程中在串口控制台按向下的方向键,MS11进入fastboot模式后,执行目录下的flashfast.sh脚本来刷机。

5.2 QFIL刷机

编译成功后,会生成QFIL刷机目录qfildir,里面包含QFIL刷机需要的所有镜像和配置文件。QFIL刷机的时候选择rawprogram_allsplit.xml patch_all.xml文件。详细刷机方法见文档MS11 QFIL下载(checksparse切分包)

5.3 PCAT刷机(推荐)

QFIL已经EOL,高通用新的刷机工具PCAT来代替QFIL, 当前两个工具是兼容的,推荐大家逐步迁移到新的工具上来。详细刷机方法参见文档~~用Qualcomm新工具PCAT刷机(代替QFIL)。~~双UFS系统操作刷机手册(PCAT版)

5.4 双UFS刷机指南

请参考文档:双UFS系统操作刷机手册(PCAT版)

5.5 小米汽车刷机鉴权工具一键刷机

2023年6月25号之后请大家优先使用小米汽车刷机鉴权工具来刷机,该工具支持一键刷机,可避免因错误配置刷机工具引发的问题小米汽车PC刷机鉴权工具 - 使用说明

小米汽车PC刷机鉴权工具 - 使用说明


吐槽在这里添加评论

📌 对于编译脚本、代码环境,大家觉得什么地方难用或者有什么改进的想法,可以发评论。我们会酌情改进,如果不能改进的,会在下面的答疑部分做解释。

  • QFIL包太大,刷机慢。
  • 编译时对源码进行覆盖,git status每次都能看到一批文件被修改。
  • 修改源码与原来git仓库分离,难于管理。
  • 小米汽车刷机鉴权工具登录失败!当前PC安装的OpenSSL版本与工具不匹配 当前工具支持的版本:OpenSSL 1.1.1d 10 Sep 2019。登陆环境是Ubuntu22.04+OpenSSL 3.0.2,一定要安装指定版本的OpenSSL吗。

答疑

📌