Android 9 (P)在user模式下无法使用fastboot烧录怎么破

   Android 9(P)在user模式下无法使用fastboot烧录怎么破


Android 9 (P)开发适配指南系列博客目录:

Adnroid 9 (P) recovery升级Map of '@/cache/recovery/block.map’failed问题分析指南
Android 9 (P)版本解决VNDK library: XXX’s ABI has EXTENDING CHANGES
Android 9 (P)非SDK API限制调用开发指南
Android 9 (P)适配以太网功能开发指南
Android 9 (P)在user模式下无法使用fastboot烧录怎么破
Android 9 (P)静默安装/卸载App适配终极指南



引言

  吃着火锅唱着歌,进行着Android P(Android 9)的适配,在烧录了Android user版本正式固件以后,为了调试想通过fastboot烧录本地的userdebug版本。可是,可是突然发现fastboot怎么也烧录不了了,烧录不了了。当然不会是fastboot工具坏了,一定是Android版本做了限制。本篇将带领大伙怎么破解。




一.开干

1.1 现象

好吗,老规矩先看现场是什么,如下一直提示fastboot下载失败。当时都要怀疑人生了,想不开都不至于啊。

Z:\ssd\qcom_64\msm8953-9\out\target\product\msm8953_64>paydroidboot.exe flash  vbmeta vbmeta.img
paydroidboot build for xxx Aug 18 2018 09:40:16
target reported max download size of 534773760 bytes
sending 'vbmeta' (4096 bytes)...
OKAY [  0.025s]
writing 'vbmeta'...
FAILED (remote: unknown command)
finished. total time: 0.050s

在这里插入图片描述

1.2 怎么解决

fastboot是用来和Android的bootloader进行相关交互的,无意中看到bootable/bootloader/lk/makefile的脚本中判断了user版本然后添加了对应的宏控制,有戏。修改一番。完美解决。

diff --git a/bootable/bootloader/lk/makefile b/bootable/bootloader/lk/makefile
index f6da064..4766244 100644
--- a/bootable/bootloader/lk/makefile
+++ b/bootable/bootloader/lk/makefile
@@ -60,9 +60,9 @@ ifeq ($(SIGNED_KERNEL),1)
   CFLAGS += -D_SIGNED_KERNEL=1
 endif
 
-ifeq ($(TARGET_BUILD_VARIANT),user)
-  CFLAGS += -DDISABLE_FASTBOOT_CMDS=1
-endif
+#ifeq ($(TARGET_BUILD_VARIANT),user)
+#  CFLAGS += -DDISABLE_FASTBOOT_CMDS=1
+#endif
 
 ifeq ($(APPEND_CMDLINE),1)
   CFLAGS += -D_APPEND_CMDLINE=1

1.3 为什么会这样

可以看到在bootable/bootloader/lk/app/aboot/aboot.c中有使用到了上面的宏,代码如下所示

/* register commands and variables for fastboot */
void aboot_fastboot_register_commands(void)
{
    int i;
    char hw_platform_buf[MAX_RSP_SIZE];

    struct fastboot_cmd_desc cmd_list[] = {
                        /* By default the enabled list is empty. */
                        {"", NULL},
                        /* move commands enclosed within the below ifndef to here
                         * if they need to be enabled in user build.
                         */
#ifndef DISABLE_FASTBOOT_CMDS
                        /* Register the following commands only for non-user builds */
                        {"cfgall", cmd_cfg_partition_get_all},
                        {"flash:", cmd_flash},
                        {"erase:", cmd_erase},
                        /*{"boot", cmd_boot},*/
                        /*{"continue", cmd_continue},*/
                        {"reboot", cmd_reboot},
                        {"reboot-bootloader", cmd_reboot_bootloader},
                        {"oem", cmd_oem},
                    /*  {"oem unlock", cmd_oem_unlock},
                        {"oem unlock-go", cmd_oem_unlock_go},
                        {"oem lock", cmd_oem_lock},
                        {"flashing unlock", cmd_oem_unlock},
                        {"flashing lock", cmd_oem_lock},
                        {"flashing lock_critical", cmd_flashing_lock_critical},
                        {"flashing unlock_critical", cmd_flashing_unlock_critical},
                        {"flashing get_unlock_ability", cmd_flashing_get_unlock_ability},
                                                {"oem device-info", cmd_oem_devinfo},
                        {"preflash", cmd_preflash},
                        {"oem enable-charger-screen", cmd_oem_enable_charger_screen},
                        {"oem disable-charger-screen", cmd_oem_disable_charger_screen},
                        {"oem off-mode-charge", cmd_oem_off_mode_charger},
                        {"oem select-display-panel", cmd_oem_select_display_panel},
                        {"set_active",cmd_set_active},*/
#if UNITTEST_FW_SUPPORT
                        {"oem run-tests", cmd_oem_runtests},
#endif
#endif
                        };

从上代码可以看出,如果定义了DISABLE_FASTBOOT_CMDS那么将导致fastboot flash的命令被禁用,导致fastboot烧录功能失效了。




写在最后

  这里得说一句,Android版本的更新对安全越来越重视了,但是对于开发者来说增加了许多的限制条件,有时候防不胜防啊。希望各位不要中招了。最后希望大家能点赞一个或者拍板一个。

<think>好的,我现在需要解决用户在RK3568 Android11源码编译User版本时默认开启USB调试的问题。首先,我需要确认用户的需求:他们希望在编译User版本时,默认启用USB调试模式,这样设备在出厂后无需手动设置即可通过USB进行调试。 首先,我得回忆一下Android系统中的USB调试相关配置。USB调试通常由系统属性`ro.debuggable`和`persist.sys.usb.config`控制。User版本默认情况下,`ro.debuggable`设为0,而Userdebug或Eng版本可能设为1。此外,`persist.sys.usb.config`可能默认是mtp,需要改成包含adb的配置,比如mtp,adb。 接下来,我需要找到在源码中修改这些属性的位置。常见的做法是修改系统属性文件,比如`system/core/rootdir/init.usb.rc`或者在设备特定的makefile中设置。对于RK3568这样的平台,可能会有设备特定的配置目录,比如`device/rockchip/rk356x`。 可能还需要检查`build/make/core`中的main.mk,确认User版本的编译类型是否覆盖了某些属性。另外,`system.prop`文件也可能包含这些属性的设置,需要检查设备目录下的prop文件。 另一个可能性是修改`default.prop`,但需要注意在编译后是否会被覆盖。此外,SELinux策略可能会影响adb的权限,需要确保相关域有足够的权限。 用户提到的是User版本,所以需要确保修改后的配置不会被编译脚本重置。可能需要检查device.mk或product.mk中的PRODUCT_PROPERTY_OVERRIDES,添加对应的属性覆盖。 步骤大致如下: 1. 找到设备特定的系统属性配置文件,如device.mk,添加ro.debuggable=1和persist.sys.usb.config=mtp,adb。 2. 检查init脚本,确保USB配置正确应用。 3. 处理SELinux策略,允许adbd运行。 4. 重新编译并验证是否生效。 需要注意,User版本通常不允许调试,修改这些可能会影响系统安全性,用户需要自行承担风险。此外,某些系统属性可能被编译系统覆盖,需要确认是否正确覆盖。 最后,测试编译后的镜像,连接设备查看adb devices是否识别,以及ro.debuggable的值是否正确。</think>在RK3568 Android11的User版本中开启USB调试,需通过源码层修改系统属性配置。以下是分步操作指南: --- ### **步骤1:修改系统属性** **核心文件定位**: 在设备树目录中查找`device/rockchip/rk356x/`路径下的`.mk`或`system.prop`文件(具体路径可能因厂商定制略有不同)。 **修改内容**: 添加或覆盖以下属性: ```makefile # 在device.mk或类似文件中添加 PRODUCT_PROPERTY_OVERRIDES += \ ro.debuggable=1 \ persist.sys.usb.config=mtp,adb \ sys.usb.configfs=1 ``` --- ### **步骤2:配置USB初始化脚本** **文件路径**: `system/core/rootdir/etc/init.hardware.rc` 或 `device/rockchip/common/init.connectivity.rc` **修改内容**: 确保USB模式包含`adb`: ```rc on boot setprop persist.sys.usb.config mtp,adb ``` --- ### **步骤3:处理SELinux策略** **文件路径**: `device/rockchip/sepolicy/`目录下的`adbd.te`或`file_contexts` **修改内容**: 确保adbd进程有足够权限: ```te # 允许adbd访问调试属性 allow adbd debug_prop:property_service set; ``` --- ### **步骤4:编译验证** 1. **全量编译**: ```bash source build/envsetup.sh lunch rk3568-user # 选择User版本编译目标 make -j8 ``` 2. **烧录镜像**: 使用`fastboot`或厂商工具烧录生成的固件(如`rockdev/Image-xxx/`目录下的镜像)。 3. **验证ADB**: ```bash adb devices # 应显示设备序列号 adb shell getprop ro.debuggable # 预期输出"1" ``` --- ### **注意事项** 1. **安全性风险**:User版本默认关闭调试权限,强行开启可能导致安全漏洞,仅建议用于开发测试环境。 2. **厂商定制差异**:部分RK3568 SDK可能已封装USB配置逻辑,需检查`BoardConfig.mk`或`vendor/rockchip`目录下的覆盖配置。 3.
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值