常用命令汇总

watt

1.1 刷机

1.1.1 EDL 方式

EDL 下载:EDL工具版本管理

1.1.1.1 没有金手指进入EDL的方法

方法一:DCD 的 B 样可以通过 Type-C 进入 QNX 的串口控制台,在串口控制台上输入命令 reset -f,控制机器进入 fastboot 模式,然后擦除所有 xbl 再重启就自动进入 EDL 模式了。

fastboot erase xbl_a & fastboot erase xbl_b & fastboot erase xbl_bkup_a & fastboot erase xbl_bkup_b & fastboot reboot

方法二:QNX 下使用 dd 命令覆盖 xbl 分区,重启就可以进入 EDL 模式。

dd if=/dev/zero of=/dev/disk/xbl_a
dd if=/dev/zero of=/dev/disk/xbl_b
dd if=/dev/zero of=/dev/disk/xbl_bkup_a
dd if=/dev/zero of=/dev/disk/xbl_bkup_b
reset

1.1.1.2 双 UFS 版本

重启,进入 EDL 模式,做 UFS 的 provision (只需做一次)。同时会自动走下面的 flash
./edl.sh provision

./edl.sh -p
 
重启,edl 刷机所有 images。上面 provision 过可以跳过这步
./edl.sh flash

./edl.sh -f

1.1.1.3 单 UFS 版本

// 重启进入 EDL 刷机模式
edl --slot=0 provision provision_micron_3.1.xml (只需刷一次)
edl --slot=0 flash_xml rawprogram_WIPE_PARTITIONS_all.xml,patch_all.xml
edl --slot=0 flash_xml rawprogram_allsplit.xml,patch_all.xml

1.1.2 fastboot 方式

(1)输入以下命令进入 qnx shell:

adb shell busybox telnet 172.16.199.33

用户名输入 root

(2)在 qnx shell 中执行 reset -f 进入 Qualcomm fastboot 模式

(3)执行刷机脚本

1.1.2.1 双 UFS 版本

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

1.1.2.2 单 UFS 版本

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

1.2 代码下载

1.2.1 主分支

repo init -u ssh://$(git config --get user.name)@gerrit.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 -j16

1.2.2 E3 release 分支

repo init -u ssh://$(git config --get user.name)@gerrit.auto.mioffice.cn:29418/platform/manifest.git -b release -m s-watt-release-e3-1.0.0.xml --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo

1.2.3 E4 release 分支

repo init -u ssh://$(git config --get user.name)@gerrit.auto.mioffice.cn:29418/platform/manifest.git -b release -m s-watt-release-e4-1.0.0.xml --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo

1.3 编译

1.3.1 整体编译

源码根目录下提供快速编译脚本 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

1.3.2 编译 Android

1.3.2.1 主分支

cd lagvm/LINUX/android
source build/envsetup.sh
lunch watt-userdebug
make -j16 2>&1

1.3.2.2 E3 分支

./cpdesayBU_qnx.sh
rsync -a -I --exclude=.git desay/xiaomi/ms11/android/.overlay/ ./
cd lagvm/LINUX/android
source build/envsetup.sh
lunch watt-userdebug
make -j16 2>&1

1.4 恢复出厂设置

1.4.1 回到开机引导

以下命令可以返回到开机引导,但不会清除已连接的 WiFi 和登录的帐号,前提保证帐号登录:

adb shell pm clear com.android.systemui
adb root
adb shell pkill -9 systemui
adb shell settings put global device_provisioned 0
adb shell settings put secure user_setup_complete 0
adb shell pm enable --user 10 "com.android.car.provision/com.android.car.provision.activity.MiCarProvision"
adb shell am start -n com.android.car.provision/.activity.MiCarProvision

1.4.2 adb 发广播方式

adb root
adb shell am broadcast -a android.intent.action.FACTORY_RESET -e android.intent.extra.REASON MasterClearConfirm --ez android.intent.extra.WIPE_EXTERNAL_STORAGE true --ez com.android.internal.intent.extra.WIPE_ESIMS true android

1.4.3 fastboot 方式

到 8295 的 ROM 包下执行:

# 进入 Android fastboot 模式
adb reboot fastboot
fastboot erase metadata
fastboot flash metadata ufs1/metadata.img
fastboot erase userdata
fastboot flash userdata ufs1/userdata.img
fastboot reboot

1.5 OneTrack 埋点测试

在 OneTrack 平台上打开在线测试,输入如下命令:

adb shell setprop debug.onetrack.log [packagename]
adb shell setprop debug.onetrack.upload [packagename]
adb root
adb shell am force-stop com.mi.car.mcs
# 重启您的进程

Logcat 过滤“OneTrack”,可以查看本地日志,如:

D OneTrack-Car-EventManager: addEvent: poi_search, data:{"H":{"event":"poi_search","vid":"LGQ4567894a2de666","oaid":"4c59c105149a41f2","instance_id":"ea901e44-fb3c-4634-a4d9-71054907c3a6","sid":10,"mfrs":"Xiaomi","model":"Xiaomi SU7","device":"watt","platform":"Car","micar_ver":"24.03.27","build":"","os_ver":"12","app_ver":"1.2.2","e_ts":1712816545540,"tz":"GMT+08:00","net":"WIFI","region":"CN","sdk_ver":"1.0.2","app_id":"31000401425","pkg":"com.mi.car.map","sdk_mode":"app","ot_first_day":false,"ot_privacy_policy":"exprience_open","market_name":""},"B":{"autosdk_ver":"android.9.650.155.0.324","city":110000,"map_account_login_status":false,"search_type":6,"request_id":4,"source":1,"province":"北京市","map_city":"北京市","track_id":"a54a0723-93d0-4803-8adb-29231a72bc16","subEvent":"search_begin"}}

随便触发一个埋点就可以查到 oaid 或 instanceId,将其填到在线测试平台上并开始接收(建议填 instanceId),就可以在线测试了。

elish

2.1 代码下载 & 整编刷机

# 创建目录层级
 elish-dev
   - qssi
   - vendor
 
# 下载代码
cd qssi
repo init -u ssh://$(git config --get user.name)@gerrit.auto.mioffice.cn:29418/platform/manifest.git -b dev -m s-elish-dev.xml --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
repo sync -c -j16
 
# 编译
export BUILD_TARGET_PRODUCT=elish
source build/envsetup.sh
lunch qssi-userdebug
make target-files-package -j16
 
# 下载代码
cd vendor
repo init -u ssh://$(git config --get user.name)@gerrit.auto.mioffice.cn:29418/platform/manifest.git -b dev -m bsp-r-elish-dev.xml --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
repo sync -c -j16
 
# 编译
source build/envsetup.sh
lunch elish-userdebug
make target-files-package -j16
 
# 合并super.img
./build.sh elish ./qssi ./vendor
 
# 刷机
cd dist/images
fastboot flash super super.img && fastboot flash vbmeta vbmeta.img && fastboot flash vbmeta_system vbmeta_system.img && fastboot flash boot boot.img && fastboot reboot

2.2 编译 Android

export BUILD_TARGET_PRODUCT=elish
source build/envsetup.sh
lunch qssi-userdebug
make xxx

QNX

进入 QNX 环境:

minicom -D /dev/ttyUSB0

3.1 进入 Android 内核

dtach -a /tmp/android

Ctrl + Z 退出

3.2 切换默认启动 UFS 分区

swdl_utils -d 0 // from b to a
swdl_utils -d 1 // from a to b

3.3 修改时间

# date 月日时分年
date 0821205023

把电脑时间同步到车机:

# 先进入串口,minicom 或者 putty,执行以下命令进入 Android
dtach -a /tmp/android
# 开启 USB 调试
su
setprop persist.sys.usb.mode peripheral
# 退出 minicom 或者 putty
adb root;date "+%m%d%H%M%Y.%S" | xargs adb shell date

3.4 生成 Android 和内核日志

# 在当前目录下生成
pstore

3.5 导出文件

sz

3.6 升级 DSP 固件

需要进入 QNX,再输入下面的命令:

低配:

# 配置成低配
dd if=/dev/zero of=/dev/disk/diagnosis_data bs=4k seek=256 count=4 conv=sync;  echo 'x7523:json:{"data":[5,117,35,5,0,255,254,1,9]}' >> /tmp/pps/spi_service/tx \r
# 低配升级,需要等待一会儿
dsp_firmware_upgrade -f /emmc/svp/etc/adi_dsp_ldr/ADSP-21565.ldr

高配:

# 配置成高配
dd if=/dev/zero of=/dev/disk/diagnosis_data bs=4k seek=256  count=4 conv=sync;  echo 'x7523:json:{"data":[5,117,35,5,0,255,254,1,8]}' >> /tmp/pps/spi_service/tx \r
# 高配升级,需要等待一会儿
dsp_firmware_upgrade -f /emmc/svp/etc/adi_dsp_ldr/EXT.AMP/ADSP-21565.ldr

然后重启。

XCD

4.1 开启调试

adb shell setprop persist.debug.dalvik.vm.jdwp.enabled 1
adb reboot

4.2 push 失败

遇到报错:adb: error: failed to copy ‘xxx.apk’ to ‘/system/priv-app/xxx/xxx.apk’: remote couldn’t create file: Read-only file system

执行下面命令即可:

adb shell umount -l /system/priv-app

4.3 关闭心跳

如果是在 adb 环境:

adb root
adb shell setprop persist.soc_heartbeat_switch false
adb reboot

如果已经进入 fastboot mcu shell 命令,minicom 进入串口,串口线连接白口执行命令:

pm.soc.fastboot.ctrl 1

然后串口接回黑口,进行刷机。

Repo

repo sync 代码时发现提示很多仓库莫名其妙地有修改,可以使用如下命令解决:

repo forall -v -c 'git clean -xdf; git reset --hard HEAD'

信号

6.1 开启日志

adb shell setprop log.tag.MiddlewareCarservice V
adb shell settings put global vehicle_debug_enable 1

6.2 读/写信号

# 读信号
adb shell lshal debug android.hardware.automotive.vehicle@2.0::IVehicle --get 0xxxxxxxxx
# 写信号
adb root
# -i 代表 int, -f 代表 float, -s 代表 string
# -a 代表 area,不指定默认是 0
# --stat 0 代表 AVALIABLE; 1 代表 UNAVALIABLE,不指定默认是 0
adb shell lshal debug android.hardware.automotive.vehicle@2.0::IVehicle --mock_from_car 0xxxxxxxxx -i 1
# 上下行模拟数组信号
adb shell lshal debug android.hardware.automotive.vehicle@2.0::IVehicle [--command] [-type] [value] [-type] [value]...
# 例子:
adb shell lshal debug android.hardware.automotive.vehicle@2.0::IVehicle --mock_from_car 0x6141415c -i 1 -i 1

其它

参考