==============================以下修改已在开发板中验证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