本文主要记录项目开发过程中更换新的5G模组SRM825的调试过程。其主要包括:添加模组驱动、配置模组库文件、修改权限等
1、添加模组相关驱动:
cpp
路径:kernel/drivers/pcie_mhi
2、添加对应的RIL库:
cpp
vendor/rockchip/common/phone/SRM825NCN-4XX
在mk文件中添加配置:
cpp
vendor/rockchip/common/phone/phone.mk
ifeq ($(strip $(PRODUCT_MODEM)), SRM825NCN)
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/SRM825NCN-4XX/libmeig-ril_tianmi.so:vendor/lib64/hw/libreference-ril.so \
$(LOCAL_PATH)/SRM825NCN-4XX/chat:system/bin/chat \
$(LOCAL_PATH)/SRM825NCN-4XX/ip-up:system/etc/ppp/ip-up \
$(LOCAL_PATH)/SRM825NCN-4XX/ip-down:system/etc/ppp/ip-down \
$(LOCAL_PATH)/SRM825NCN-4XX/libril_hal15.so:/vendor/lib64/libril.so \
$(LOCAL_PATH)/SRM825NCN-4XX/rild.rc:/vendor/etc/init/rild.rc \
$(LOCAL_PATH)/SRM825NCN-4XX/rild:/vendor/bin/hw/rild
endif
3、修改rild权限:
cpp
hardware/ril/rild/rild.rc
diff --git a/rild/rild.rc b/rild/rild.rc
index f6beb54..3cc19fc 100644
--- a/rild/rild.rc
+++ b/rild/rild.rc
@@ -1,5 +1,5 @@
service vendor.ril-daemon /vendor/bin/hw/rild
class main
- user radio
+ user root
group radio cache inet misc audio log readproc wakelock
capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW
4、添加属性:
cpp
build/make/tools/buildinfo.sh
diff --git a/tools/buildinfo.sh b/tools/buildinfo.sh
index 96c0922854..ff683b095f 100755
--- a/tools/buildinfo.sh
+++ b/tools/buildinfo.sh
@@ -3,6 +3,7 @@
echo "# begin build properties"
echo "# autogenerated by buildinfo.sh"
+echo "persist.ril.use.oldgobi=true"
echo "ro.product.manufacturer=temi"
echo "ro.product.brand=temi-V3"
echo "ro.product.model=rk3399-Android11-temiV3"
调试过程中遇到的问题:
1、PCIE link失败
查看模组供电正常。尝试调整模组检测的时延:
cpp
kernel/drivers/pci/controller/pcie-rockchip-host.c
diff --git a/drivers/pci/controller/pcie-rockchip-host.c b/drivers/pci/controller/pcie-rockchip-host.c
index 41a86516c3e9..64ed71d18637 100644
--- a/drivers/pci/controller/pcie-rockchip-host.c
+++ b/drivers/pci/controller/pcie-rockchip-host.c
@@ -339,7 +339,7 @@ static int rockchip_pcie_host_init_port(struct rockchip_pcie *rockchip)
struct device *dev = rockchip->dev;
int err, i = MAX_LANE_NUM;
u32 status;
- int timeouts = 2000;
+ int timeouts = 10000;
gpiod_set_value_cansleep(rockchip->ep_gpio, 0);
err = rockchip_pcie_init_port(rockchip);
调整时延后,依然没有检测是模组设备。和模组厂家沟通,应该是模组没有刷版本,没有做PCIE的适配。交由模组厂家解决后,模组成功识别。这里要注意,使用的是PCIE接口还是USB接口,模组要刷对应的固件才能正常使用
2、测试发现模组只有4G信号
adb logcat -b radio -v time抓取radio日志分析,发现有这样的log:
cpp
01-16 14:59:14.915 D/RIL-AT ( 403): AT> AT^HCSQ?
01-16 14:59:14.915 D/RIL-CM ( 403): [01-16_06:59:14:915][meig_cm] current is pcie
01-16 14:59:14.915 D/RILJ ( 833): [0027]> BASEBAND_VERSION [PHONE0]
01-16 14:59:14.915 D/RIL-CM ( 403): [01-16_06:59:14:916][meig_cm] netcard driver = pcie_mhi, driver version = V1.3.4
01-16 14:59:14.916 D/RILJ ( 833): [0021]< OPERATOR {CHINA MOBILE, CMCC, 46000} [PHONE0]
01-16 14:59:14.916 D/RIL-CM ( 403): [01-16_06:59:14:916][meig_cm] Found Qmi Channel
01-16 14:59:14.916 D/RIL-CM ( 403): [01-16_06:59:14:916][meig_cm] main function before run ql_qmap_mode_detect qmap version is:0,qmap mode is:1
01-16 14:59:14.916 D/RIL-CM ( 403): [01-16_06:59:14:916][meig_cm] enter ql_get_drier_rmnet_info
01-16 14:59:14.916 D/RIL-CM ( 403): [01-16_06:59:14:917][meig_cm] usnet_adapter name is:rmnet_mhi0
01-16 14:59:14.916 D/RIL-CM ( 403): [01-16_06:59:14:917][meig_cm] rmnet_Info rx_urb_size is:15360,qmap_mode is:1,qmap_version is:9,inface id is:4
01-16 14:59:14.917 D/RIL-CM ( 403): [01-16_06:59:14:917][meig_cm] qmap_mode = 1, qmap_version = 9, qmap_size = 15360, muxid = 0x81, qmap_netcard = rmnet_mhi0.1
01-16 14:59:14.917 D/RIL-AT ( 403): AT< ^HCSQ: 0,0,"LTE",59,34,60,234
01-16 14:59:14.918 D/RIL-AT ( 403): AT< OK
01-16 14:59:14.918 D/RIL ( 403): networktype chanege notify to framework
01-16 14:59:14.918 D/RIL-CM ( 403): [01-16_06:59:14:918][meig_cm] after function qmap version is:9,qmap mode is:1
01-16 14:59:14.918 D/RIL-CM ( 403): [01-16_06:59:14:918][meig_cm] old gobi adapter:rmnet_mhi0, muxadapter[0]:rmnet_mhi0
01-16 14:59:14.918 D/RIL-CM ( 403): [01-16_06:59:14:918][meig_cm] qmap_mode=1
01-16 14:59:14.918 D/RIL ( 403): LTE
......
01-16 14:59:14.951 D/RILJ ( 833): [0044]> OPERATOR [PHONE0]
01-16 14:59:14.951 D/RIL-AT ( 403): AT< ^SYSINFOEX:2,3,0,1,0,9,"LTE",72,"TDD LTE"
01-16 14:59:14.951 D/RIL-AT ( 403): AT< OK
从log看确实只有4G信号。和模组厂家沟通说可能是上层锁4G信号了。使用getprop ro.telephony.default_network 查看默认网络,结果显示:33。在 RILConstants.java 中查看
java
frameworks/base/telephony/java/com/android/internal/telephony/RILConstants.java
/** NR 5G, LTE, TD-SCDMA, CDMA, EVDO, GSM and WCDMA */
int NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA = 33;
33是有5G网络信号的。接着分析,替换模组驱动和RIL库,怎么会影响到上层锁4G信号的?换回原来的RIL库,用原来的模组测试,有5G信号,说明是RIL库的问题。联系模组厂家更新RIL库,再次看到radio log
cpp
01-18 09:37:23.835 394 394 D RIL-AT : AT> AT^HCSQ?
01-18 09:37:23.835 1125 1125 D SST : [0] notifyVoiceRegStateRilRadioTechnologyChanged: vrs=1 rat=0
01-18 09:37:23.838 458 880 D TelephonyRegistry: listen oscl: mHasNotifySubscriptionInfoChangedOccurred==false no callback
01-18 09:37:23.839 1125 1125 W CarrierConfigManager: Error getting config for subId -1 ICarrierConfigLoader is null
01-18 09:37:23.842 394 457 D RIL-AT : AT< ^HCSQ: 0,0,"NR5G",65,62,55
01-18 09:37:23.842 394 457 D RIL-AT : AT< OK
01-18 09:37:23.842 394 394 D RIL : RIL_SignalStrength_v10 length is:56
OK,连接的是NR5G,表明有5G信号了。