0%

android r recovery适配

遇到的问题

  1. 抓kernel log

    fastboot oem uart-enable,重启后,会吐出kernel log, 否则只有kernel之前的log

    提前设置好启动模式,misc不要清除

  2. 关掉avb校验

    fastboot flash vbmeta --disable-verification

    export ANDROID_PRODUCT_OUT=/home/mi/work_space/miui-r-umi-dev/out/target/product/cmi

    make vbmeta

  3. ninja 编译问题

    make编译完后,再使用ninja编译, 会重新完全编译, 打印下面的log。 后来发现是ninja版本的问题,ninja 需要同源码的prebuilts下的相同,就不会重新编译

    bad deps log signature or version; starting over

  4. hidl 出错

    等待进一步调试,manifest是正常的,需要加log调试

    HidlServiceManagement: Waited one second for android.hardware.keymaster@4.0::IKeymasterDevice/default

    stop hwservicemanager后, 自动重启到recovery

    这个是vdc命令触发的,先关掉reboot_into_recovery

    vdc cryptfs mountFstab /dev/block/bootdevice/by-name/userdata /data

    ​ 调试libhidlbase时, 这个so在system分区,但是动态分区的机型recovery模式下只能挂载只读的system。怎样调试是个问题,可以调换ld.config.text文件中lib库的加载顺序,先创建一个虚拟的文件夹,这个文件夹只在recovery启动后启动特别模式后,再装载需要调试的lib库。

    1
    2
    3
    4
    namespace.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问题, 这个还需要进一步分析。

  5. 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
  6. 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