在基于瑞芯微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

猜你喜欢

转载自blog.csdn.net/csudxl801106/article/details/128253147