RK3399 HDC适配
以Firefly的RK系列為例,適配方法如下步驟。
本方法已驗證適配以下Firefly產品,在3.1release和3.2release驗證功能正常。
- AIO-3399J,芯片為RK3399
1. 準備基礎環境
從Firefly官網下載對應AIO-3399J buildroot的驅動代碼
驅動下載鏈接:https://wiki.t-firefly.com/zh_CN/AIO-3399J/buildroot_compile.html
2. 修改內核配置文件
由于在firefly-rk3399-buildroot.mk中配置RK_KERNEL_DEFCONFIG=firefly_linux_defconfig,所以在kernel\arch\arm64\configs\firefly_linux_defconfig中增加內核配置。
CONFIG_USB_CHIPIDEA=y CONFIG_USB_CHIPIDEA_OF=y CONFIG_USB_CHIPIDEA_UDC=y CONFIG_USB_CHIPIDEA_HOST=y3. 修改dr_mode模式
在kernel\arch\arm64\boot\dts\rockchip\rk3399-firefly-aio.dts中把dr_mode = "host"修改為dr_mode = "peripheral",如下
usbdrd_dwc3_0 {dr_mode = "peripheral"; };步驟2,3完成后重新用./build.sh kernel編譯kernel
4. 修改init.rk3568.usb.cfg文件
device\board\hihope\rk3568\init.rk3568.usb.cfg文件如下
1 "jobs" : [{2 "name" : "boot",3 "cmds" : [4 "mkdir /dev/usb-ffs 0770 shell shell",5 "mkdir /dev/usb-ffs/hdc 0770 shell shell",6 "mount configfs none /config",7 "mkdir /config/usb_gadget/g1 0770 shell shell",8 "write /config/usb_gadget/g1/idVendor 0x2207",9 "write /config/usb_gadget/g1/idProduct 0x0018",10 "write /config/usb_gadget/g1/os_desc/use 1",11 "write /config/usb_gadget/g1/bcdDevice 0x0223",12 "write /config/usb_gadget/g1/bcdUSB 0x0200",13 "mkdir /config/usb_gadget/g1/strings/0x409 0770",14 "copy /sys/block/mmcblk0/device/cid /config/usb_gadget/g1/strings/0x409/serialnumber",15 "write /config/usb_gadget/g1/strings/0x409/manufacturer Rockchip",16 "write /config/usb_gadget/g1/strings/0x409/product \"HDC Device\"",17 "mkdir /config/usb_gadget/g1/functions/ffs.hdc",18 "mkdir /config/usb_gadget/g1/configs/b.1 0770 shell shell",19 "mkdir /config/usb_gadget/g1/configs/b.1/strings/0x409 0770 shell shell",20 "write /config/usb_gadget/g1/os_desc/b_vendor_code 0x1",21 "write /config/usb_gadget/g1/os_desc/qw_sign MSFT100",22 "write /config/usb_gadget/g1/configs/b.1/MaxPower 500",23 "symlink /config/usb_gadget/g1/configs/b.1 /config/usb_gadget/g1/os_desc/b.1",24 "mount functionfs hdc /dev/usb-ffs/hdc uid=2000,gid=2000",25 "setparam sys.usb.configfs 1",26 "setparam sys.usb.controller fcc00000.dwc3"27 ]-
修改第8、9行中的idVendor、idProduct值,這兩個值是在廠家驅動寫入的,可以在Ubuntu環境下輸入lsusb讀取這2個值;
插入AIO-3399J單板,讀取如下
hengyi@hengyi-virtual-machine:~$ lsusb Bus 001 Device 003: ID 2207:5000 // 此處2個分別為idVendor和idProduct Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 004: ID 0e0f:0008 VMware, Inc. Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub可以看出dVendor=0x2207、idProduct=0x5000,根據這兩個值進行修改第8、9行值。
備注:lsusb命令的解讀可以參考https://ipcmen.com/lsusb
- 14行要將/sys/block/mmcblk0/device/cid修改為/sys/block/mmcblk2/device/cid,原因如下:
在串口中查詢到cd sys/block中,可以看到block下只有mmcblk2
# ls -l total 0 lrwxrwxrwx 1 root root 0 2017-08-05 17:00 loop0 -> ../devices/virtual/block/loop0 lrwxrwxrwx 1 root root 0 2017-08-05 17:00 loop1 -> ../devices/virtual/block/loop1 lrwxrwxrwx 1 root root 0 2017-08-05 17:00 loop2 -> ../devices/virtual/block/loop2 lrwxrwxrwx 1 root root 0 2017-08-05 17:00 loop3 -> ../devices/virtual/block/loop3 lrwxrwxrwx 1 root root 0 2017-08-05 17:00 loop4 -> ../devices/virtual/block/loop4 lrwxrwxrwx 1 root root 0 2017-08-05 17:00 loop5 -> ../devices/virtual/block/loop5 lrwxrwxrwx 1 root root 0 2017-08-05 17:00 loop6 -> ../devices/virtual/block/loop6 lrwxrwxrwx 1 root root 0 2017-08-05 17:00 loop7 -> ../devices/virtual/block/loop7 lrwxrwxrwx 1 root root 0 2017-08-05 17:00 mmcblk2 -> ../devices/platform/fe330000.sdhci/mmc_host/mmc2/mmc2:0001/block/mmcblk2 lrwxrwxrwx 1 root root 0 2017-08-05 17:00 mmcblk2boot0 -> ../devices/platform/fe330000.sdhci/mmc_host/mmc2/mmc2:0001/block/mmcblk2/mmcblk2boot0 lrwxrwxrwx 1 root root 0 2017-08-05 17:00 mmcblk0boot1 -> ../devices/platform/fe330000.sdhci/mmc_host/mmc2/mmc2:0001/block/mmcblk2/mmcblk2boot1 lrwxrwxrwx 1 root root 0 2017-08-05 17:00 ram0 -> ../devices/virtual/block/ram0 lrwxrwxrwx 1 root root 0 2017-08-05 17:00 zram0 -> ../devices/virtual/block/zram0 #-
15行根據芯片廠家型號填制造商RK3568/RK3399就填Rockchip,Hi3516就填HISILICON
-
26行控制器修改為fe800000.dwc3,原因如:
在驅動代碼中,kernel\linux\linux-5.10\arch\arm64\boot\dts\rockchip\rk3399.dtsi中可以看到如下代碼
usbdrd3_0: usb@fe800000 {compatible = "rockchip,rk3399-dwc3";#address-cells = <2>;#size-cells = <2>;ranges;clocks = <&cru SCLK_USB3OTG0_REF>, <&cru SCLK_USB3OTG0_SUSPEND>,<&cru ACLK_USB3OTG0>, <&cru ACLK_USB3_RKSOC_AXI_PERF>,<&cru ACLK_USB3>, <&cru ACLK_USB3_GRF>;clock-names = "ref_clk", "suspend_clk","bus_clk", "aclk_usb3_rksoc_axi_perf","aclk_usb3", "grf_clk";resets = <&cru SRST_A_USB3_OTG0>;reset-names = "usb3-otg";status = "disabled";usbdrd_dwc3_0: usb@fe800000 {compatible = "snps,dwc3";reg = <0x0 0xfe800000 0x0 0x100000>;interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH 0>;clocks = <&cru SCLK_USB3OTG0_REF>, <&cru ACLK_USB3OTG0>,<&cru SCLK_USB3OTG0_SUSPEND>;clock-names = "ref", "bus_early", "suspend";dr_mode = "otg";phys = <&u2phy0_otg>, <&tcphy0_usb3>;phy-names = "usb2-phy", "usb3-phy";phy_type = "utmi_wide";snps,dis_enblslpm_quirk;snps,dis-u2-freeclk-exists-quirk;snps,dis_u2_susphy_quirk;snps,dis-del-phy-power-chg-quirk;snps,dis-tx-ipgap-linecheck-quirk;power-domains = <&power RK3399_PD_USB3>;status = "disabled";};};?
總結
以上是生活随笔為你收集整理的RK3399 HDC适配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 南艺附中 计算机音乐,南京艺术学院201
- 下一篇: 数据挖掘,在商业智能BI领域的运用