一、背景
1、操作系统 : Android 11
2、硬件平台:RK3568/RK3588
二、实现步骤
1、DTS支持
因为是使用rk3568 的OTG实现,所以需要配置相关的dts项:
&usbdrd_dwc3 {
dr_mode = "otg";
extcon = <&usb2phy0>;
status = "okay";
};
&usbdrd30 {
status = "okay";
};
其它默认配置即可。
2、内核支持
USB Gadget 支持,重点是webcam
3、配置
修改1、源码: device/rockchip/common/init.rk30board.usb.rc
文件系统位置 /vendor/etc/init/hw/init.rk30board.usb.rc
on property:sys.usb.config=uvc && property:sys.usb.configfs=1
write /config/usb_gadget/g1/idProduct 0x0005
on property:sys.usb.config=uvc,adb && property:sys.usb.configfs=1
write /config/usb_gadget/g1/idProduct 0x0015
修改为:
on property:sys.usb.config=uvc && property:sys.usb.configfs=1
write /config/usb_gadget/g1/os_desc/use 1 增加项
write /config/usb_gadget/g1/idProduct 0x0005
on property:sys.usb.config=uvc,adb && property:sys.usb.configfs=1
write /config/usb_gadget/g1/os_desc/use 1 增加项
write /config/usb_gadget/g1/idProduct 0x0015
修改2:源码:system/core/rootdir/init.usb.configfs.rc
文件系统位置 /system/etc/init/hw/init.usb.configfs.rc
文件末尾增加:
on property:sys.usb.config=uvc && property:sys.usb.configfs=1
write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "uvc"
symlink /config/usb_gadget/g1/functions/uvc.gs6 /config/usb_gadget/g1/configs/b.1/f1
write /config/usb_gadget/g1/UDC ${sys.usb.controller}
setprop sys.usb.state ${sys.usb.config}
on property:sys.usb.config=uvc,adb && property:sys.usb.configfs=1
start adbd
on property:sys.usb.ffs.ready=1 && property:sys.usb.config=uvc,adb && property:sys.usb.configfs=1
write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "uvc_adb"
symlink /config/usb_gadget/g1/functions/uvc.gs6 /config/usb_gadget/g1/configs/b.1/f1
symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2
write /config/usb_gadget/g1/UDC ${sys.usb.controller}
setprop sys.usb.state ${sys.usb.config}
修改3:源码system/core/rootdir/init.usb.rc 文件系统位置/system/etc/init/hw/init.usb.rc
增加如下:
on property:sys.usb.config=uvc && property:sys.usb.configfs=0
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 2207
write /sys/class/android_usb/android0/idProduct 5
write /sys/class/android_usb/android0/functions ${sys.usb.config}
write /sys/class/android_usb/android0/enable 1
setprop sys.usb.state ${sys.usb.config}
on property:sys.usb.config=uvc,adb && property:sys.usb.configfs=0
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 2207
write /sys/class/android_usb/android0/idProduct 15
write /sys/class/android_usb/android0/functions ${sys.usb.config}
write /sys/class/android_usb/android0/enable 1
start adbd
setprop sys.usb.state ${sys.usb.config}
4、配置切换工作模式
在串口使用su进行配置,切换为uvc工作模式,如下:
setprop sys.usb.config none;setprop sys.usb.config uvc
或者
setprop sys.usb.config none;setprop sys.usb.config uvc,adb
5、重新整体编译
./build.sh -UKAup
下载升级固件: update.img
6,测试
下载成功后,运行rk3568,在PC 上的设备管理器可以看到
一个UCV摄像头已经实现 。
7、应用程序uvc_app
app可以通过下载相关的代码进行修改,移植,再次不在描述。