在基于瑞芯微rk3568的android12上添加移远4G通信模块EC200A

Posted csudxl801106

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在基于瑞芯微rk3568的android12上添加移远4G通信模块EC200A相关的知识,希望对你有一定的参考价值。

==============================以下修改已在开发板中验证OK====================

【添加前的准备工作】
0.开发平台
  CPU是rk3568,android12系统,北京讯为itop-3568开发板
1.解压开发包
  sudo tar -xvf rk_android12.0_sdk_20220720.tar.gz
2.设置开发包权限
  sudo chmod 777 rk_android12.0_sdk
3.设置显示屏类型
  rk_android12.0_sdk/kernel-4.19/arch/arm64/boot/dts/rockchip/topeet_screen_choose.dtsi 选择
  define LCD_TYPE_LVDS_10_1_1024*600
4.进入开发包目录
  cd rk_android12.0_sdk
5.配置编译环境
  source javaenv.sh
  source build/envsetup.sh
  lunch rk3568_s-userdebug
6.全编译 ./build.sh -AUCKu
  android编译至少需要16GB以上的物理内存,第1次编译完成,需要很长时间(耗时7,8个小时);后面再编译需要的时间会短很多(耗时1,2个小时)。有时编译不通过,仅仅是因为编译过程中多线程编译引起的问题,与工程本身无关,多编译几次试试。
7.确保工程编译通过后,才进行下面的工作

【涉及到的文件】
(1)移远的库文件:libreference-ril.so,拷贝到\\vendor\\rockchip\\common\\phone\\lib,重命名为libreference-ril-ec200a.so
(2)移远的库文件:radio.quectel.module.so,拷贝到\\vendor\\rockchip\\common\\phone\\lib
(3)\\kernel\\drivers\\usb\\serial\\option.c
(4)\\kernel\\drivers\\usb\\serial\\usb_wwan.c
(5)\\device\\rockchip\\common\\BoardConfig.mk
(6)\\vendor\\rockchip\\common\\phone\\phone.mk
(7)\\device\\rockchip\\common\\modules\\4g_modem.mk
(8)\\device\\google\\atv\\overlay\\TvFrameworkOverlay\\res\\values\\config.xml
(9)\\device\\rockchip\\common\\overlay_wifi_only\\frameworks\\base\\core\\res\\res\\values\\config.xml
(10)\\frameworks\\base\\core\\res\\res\\values\\config.xml

【修改步骤】
1.DTS配置,不需要改动
  由于开发板中通信模块的电源脚和复位脚,都是直接接的固定电平,不需要CPU控制,因此这一项不需要改动。
2.串口驱动
(1)文件\\kernel\\drivers\\usb\\serial\\option.c
  在static const struct usb_device_id option_ids[]列表中,把移远通信模块EC200A的厂商ID,设备ID到该列表中,添加如下代码
  USB_DEVICE(0x2C7C, 0x6005) , /* Quectel EC200A  2022.11.18,add */
  在static struct usb_serial_driver option_1port_device结构体中,添加如下代码
  #if 1
     .reset_resume      = usb_wwan_resume,
  #endif
  在static int option_probe()函数中,添加
  #if 1 //2022.11.18,add
  if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C))    
       __u16 idProduct = le16_to_cpu(serial->dev->descriptor.idProduct); 
      //Quectel EC200A's interface 0 can be used as USB Network device (ecm, rndis)
      if (serial->interface->cur_altsetting->desc.bInterfaceClass != 0xFF)
          return -ENODEV;
   
  #endif
  /* Store the device flags so we can use them during attach. */
  usb_set_serial_data(serial, (void *)device_flags);
(2)文件\\kernel\\drivers\\usb\\serial\\usb_wwan.c
  在static struct urb *usb_wwan_setup_urb()函数中,添加如下代码
   if (dir == USB_DIR_OUT)   
      if ((desc->idVendor == cpu_to_le16(0x1286) &&desc->idProduct == cpu_to_le16(0x4e3c)))  
         urb->transfer_flags |= URB_ZERO_PACKET;
      if (desc->idVendor == cpu_to_le16(0x2c7c))         
         urb->transfer_flags |= URB_ZERO_PACKET;            
   
3.添加cdc-wdmo节点,这一个步骤,移远的移植文档也没有说,其实不添加也是可以的。因为EC200A的驱动设备就没有这个cdc-wdm0,只有ttyUSB0-ttyUSB2,这3个串口
  文件\\system\\core\\init\\devices.cpp
  在void DeviceHandler::HandleUevent()函数中,添加如下代码
  #if 1 //add by quectel for mknod /dev/cdc-wdm0  2022.11.21,
 与else if (uevent.subsystem == "usb")是并列的
  else if(uevent.subsystem == "usbmisc" && !uevent.device_name.empty())
          
    devpath = "/dev/" + uevent.device_name;  
 
  #endif 
4.放置移远的库在目录\\vendor\\rockchip\\common\\phone\\lib中
(1)libreference-ril.so,这个库需重命名为libreference-ril-ec200a.so
(2)radio.quectel.module.so,这个库只有android12才需要,android12以前的版本是不需要的
5.修改\\device\\rockchip\\common\\BoardConfig.mk
 设置BOARD_HAVE_DONGLE为true
   BOARD_HAVE_DONGLE ?= true
 设置BOARD_HAS_RK_4G_MODEM为true
   BOARD_HAS_RK_4G_MODEM ?= true
6.修改\\vendor\\rockchip\\common\\phone\\phone.mk
  原来是
    PRODUCT_COPY_FILES += \\
      $(CUR_PATH)/phone/etc/ppp/ip-down:system/etc/ppp/ip-down \\
      $(CUR_PATH)/phone/etc/ppp/ip-up:system/etc/ppp/ip-up \\
      $(CUR_PATH)/phone/etc/ppp/call-pppd:system/etc/ppp/call-pppd \\
      $(CUR_PATH)/phone/etc/operator_table:system/etc/operator_table
  改成 
    PRODUCT_COPY_FILES += \\

      $(CUR_PATH)/phone/etc/ppp/ip-down:system/etc/ppp/ip-down \\
      $(CUR_PATH)/phone/etc/ppp/ip-up:system/etc/ppp/ip-up 
      #$(CUR_PATH)/phone/etc/ppp/call-pppd:system/etc/ppp/call-pppd \\
      #$(CUR_PATH)/phone/etc/operator_table:system/etc/operator_table
7.修改\\device\\rockchip\\common\\modules\\4g_modem.mk
(1)PRODUCT_PACKAGES增加libreference-ril-ec200a
    PRODUCT_PACKAGES += \\
               CarrierDefaultApp \\
               CarrierConfig \\
               rild \\
               librk-ril \\
               libreference-ril-ec200a \\  
               dhcpcd
(2)PRODUCT_COPY_FILES增加EC200A库的拷贝
       PRODUCT_COPY_FILES += vendor/rockchip/common/phone/lib/libreference-ril-ec200a.so:$(TARGET_COPY_OUT_VENDOR)/lib64/libreference-ril-ec200a.so
       PRODUCT_COPY_FILES += vendor/rockchip/common/phone/lib/radio.quectel.module.so:$(TARGET_COPY_OUT_VENDOR)/lib64/hw/radio.quectel.module.so 
(3)PRODUCT_PROPERTY_OVERRIDES 修改vendor.rild.libpath
     64位机:
    vendor.rild.libpath=/vendor/lib64/librk-ril.so  ---> vendor.rild.libpath=/vendor/lib64/libreference-ril-ec200a.so
    vendor.rild.libargs=-d /dev/ttyUSB2

8.修改\\hardware\\ril\\rild\\rild.rc
#service vendor.ril-daemon /vendor/bin/hw/rild  2022.11.24
service ril-daemon /vendor/bin/hw/rild -l /vendor/lib64/libreference-ril-ec200a.so
    #注意这里不能是service vendor.ril-daemon
     class main
     user root
    #注意这里不能是user radio
     group radio cache inet misc audio sdcard_rw log
     capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW

9.使config_mobile_data_capable的值为true。注意这点很重要,以往的参考文件都没有提到,这是咨询了移远的技术工程师才知道的。
    在工程目录下grep config_mobile_data_capable -Irns,搜索出所有含config_mobile_data_capable的地方,把所有能配置config_mobile_data_capable的地方都配置为true。主要有3个地方:
  (1)device/google/atv/overlay/TvFrameworkOverlay/res/values/config.xml:33:    <bool name="config_mobile_data_capable">true</bool>
  (2)device/rockchip/common/overlay_wifi_only/frameworks/base/core/res/res/values/config.xml:25:    <bool name="config_mobile_data_capable">true</bool>
  (3)frameworks/base/core/res/res/values/config.xml:1979:    <bool name="config_mobile_data_capable">true</bool>
10.内核配置Enable CONFIG_USB_SERIAL_OPTION
  Device Drivers-->USB Support-->USB Serial Converter support-->USB driver for GSM and CDMA modems,选中“*”
11.内核配置Enable CONFIG_USB_NET CONFIG_USB_NET_RNDIS_HOST
  Device Drivers-->Network device support-->USB Netwrok Adapters-->Host for RNDIS and ActiveSync devices,选中“*”
12.内核配置Enable CONFIG_PPP_ASYNC CONFIG_PPP_SYNC_TTY CONFIG_PPP_DEFLATE
  Deivec Drivers-->Network device support-->PPP(point-to-point protocol)support,选中“*”

【参考文件】
文件1:
https://blog.csdn.net/longmin96/article/details/122716504?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-5-122716504-blog-122687865.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-5-122716504-blog-122687865.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=6
文件2:
https://blog.csdn.net/weixin_51178981/article/details/124804679
文件3:
Quectel_EC200T_Linux_USB_Driver_User_Guide_V1.0
文件4:
Quectel_Android_RIL_Driver_User_Guide_V2.0

安卓盒子刷机,瑞芯微rk322x的刷机固件哪里下载?

这个机顶盒的驱动和刷机软件都找到了,也下载了很多rk3288a的固件,都报错芯片校验失败!实在是找不到合适的固件!

参考技术A 麒麟RK3399的CPU采用big.LITTLE大小核架构,双Cortex-A72大核+四Cortex-A53小核结构,对整数、浮点、内存等作了大幅优化,在整体性能、功耗及核心面积三个方面都具革命性提升。 麒麟RK3399的GPU采用四核ARM新一代高端图像处理器Mali-T860,集成更多带宽压缩技术:如智能迭加、ASTC、本地像素存储等,还支持更多的图形和计算接口,总体性能比上一代提升45%。

联智通达最新研发的麒麟RK3399开发板,搭建了最新android7.1 系统,4G DDR3内存,32G EMMC 存诸,搭配8.4寸高清IPS屏。RK3399开发板主板尺寸为:155*104mm,设计有非常丰富的接口,板载3路TTL UART,2路USB2.0接口,一路USB3.0接口,WIFI/BT二合一,HDMI OUT 、HDMI INT、Type C、4G、IR、以太网等;可扩展模块包括4G模块、Camera(1300万、500万)等应用类功能模块。

wifi 芯片识别流程

1. 开机对 wifi 模块上电,并自动进行扫描 sdio 操作

2. 系统启动打开 wifi 操作时,分别对系统 sys/bus/sdio(sdio wifi), sys/bus/usb(usb wifi),

sys/bus/pic (pcie wifi )文件系统下的 uevent 进行读取

3. 获取到 wifi 芯片 vid pid 加载相应的 wifi ko 驱动

4. 识别到相应的 wifi 模块后,即可知道相应的 bt 型号,走不同的 bluedroid 协议栈

麒麟RK3399瑞芯微嵌入式开发板wifi 芯片识别流程,联智通达专注于麒麟、瑞芯微、飞思卡尔平台产品的研发,是麒麟、瑞芯微、

以上是关于在基于瑞芯微rk3568的android12上添加移远4G通信模块EC200A的主要内容,如果未能解决你的问题,请参考以下文章

rk3568 | 瑞芯微平台GPIO引脚驱动编写

史上最全! 瑞芯微RK3568核心板评估板资源分享!

测评 | 国产“芯” · 瑞芯微 RK3568 性能解析

瑞芯微RK3568开发:GPIO实践篇

RK3568开发笔记:瑞芯微RK3568芯片介绍,入手开发板的核心板介绍

Camera | 1.Camera基础知识