RK3229_Android9.0_Box 4G模块EC200A调试

0、kernel修改

这部分完全可以参考Linux的移植:

RK3588 EC200A-CN【4G模块】调试_rk ec200a-cn-CSDN博客

1、修改device/rockchip/rk322x

diff --git a/device.mk b/device.mk
index ec6bfaa..e7c32d1 100755
--- a/device.mk
+++ b/device.mk
@@ -105,6 +105,8 @@ endif
 #add Rockchip properties here
 #
 PRODUCT_PROPERTY_OVERRIDES += \
+       vendor.rild.libpath=/vendor/lib/libquectel-ril.so \
+       vendor.rild.libargs=-d /dev/ttyUSB2 \
     wifi.interface=wlan0 \
     ro.audio.monitorOrientation=true \
     vendor.hwc.compose_policy=6 \
@@ -159,3 +161,12 @@ PRODUCT_COPY_FILES += \
 
 PRODUCT_COPY_FILES += \
     frameworks/av/media/libeffects/data/audio_effects.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.xml
+
+PRODUCT_COPY_FILES += \
+       device/rockchip/rk322x/RIL_32bits/chat:system/bin/chat \
+       device/rockchip/rk322x/RIL_32bits/ip-down:system/etc/ppp/ip-down \
+       device/rockchip/rk322x/RIL_32bits/ip-up:system/etc/ppp/ip-up \
+       device/rockchip/rk322x/RIL_32bits/libquectel-ril.so:vendor/lib/libquectel-ril.so
+
+PRODUCT_COPY_FILES += \
+       device/rockchip/rk322x/RIL_32bits/apns-conf.xml:system/etc/apns-conf.xml
diff --git a/rk322x_box/manifest.xml b/rk322x_box/manifest.xml
index dd00d51..df8c03f 100755
--- a/rk322x_box/manifest.xml
+++ b/rk322x_box/manifest.xml
@@ -201,6 +201,24 @@
             <instance>default</instance>
         </interface>
     </hal>
+       <hal format="hidl">
+               <name>android.hardware.radio</name>
+               <transport>hwbinder</transport>
+               <version>1.1</version>
+               <interface>
+               <name>IRadio</name>
+               <instance>slot1</instance>
+               </interface>
+       </hal>
+       <hal format="hidl">
+               <name>android.hardware.radio.deprecated</name>
+               <transport>hwbinder</transport>
+               <version>1.0</version>
+               <interface>
+               <name>IOemHook</name>
+               <instance>slot1</instance>
+               </interface>
+       </hal>
     <sepolicy>
         <version>26.0</version>
     </sepolicy>
diff --git a/rk322x_box/overlay/frameworks/base/core/res/res/values/config.xml b/rk322x_box/overlay/frameworks/base/core/res/res/values/config.xml
index e2d7ab9..e671269 100755
--- a/rk322x_box/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/rk322x_box/overlay/frameworks/base/core/res/res/values/config.xml
@@ -28,6 +28,14 @@
     <!-- the 6th element indicates boot-time dependency-met value. -->
     <string-array translatable="false" name="networkAttributes">
         <item>"wifi,1,1,1,-1,true"</item>
+               <item>"mobile,0,0,0,-1,true"</item>
+               <item>"mobile_mms,2,0,2,60000,true"</item>
+        <item>"mobile_supl,3,0,2,60000,true"</item>
+        <item>"mobile_dun,4,0,2,60000,true"</item>
+        <item>"mobile_hipri,5,0,3,60000,true"</item>
+        <item>"mobile_fota,10,0,2,60000,true"</item>
+        <item>"mobile_ims,11,0,2,60000,true"</item>
+        <item>"mobile_cbs,12,0,2,60000,true"</item>
         <item>"ethernet,9,9,9,-1,true"</item>
     </string-array>
 
diff --git a/rk322x_box/system.prop b/rk322x_box/system.prop
index 385fdfd..80ce58f 100755
--- a/rk322x_box/system.prop
+++ b/rk322x_box/system.prop
@@ -2,13 +2,13 @@
 # system.prop
 #
 
-#rild.libpath=/system/lib/libreference-ril.so
-#rild.libargs=-d /dev/ttyUSB2
+vendor.rild.libpath=/vendor/lib/libquectel-ril.so
+vendor.rild.libargs=-d /dev/ttyUSB2
 # Default ecclist
 ro.ril.ecclist=112,911
 wifi.interface=wlan0
-rild.libpath=/system/lib/libril-rk29-dataonly.so
-rild.libargs=-d /dev/ttyACM0
+#rild.libpath=/system/lib/libril-rk29-dataonly.so
+#rild.libargs=-d /dev/ttyACM0
 persist.tegra.nvmmlite = 1
 persist.sys.boot.check=false
 ro.audio.monitorOrientation=true

2、改device/rockchip/common

diff --git a/BoardConfig.mk b/BoardConfig.mk
old mode 100644
new mode 100755
index 3f3cc8e3..a039215a
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -365,7 +365,7 @@ BOARD_FORCE_UDISK_VISIBLE ?= true
 BOARD_DISABLE_SAFE_MODE ?= true
 
 #enable 3g dongle
-BOARD_HAVE_DONGLE ?= false
+BOARD_HAVE_DONGLE ?= true
 
 #for boot and shutdown animation ringing
 BOOT_SHUTDOWN_ANIMATION_RINGING ?= false
diff --git a/device.mk b/device.mk
old mode 100644
new mode 100755
index 4c698b75..eeff1474
--- a/device.mk
+++ b/device.mk
@@ -1048,3 +1048,9 @@ BOARD_TWRP_ENABLE ?= false
 #Build with UiMode Config
 PRODUCT_COPY_FILES += \
        device/rockchip/common/uimode/package_uimode_config.xml:vendor/etc/package_uimode_config.xml
+
+PRODUCT_PACKAGES += \
+       Telecom \
+       TeleService \
+       TelephonyProvider \
+       CarrierConfig
diff --git a/sepolicy/vendor/file_contexts b/sepolicy/vendor/file_contexts
old mode 100644
new mode 100755
index 3ffc7763..aa86f177
--- a/sepolicy/vendor/file_contexts
+++ b/sepolicy/vendor/file_contexts
@@ -1,5 +1,5 @@
 /dev/ttyFIQ[0-9]*    u:object_r:serial_device:s0
-/dev/ttyUSB[0-9]*    u:object_r:tty_device:s0
+#/dev/ttyUSB[0-9]*    u:object_r:tty_device:s0
 /dev/mali[0-9]       u:object_r:gpu_device:s0
 /dev/mali            u:object_r:gpu_device:s0
 /dev/ddr_freq        u:object_r:ddr_device:s0
@@ -155,3 +155,16 @@
 
 #for healthd
 /sys/devices/virtual/power_supply(/.*)?                              u:object_r:sysfs_power:s0
+
+/dev/ttyUSB[0-9] u:object_r:radio_device:s0
+/dev/ttyACM[0-9] u:object_r:radio_device:s0
+/dev/cdc-wdm[0-9] u:object_r:radio_device:s0
+/dev/qcqmi[0-9] u:object_r:radio_device:s0
+/vendor/bin/hw/rild u:object_r:rild_exec:s0
+/dev/socket/rildOemHook u:object_r:rild_socket:s0
+#PCIe
+/dev/mhi_DUN u:object_r:radio_device:s0
+/dev/mhi_DIAG u:object_r:radio_device:s0
+/dev/mhi_BHI u:object_r:radio_device:s0
+/dev/mhi_LOOPBACK u:object_r:radio_device:s0
+/dev/mhi_QMI0 u:object_r:radio_device:s0
diff --git a/sepolicy/vendor/rild.te b/sepolicy/vendor/rild.te
index eb3df7de..99c395b0 100644
--- a/sepolicy/vendor/rild.te
+++ b/sepolicy/vendor/rild.te
@@ -3,3 +3,5 @@ allow rild ppp_device:chr_file ioctl;
 allow rild rootfs:dir { open read };
 allow rild system_file:file execute_no_trans;
 allow rild vendor_file:file execute_no_trans;
+allow rild self:packet_socket { create bind write read };
+
diff --git a/ueventd.rockchip.rc b/ueventd.rockchip.rc
index 0fa485a9..b8901f46 100755
--- a/ueventd.rockchip.rc
+++ b/ueventd.rockchip.rc
@@ -207,3 +207,18 @@
 
 # for sensors
 /dev/input/event*    0666   input system
+
+# for quectel prot
+/dev/ttyUSB*              0660   radio        radio
+/dev/ttyACM*              0660   radio        radio
+/dev/cdc-wdm*             0660   radio        radio
+/dev/qcqmi*               0660   radio        radio
+/dev/cdc-acm*             0660   radio        radio
+
+#PCIe
+/dev/mhi_DUN              0660   radio        radio
+/dev/mhi_DIAG             0660   radio        radio
+/dev/mhi_BHI              0660   radio        radio
+/dev/mhi_LOOPBACK         0660   radio        radio
+/dev/mhi_QMI0             0660   radio        radio
+

3、修改frameworks/base

diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index 275142ad83f..7c5c143f9a1 100755
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -36,7 +36,7 @@
     <fraction name="def_window_transition_scale">100%</fraction>
     <bool name="def_haptic_feedback">true</bool>
 
-    <bool name="def_bluetooth_on">true</bool>
+    <bool name="def_bluetooth_on">false</bool>
     <bool name="def_wifi_display_on">false</bool>
     <bool name="def_install_non_market_apps">false</bool>
     <bool name="def_package_verifier_enable">true</bool>
diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java
index 49fbd8f06b0..d6b88614747 100644
--- a/telephony/java/com/android/internal/telephony/RILConstants.java
+++ b/telephony/java/com/android/internal/telephony/RILConstants.java
@@ -164,7 +164,7 @@ public interface RILConstants {
     int NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA  = 21; /*TD-SCDMA,EvDo,CDMA,GSM/WCDMA*/
     int NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA = 22; /* TD-SCDMA/LTE/GSM/WCDMA, CDMA, and EvDo */
     int PREFERRED_NETWORK_MODE = Integer.parseInt(TelephonyManager.getTelephonyProperty(0,
-            "ro.telephony.default_network", Integer.toString(NETWORK_MODE_WCDMA_PREF)));
+            "ro.telephony.default_network", Integer.toString(NETWORK_MODE_LTE_GSM_WCDMA)));
 
     int BAND_MODE_UNSPECIFIED = 0;      //"unspecified" (selected by baseband automatically)

4、修改hardware/ril

diff --git a/rild/rild.rc b/rild/rild.rc
index 1a8019f..8960b26 100644
--- a/rild/rild.rc
+++ b/rild/rild.rc
@@ -1,5 +1,8 @@
-service vendor.ril-daemon /vendor/bin/hw/rild
-    class main
-    user root
-    group radio vpn cache inet misc audio log readproc wakelock
-    capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW
+
+service ril-daemon /vendor/bin/hw/rild -l /vendor/lib/libquectel-ril.so
+        class main
+        user root
+        group radio vpn cache inet misc audio log readproc wakelock
+        capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW
+

5、修改packages/services/Telephony
 

diff --git a/src/com/android/phone/CarrierConfigLoader.java b/src/com/android/phone/CarrierConfigLoader.java
old mode 100644
new mode 100755
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
old mode 100644
new mode 100755
index 9025405b5..c5f7e8726
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -246,6 +246,21 @@ public class PhoneInterfaceManager extends ITelephony.Stub {
         }
     }
 
+       @Override
+    public void carrierActionResetAll(int subId) {
+        enforceModifyPermission();
+        final Phone phone = getPhone(subId);
+        if (phone == null) {
+            loge("carrierAction: ResetAll fails with invalid sibId: " + subId);
+            return;
+        }
+        try {
+            //phone.carrierActionResetAll();
+        } catch (Exception e) {
+            Log.e(LOG_TAG, "carrierAction: ResetAll fails. Exception ex=" + e);
+        }
+    }
+
     /**
      * A request object to use for transmitting data to an ICC.
      */

6、遇到的问题

1、不断印下面这个

init: starting service 'ril-daemon'...
[  444.744250] init: Service 'ril-daemon' (pid 1651) exited with status 1
[  444.744308] init: Sending signal 9 to service 'ril-daemon' (pid 1651) process group...
[  444.744453] libprocessgroup: Successfully killed process cgroup uid 0 pid 1651 in 0ms
解决方法就是更换ril库,换成ndk专用的
2、开机几十秒后进入recover模式
原因就是少加了<item>"mobile,0,0,0,-1,true"</item>这句,导致拨号应用异常崩溃后进入recover模式,完整应该加下面这段。

+++ b/rk322x_box/overlay/frameworks/base/core/res/res/values/config.xml
@@ -28,6 +28,14 @@
     <!-- the 6th element indicates boot-time dependency-met value. -->
     <string-array translatable="false" name="networkAttributes">
         <item>"wifi,1,1,1,-1,true"</item>
+               <item>"mobile,0,0,0,-1,true"</item>
+               <item>"mobile_mms,2,0,2,60000,true"</item>
+        <item>"mobile_supl,3,0,2,60000,true"</item>
+        <item>"mobile_dun,4,0,2,60000,true"</item>
+        <item>"mobile_hipri,5,0,3,60000,true"</item>
+        <item>"mobile_fota,10,0,2,60000,true"</item>
+        <item>"mobile_ims,11,0,2,60000,true"</item>
+        <item>"mobile_cbs,12,0,2,60000,true"</item>

3、缺少apn


+PRODUCT_COPY_FILES += \
+       device/rockchip/rk322x/RIL_32bits/apns-conf.xml:system/etc/apns-conf.xml

4、缺少拨号应用,应该在下面加入

+PRODUCT_PACKAGES += \
+       Telecom \
+       TeleService \
+       TelephonyProvider \
+       CarrierConfig

7、热插拔卡


先运行cat /dev/ttyUSB2&  命令响应从这里出来
一般模块默认不支持卡热插拔,要使能热插拔:echo -e "AT+QSIMDET=1,1\r\n" > /dev/ttyUSB2
查询有无插卡:
 echo AT+QSIMSTAT? > /dev/ttyUSB2
记得接天线 没接天线插卡也判断为没卡

去掉热插拔卡系统提示弹窗:

diff --git a/src/java/com/android/internal/telephony/uicc/UiccSlot.java b/src/java/com/android/internal/telephony/uicc/UiccSlot.java
index 25ef6376c..db5434837 100644
--- a/src/java/com/android/internal/telephony/uicc/UiccSlot.java
+++ b/src/java/com/android/internal/telephony/uicc/UiccSlot.java
@@ -306,7 +306,7 @@ public class UiccSlot extends Handler {
             String message = (isAdded) ? r.getString(R.string.sim_added_message) :
                     r.getString(R.string.sim_removed_message);
             String buttonTxt = r.getString(R.string.sim_restart_button);
-
+           /*
             AlertDialog dialog = new AlertDialog.Builder(mContext)
                     .setTitle(title)
                     .setMessage(message)
@@ -314,6 +314,7 @@ public class UiccSlot extends Handler {
                     .create();
             dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
             dialog.show();
+           */
         }
     }

<think>好的,我现在需要帮助用户解决ST-LINKv2设备在配置udev规则后没有出现在/dev/ttyACM*的问题,同时dmesg日志中也没有相关设备记录。这个问题可能涉及多个方面,我需要逐步分析可能的原因和解决方法。 首先,用户提到已经配置了udev规则,但设备没有出现。根据引用[2],udev通过内核产生的设备名来设置别名,所以可能设备没有被内核正确识别。这时候需要检查设备是否被系统检测到。用户之前可能执行了lsmod和dmesg命令来查看驱动加载情况,如引用[1]中的操作。我应该建议用户先确认设备是否被物理连接正确,比如USB线是否松动,或者尝试不同的USB端口。 接下来,如果物理连接没问题,可能需要检查内核模块是否加载。ST-LINK通常使用ch341或类似的串口驱动。用户可以使用lsmod | grep ch343或者类似的命令来检查驱动是否加载,如引用[1]提到的。如果驱动没有加载,可能需要手动加载模块,比如使用modprobe ch341。 然后,查看dmesg日志是否有设备识别的记录。用户提到dmesg中没有相关设备信息,这可能是驱动问题或者设备未被识别。运行dmesg | tail -n 30插入设备前后对比,看是否有新的信息出现。如果没有,可能驱动未正确安装或设备硬件有问题。 另外,udev规则配置是否正确也很重要。根据引用[3],用户需要在/etc/udev/rules.d目录下创建规则文件。用户需要确认规则文件的语法是否正确,比如SUBSYSTEM=="tty",ATTRS{idVendor}=="0483"等。规则文件中的属性是否匹配设备的实际信息,可以使用udevadm info --attribute-walk --path=/sys/class/tty/ttyACM0(假设设备有时出现)来获取详细信息。 权限问题也可能导致设备无法访问,但用户提到设备未出现在/dev下,所以可能不是权限问题,而是设备未被正确创建。引用[4]中用户遇到权限未生效的情况,但这里的问题更基础,设备节点都没生成,所以权限问题可能不是主要原因,但也不能完全排除。 另外,可能需要检查系统日志,比如使用journalctl -u udev --since "5 minutes ago"来查看udev服务是否有报错,或者是否有规则应用失败的信息。 如果所有配置都正确,可能需要重新加载udev规则,使用sudo udevadm control --reload和sudo udevadm trigger来重新触发规则。或者重启系统,因为有些规则需要重启才能生效,如引用[3]提到的需要重启的情况。 还有可能是设备固件问题,ST-LINKv2可能需要更新固件,或者设备本身故障。用户可以尝试在其他系统上测试设备,看是否能被识别,以排除硬件问题。 总结可能的原因:物理连接问题、驱动未加载、udev规则错误、设备信息不匹配、需要重新加载规则或重启、硬件故障。解决步骤应依次检查这些方面,逐步排除。</think>### ST-LINKv2设备挂载问题排查步骤 --- #### 一、检查物理连接与设备识别 1. **重新插拔设备**:确认USB接口正常,尝试更换线缆或端口 2. **检查内核日志**: ```bash dmesg | tail -n 30 # 插入设备后立即查看末尾30行日志 ``` - 若无`ttyACM`相关记录,可能驱动未加载或设备未被识别 - 成功识别示例应包含类似`cdc_acm 1-3:1.0: ttyACM0: USB ACM device`的日志[^2] --- #### 二、验证驱动加载状态 1. **查看相关驱动模块**: ```bash lsmod | grep cdc_acm # ST-LINK常用驱动 lsmod | grep usbserial # 通用USB串口驱动 ``` - 若未加载,手动加载驱动: ```bash sudo modprobe cdc_acm sudo modprobe usbserial ``` --- #### 三、检查udev规则配置 1. **确认规则文件有效性**: - 创建文件`/etc/udev/rules.d/99-stlink.rules`,内容应为: ``` SUBSYSTEM=="tty", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="0666", GROUP="dialout" ``` - **特别注意**: - `idVendor`和`idProduct`需通过`lsusb`确认实际值 - 使用`sudo udevadm test /sys/class/tty/ttyACM0 2>&1 | grep -i stlink`测试规则匹配 2. **重新加载规则**: ```bash sudo udevadm control --reload sudo udevadm trigger # 强制重新触发设备事件 ``` --- #### 四、关键诊断命令 1. **获取设备详细信息**: ```bash udevadm info --attribute-walk --path=$(udevadm info --query=path --name=/dev/ttyACM0) ``` - 验证`idVendor`/`idProduct`是否与规则匹配 - 检查是否有`DRIVER=="cdc_acm"`字段[^2] 2. **查看设备节点创建状态**: ```bash ls -l /sys/class/tty/ttyACM* # 检查sysfs是否存在设备节点 ``` --- #### 五、常见问题原因 | 问题类型 | 典型表现 | 解决方案 | |---------|---------|---------| | 驱动未加载 | `dmesg`无相关记录 | 加载`cdc_acm`驱动或更新固件 | | 规则语法错误 | `udevadm test`显示错误 | 检查规则中的引号和逗号格式 | | 设备ID不匹配 | `lsusb`显示不同VID/PID | 更新规则中的VID/PID值 | | 权限问题 | 设备存在但无访问权限 | 确认规则包含`MODE="0666"`[^4] | --- #### 六、补充验证步骤 1. **临时绕过udev测试**: ```bash sudo chmod 666 /dev/ttyACM0 # 如果设备节点已存在 ``` 2. **检查用户组归属**: ```bash groups # 确认当前用户属于dialout组 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值