本帖最后由 ZXjsy 于 2025-8-19 16:21 编辑
前言 USB OTG的模式
一般在调试usb的时候,都有一个小常识,就是切换到host模式时,U盘就能正常使用,而切换到device模式时,U盘则不能使用了,而是板子和电脑可以连接adb进行调试,像常用的adb push和adb pull操作。
需求修改 目前的需求是需要增加usb调试功能,开发adb和root权限,以方便调试连接,而这需要涉及到frameworks层和kernel层的修改。修改如下:
1、frameworks层修改 frameworks/base/services/java/com/android/server/usb/UsbDeviceManager.java
- Settings.Global.putInt(mContentResolver, Settings.Global.ADB_ENABLED, mAdbEnabled ? 1 : 0); + Settings.Global.putInt(mContentResolver, Settings.Global.ADB_ENABLED, 1); AI写代码 cpp 运行 device/rockchip/rksdk/init.rc
这里写了一个服务来判断给force_usb_mode节点赋值2
+chmod 0660 /sys/bus/platform/drivers/usb20_otg/force_usb_mode +on property:persist.service.adb.enable=1 + write /sys/bus/platform/drivers/usb20_otg/force_usb_mode 2 + start adbd AI写代码 cpp 运行 这里可以读一下这个节点的值,来判断值是否写成功: cat /sys/bus/platform/drivers/usb20_otg/force_usb_mode force_usb_mode的值如果由1变为2,说明更改已经生效了。 device/rockchip/rk3128/system.prop +persist.service.adb.enable=1 -sys.rkadb.root=1 +sys.rkadb.root=0 -ro.adb.secure =1 +ro.adb.secure =0 AI写代码 cpp 运行 core/main.mk
ifneq (,$(user_variant)) # Target is secure in user builds. - ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1 + ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0 ifeq ($(user_variant),userdebug) # Pick up some extra useful tools @@ -332,12 +332,12 @@ endif # !user_variant ifeq (true,$(strip $(enable_target_debugging))) # Target is more debuggable and adbd is on by default - ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 + ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 persist.service.adb.enable=1 # Include the debugging/testing OTA keys in this build. INCLUDE_TEST_OTA_KEYS := true else # !enable_target_debugging # Target is less debuggable and adbd is off by default - ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0 + ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1 persist.service.adb.enable=1 endif # !enable_target_debugging AI写代码 cpp 运行
system/core/adb/adb.c static void drop_capabilities_bounding_set_if_needed() { } static int should_drop_privileges() { #ifndef ALLOW_ADBD_ROOT - return 1; + return 0; AI写代码 cpp 运行 2、kernel层代码修改 kernelarcharmbootdtsrk3128-xxxxx.dts usb0: usb@10180000 { /*0 - Normal, 1 - Force Host, 2 - Force Device*/ rockchip,usb-mode = <2>; /*usb adb mode*/ }; AI写代码 cpp 运行 将usb adb mode改为从设备模式 完成以上的修改就大功告成了,在调试中可以在串口给节点直接写值来切换相对应的 host和device模式即可。 |