遇到的问题
抓kernel log
fastboot oem uart-enable,重启后,会吐出kernel log, 否则只有kernel之前的log
提前设置好启动模式,misc不要清除
关掉avb校验
fastboot flash vbmeta --disable-verificationexport ANDROID_PRODUCT_OUT=/home/mi/work_space/miui-r-umi-dev/out/target/product/cmimake vbmetaninja 编译问题
make编译完后,再使用ninja编译, 会重新完全编译, 打印下面的log。 后来发现是ninja版本的问题,ninja 需要同源码的prebuilts下的相同,就不会重新编译
bad deps log signature or version; starting over
hidl 出错
等待进一步调试,manifest是正常的,需要加log调试
HidlServiceManagement: Waited one second for android.hardware.keymaster@4.0::IKeymasterDevice/default
stop hwservicemanager后, 自动重启到recovery
这个是vdc命令触发的,先关掉
reboot_into_recoveryvdc cryptfs mountFstab /dev/block/bootdevice/by-name/userdata /data 调试libhidlbase时, 这个so在system分区,但是动态分区的机型recovery模式下只能挂载只读的system。怎样调试是个问题,可以调换ld.config.text文件中lib库的加载顺序,先创建一个虚拟的文件夹,这个文件夹只在recovery启动后启动特别模式后,再装载需要调试的lib库。
1
2
3
4namespace.default.search.paths = /system_lib
namespace.default.search.paths += /system_root/system/${LIB}
namespace.default.search.paths += /system_root/system/${LIB}/bootstrap
namespace.default.search.paths += /system/${LIB}不这样处理,如果直接替换recovery的, recovery会无法启动
从log上看,manifest中定义的keymaster组件是已经找到了, 为什么启动不了呢, 原来是对应的hidl的service的rc没有在
mount_all时加载, androidr上修改了mount_all的流程,不再主动加载挂载分区的rc。还有一个问题是recovery早期阶段, 创建dm设备时出现device busy问题, 这个还需要进一步分析。
ota适配
1
./ota_from_target_files --no_signing -s ~/work_space/miui-r-umi-dev/vendor/qcom/opensource/recovery-ext/tools/releasetools.py --extracted_input_target_files ~/Downloads/cmi-target_files-0.0.12-11.0_e9b5e7be6c ~/Downloads/cmi-target_files-0.0.12-11.0_e9b5e7be6c.zip ota_test.zip
ufs分区节点没出来
1
2
3
4
5没有dev/block/platform节点, 初步判断原因为ufs_ice没找到 platform节点未生成
Copying target dtb/dtbo files to prebuilt
与本地dtb编译有关, 将kernel代码删除, 重新sync
cp: cannot stat '/home/mi/work_space/miui-r-umi-dev/out/target/product/cmi/obj/kernel/msm-4.19/arch/arm64/boot/dts/vendor/qcom/*.dtb': No such file or directory