|
@@ -0,0 +1,246 @@
|
|
|
|
|
+## SIMCOM_7600CE 4GNDIS驱动
|
|
|
|
|
+
|
|
|
|
|
+### 问题默认插上4G模块无法正常上网
|
|
|
|
|
+能感应到USB设备插入
|
|
|
|
|
+问官方要到了安卓11得驱动包和文档 尝试移植
|
|
|
|
|
+
|
|
|
|
|
+百度也有一篇简要得移植文章 针对6.0得
|
|
|
|
|
+https://blog.csdn.net/weixin_44127587/article/details/115207908
|
|
|
|
|
+
|
|
|
|
|
+文档中第一步提到得LINUX内核配置文件 我全局搜索出来是这 看来和源码本身没关系 源码默认USB支持各种模式也都编译了 配置中配置来决定是否打包进去
|
|
|
|
|
+
|
|
|
|
|
+out/target/product/Tinker_Board_2/obj/PACKAGING/check_vintf_all_intermediates/kernel_configs.txt
|
|
|
|
|
+
|
|
|
|
|
+CONFIG_USB_WDM=y
|
|
|
|
|
+CONFIG_USB_USBNET=y
|
|
|
|
|
+CONFIG_USB_NET_QMI_WWAN=y
|
|
|
|
|
+
|
|
|
|
|
+CONFIG_USB_SERIAL=y
|
|
|
|
|
+CONFIG_USB_SERIAL_WWAN=y
|
|
|
|
|
+CONFIG_USB_SERIAL_OPTION=y
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+以上配置并不连续在一起 分别查找确认了 默认都是y
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+第二步
|
|
|
|
|
+
|
|
|
|
|
+网文
|
|
|
|
|
+>修改驱动文件, 增加7600模块的VID和PID ,并且跳过 Interface 5,
|
|
|
|
|
+路径一般为 linux-3.10/drivers/usb/serial/option.c
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+模块文档中
|
|
|
|
|
+>配置预留 NDIS 串口:
|
|
|
|
|
+文件路径:kernel/drivers/usb/serial/option.c;
|
|
|
|
|
+在 static const struct usb_device_id option_ids[]数组中添加我们的串口信息,其中包
|
|
|
|
|
+括设备 ID(VID、PID),以及需要跳过的设备。
|
|
|
|
|
+需要跳过的设备:在同一个设备 ID 下面,可能存在多个设备(同一个物理 USB 口
|
|
|
|
|
+虚拟出多个模拟端口);设置一个黑名单,可以把不需要配置成串口的模拟口屏蔽掉,
|
|
|
|
|
+这样就不会被映射为串口。
|
|
|
|
|
+串口配置:kernel/drivers/usb/serial/option.c;
|
|
|
|
|
+Android 配置中需要个人添加 blacklist 结构(可以只添加自己需要的 PID、VID):
|
|
|
|
|
+
|
|
|
|
|
+我看安卓11版本里已经有了9001得配置 所以没改
|
|
|
|
|
+新增了9011得识别
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+46行
|
|
|
|
|
+```
|
|
|
|
|
+# mk added for simcom7600
|
|
|
|
|
+/dev/ttyUSB* 0666 radio radio
|
|
|
|
|
+# mk added end
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+kernel/drivers/net/usb/Makefile
|
|
|
|
|
+
|
|
|
|
|
+4G 模块驱动文件:simcom_wwan.c
|
|
|
|
|
+5G 模块驱动文件:qmi_wwan_simcom_1e0e_9001.c
|
|
|
|
|
+我选择了4G模块驱动文件放入编译
|
|
|
|
|
+注释掉原来的qmi驱动
|
|
|
|
|
+```
|
|
|
|
|
+#obj-$(CONFIG_USB_NET_QMI_WWAN) += qmi_wwan.o
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+obj-$(CONFIG_USB_USBNET) += usbnet.o simcom_wwan.o #qmi_wwan_simcom_1e0e_9001.o
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+至此编译后系统有usb0 但是不会自动配置 手动配置IP掩码网关之后接口能正常上网 模块正常工作 系统LINUX层驱动工作正常 缺自动配置工具 自己写脚本也行
|
|
|
|
|
+
|
|
|
|
|
+自动rndis配置方法
|
|
|
|
|
+build/make/core/main.mk
|
|
|
|
|
+加ADDITIONAL_BUILD_PROPERTIES += rild.simcom.rndis=1
|
|
|
|
|
+我选择在 374行 ADDITIONAL_BUILD_PROPERTIES += net.bt.name=Android 后加
|
|
|
|
|
+```
|
|
|
|
|
+BUILD_WITHOUT_PV := true
|
|
|
|
|
+
|
|
|
|
|
+ADDITIONAL_BUILD_PROPERTIES += net.bt.name=Android #line 374
|
|
|
|
|
+
|
|
|
|
|
+#add by mk for simcom
|
|
|
|
|
+ADDITIONAL_BUILD_PROPERTIES += rild.simcom.rndis=1
|
|
|
|
|
+ADDITIONAL_BUILD_PROPERTIES += net.usb0.dns2=114.114.114.114
|
|
|
|
|
+#add by mk for simcom end
|
|
|
|
|
+```
|
|
|
|
|
+我顺手把DNS配置也加了 自动模式获取得DNS是7600得网关 192.168.255.1 实测不能完成DNS解析
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+但是安卓应用层 默认并不会带上 telephony组件 短信电话4G模块都没有
|
|
|
|
|
+
|
|
|
|
|
+第三步
|
|
|
|
|
+想办法尝试把telephony组件编译进去 让安卓启动后多出这些APP
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+device/asus/tinker_board_2/BoardConfig.mk
|
|
|
|
|
+BOARD_HAS_RK_4G_MODEM 设置位true 默认是false
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+#for rk 4g modem
|
|
|
|
|
+BOARD_HAS_RK_4G_MODEM ?= true
|
|
|
|
|
+ifeq ($(strip $(BOARD_HAS_RK_4G_MODEM)),true)
|
|
|
|
|
+DEVICE_MANIFEST_FILE += device/rockchip/common/4g_modem/manifest.xml
|
|
|
|
|
+endif
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+device/asus/tinker_board_2/WW_Tinker_Board_2.mk
|
|
|
|
|
+要加在前面否则会有变量初始化错误
|
|
|
|
|
+```
|
|
|
|
|
+$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony.mk)
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+修改 build/target/product/telephony_vendor.mk
|
|
|
|
|
+增加 messaging \ 默认不包含短信模块
|
|
|
|
|
+
|
|
|
|
|
+PRODUCT_PACKAGES := \
|
|
|
|
|
+ rild \
|
|
|
|
|
+ messaging \
|
|
|
|
|
+
|
|
|
|
|
+PRODUCT_COPY_FILES := \
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+第四步
|
|
|
|
|
+替换原版rild层驱动为厂商提供得驱动
|
|
|
|
|
+
|
|
|
|
|
+/system/core/rootdir/init.rc 和/hardware/ril/rild.rc
|
|
|
|
|
+启动脚本加载库-l /vendor/lib64/libreference-ril.so
|
|
|
|
|
+```
|
|
|
|
|
+service vendor.ril-daemon /vendor/bin/hw/rild -l /vendor/lib64/libreference-ril.so
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+hardware/ril/rild
|
|
|
|
|
+hardware/ril/refrence-ril
|
|
|
|
|
+
|
|
|
|
|
+这两个库 有原装的 但是我们要换成自己4G模块提供的 simcom的驱动
|
|
|
|
|
+有些资料的做法是改掉android.mk的名字让他不编译 然后自己把文件放到out目录中
|
|
|
|
|
+我测试失败后就考虑还是让他生成打包(失败原因是不编译也意味着不打包了如果只是依赖得文件还好,但是也包括rild.rc等相关文件不知道会少打包啥 所以留着 我们会写拷贝发布配置)
|
|
|
|
|
+
|
|
|
|
|
+写copyfile规则
|
|
|
|
|
+vendor目录下新建simcom文件夹放入厂商给的驱动
|
|
|
|
|
+
|
|
|
|
|
+device/asus/tinker_board_2/WW_Tinker_Board_2.mk
|
|
|
|
|
+加上
|
|
|
|
|
+
|
|
|
|
|
+PRODUCT_COPY_FILES += vendor/simcom/rild:/vendor/bin/hw/rild
|
|
|
|
|
+PRODUCT_COPY_FILES += vendor/simcom/libril.so:/vendor/lib64/libril.so
|
|
|
|
|
+PRODUCT_COPY_FILES += vendor/simcom/libreference-ril.so:/vendor/lib64/libreference-ril.so
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ rild.libpath = /vendor/lib64/libreference-ril.so
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+这里还会打包失败 编译环境很严格 会检测到重复发布得包 规则验证不通过(因为要拷贝得rild和libreference本身会编译发布 我们copy相当于是重复发布来覆盖他)
|
|
|
|
|
+修改编译配置把严格模式改成允许重复发布
|
|
|
|
|
+在device/asus/tinker_board_2/BoardConfig.mk
|
|
|
|
|
+末尾加上
|
|
|
|
|
+```
|
|
|
|
|
+BUILD_BROKEN_DUP_RULES := true
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+第五步
|
|
|
|
|
+设置默认网络模式和开启语音短信等配置选项
|
|
|
|
|
+
|
|
|
|
|
+frameworks/base/telephony/java/com/android/internal/telephony/RILConstants.java
|
|
|
|
|
+默认网络设置4G NETWORK_MODE_WCDMA_PREF 9
|
|
|
|
|
+```
|
|
|
|
|
+ @UnsupportedAppUsage
|
|
|
|
|
+ int PREFERRED_NETWORK_MODE = Optional.of(TelephonyProperties.default_network())
|
|
|
|
|
+ .filter(list -> !list.isEmpty())
|
|
|
|
|
+ .map(list -> list.get(0))
|
|
|
|
|
+ .orElse(NETWORK_MODE_LTE_GSM_WCDMA);
|
|
|
|
|
+ //.orElse(NETWORK_MODE_WCDMA_PREF);
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+packages/services/Telephony/res/values/config.xml 中
|
|
|
|
|
+```
|
|
|
|
|
+<bool name="config_enabled_lte" translatable="false">true</bool>
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+device/rockchip/common/overlay/frameworks/base/core/res/res/values/config.xml
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+ <!-- This device is not "voice capable"; it's data-only. -->
|
|
|
|
|
+ <bool name="config_voice_capable">true</bool>
|
|
|
|
|
+
|
|
|
|
|
+ <!-- This device does not allow sms service. -->
|
|
|
|
|
+ <bool name="config_sms_capable">true</bool>
|
|
|
|
|
+```
|
|
|
|
|
+默认都是false 改成true
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+第六步
|
|
|
|
|
+
|
|
|
|
|
+ 最后遇到问题调试方法
|
|
|
|
|
+
|
|
|
|
|
+手动抓 log 保存到文件:
|
|
|
|
|
+RIL 的 log:
|
|
|
|
|
+adb logcat -b radio -v time >radio.txt
|
|
|
|
|
+GPS/pppd/CM:
|
|
|
|
|
+adb logcat -v time >main.txt
|
|
|
|
|
+如果设备和 PC 间是串口连接, 进入串口 shell 模式后执行
|
|
|
|
|
+Logcat –b radio –v time
|
|
|
|
|
+Logcat –v time
|
|
|
|
|
+把打印出的 log 存成文件
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+adb抓 可以保存到win主机上用BareTailPro动态查看log文件就好了 就跟终端输出一样
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+文件推送上传
|
|
|
|
|
+把 ril 库的相关文件推送到 android 对应的目录(添加开机脚本时一定要对应路径)
|
|
|
|
|
+若是手动 push 到系统,首先要重新挂载设备: 因为默认权限是只读的
|
|
|
|
|
+```PowerShell
|
|
|
|
|
+adb root && adb remount (低版本 android 或者 mount -o remount,rw /system)
|
|
|
|
|
+
|
|
|
|
|
+adb push ./rild /vendor/bin/hw/
|
|
|
|
|
+adb shell chmod 777 /vendor/bin/hw/rild
|
|
|
|
|
+#Simcom Android ril 适配
|
|
|
|
|
+
|
|
|
|
|
+adb push ./libril.so /vendor/lib64/
|
|
|
|
|
+adb push ./libreference-ril.so /vendor/lib64/
|
|
|
|
|
+```
|