当前位置: 首页 > news >正文

RK3588Android12 动态兼容4G模组

平台:RK3588&Android12

内容:实现4G模组的兼容

实现一个固件可以动态兼容多种4G模块,不用换个模块就需要重新打包升级。

主要改系统层,根据模块的PID和VID使用对应的固件

hardware\ril\rild\rild.c ++ #include <dirent.h> ++ static lte_device supported_lte_devices[] = { ++ {"U9507C", "2df3:9d01", "vendor/lib64/libreference-ril-u9507c.so"}, ++ {"E9730C", "2df3:9b33", "vendor/lib64/libreference-ril-e9730c.so"}, ++ {"EC200A", "2c7c:6005", "vendor/lib64/libreference-ril-ec200a.so"}, ++ {"EC2x", "2c7c:0125", "vendor/lib64/libreference-ril-ec2x.so"}, ++ {"SLM770", "2dee:4d57", "vendor/lib64/libreference-ril-slm770.so"}, //vid+pid ++ {"U9300C", "1c9e:9b3c", "vendor/lib64/libreference-ril-u9300c.so"}, ++ //{"N720V5", "2df3:9d01", "vendor/lib64/libec20.so"}, ++ }; ++ ++ int get_rillib_from_id(char *libPath) ++ { ++ char *bus_dir = "/sys/bus/usb/devices"; ++ char *prefix = "PRODUCT="; ++ int idnum; ++ int i = 0; ++ int ret = 0; ++ DIR *dir; ++ struct dirent *next; ++ FILE *fp = NULL; ++ idnum = sizeof(supported_lte_devices) / sizeof(supported_lte_devices[0]); ++ dir = opendir(bus_dir); ++ if (!dir) { ++ return -1; ++ } ++ ++ while ((next = readdir(dir)) != NULL) { ++ char line[256]; ++ char uevent_file[256] = {0}; ++ sprintf(uevent_file, "%s/%s/uevent", bus_dir, next->d_name); ++ //PLOG(DEBUG) << "uevent path:" << uevent_file; ++ RLOGD("**uevent path :=%s**", uevent_file); ++ fp = fopen(uevent_file, "r"); ++ if (NULL == fp) { ++ continue; ++ } ++ ++ while (fgets(line, sizeof(line), fp)) { ++ char *pos = NULL; ++ int product_vid = 0; ++ int product_did = 0; ++ int producd_bcddev = 0; ++ char temp[10] = {0}; ++ pos = strstr(line, prefix); ++ //PLOG(DEBUG) << "line:" << line << ", prefix:" << prefix << "."; ++ if (pos != NULL) { ++ sscanf(pos + 8, "%x/%x/%x", &product_vid, &product_did, &producd_bcddev); ++ ++ sprintf(temp, "%04x:%04x", product_vid, product_did); ++ RLOGD("**found vid:pid =%04x:%04x, temp=%s **", product_vid, product_did, temp); ++ for (i = 0; i < idnum; i++) { ++ if (0 == strncmp(temp, supported_lte_devices[i].vid_pid, 9)) { ++ //PLOG(ERROR) << "found device pid:vid :" << temp; ++ RLOGD("**found device pid:vid :=%s, module_name :=%s**", temp, supported_lte_devices[i].module_name); ++ strcpy(libPath, supported_lte_devices[i].path); ++ ret = 0; ++ fclose(fp); ++ goto ready; ++ } ++ } ++ } ++ } ++ fclose(fp); ++ } ++ ++ ret = -1; ++ ready: ++ closedir(dir); ++ //PLOG(DEBUG) << "wifi detectd return ret:" << ret; ++ RLOGD("**get_rillib_from_id=%d**", ret); ++ return ret; ++ } int main(int argc, char **argv) { ...... if (rilLibPath == NULL) { if ( 0 == property_get(LIB_PATH_PROPERTY, libPath, NULL)) { // No lib sepcified on the command line, and nothing set in props. // Assume "no-ril" case. goto done; } else { rilLibPath = libPath; } } ++ if (get_rillib_from_id(libPath) == 0) ++ rilLibPath = libPath; ++ RLOGD("**RILd rilLibPath=%s**", rilLibPath);

把对应RIL库文件放到 device\rockchip\common\4g_modem\lib64\

再修改4g_modem.mk把文件加载到对应位置,例如:

/device/rockchip/common: --- a/modules/4g_modem.mk +++ b/modules/4g_modem.mk PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/../4g_modem/bin64/dhcpcd:$(TARGET_COPY_OUT_VENDOR)/bin/dhcpcd \ $(LOCAL_PATH)/../4g_modem/lib64/librk-ril.so:$(TARGET_COPY_OUT_VENDOR)/lib64/librk-ril.so \ + $(LOCAL_PATH)/../4g_modem/lib64/libreference-ril-ec2x.so:$(TARGET_COPY_OUT_VENDOR)/lib64/libreference-ril-ec2x.so \ + $(LOCAL_PATH)/../4g_modem/lib64/libreference-ril-ec200a.so:$(TARGET_COPY_OUT_VENDOR)/lib64/libreference-ril-ec200a.so \ + $(LOCAL_PATH)/../4g_modem/lib64/libreference-ril-u9300c.so:$(TARGET_COPY_OUT_VENDOR)/lib64/libreference-ril-u9300c.so
http://www.jsqmd.com/news/611745/

相关文章:

  • linux下timerfd和posix timer为什么存在较大的抖动?
  • 原始黄金联系方式查询指南:如何通过官方渠道获取产品信息与商业合作资讯 - 品牌推荐
  • Fast-GitHub:彻底解决国内访问GitHub缓慢问题的终极加速方案
  • BetterGenshinImpact多开终极指南:同时管理多个原神账号的完整教程
  • Android - 服务 Service
  • Hunyuan-MT-7B功能测评:翻译质量与速度实测对比
  • 5分钟搞定!ClearerVoice-Studio语音降噪实战:一键去除会议录音杂音
  • 如何用虎符台MOD管理器一键管理全面战争游戏MOD:终极完整指南
  • andrej-karpathy-skills与测试驱动开发:完美结合
  • 史上最大模型Claude Mythos官宣!性能碾压 Opus 4.6!贵5倍!却因太危险不敢开放给个人!拥有情绪能够逃逸沙盒会撒谎的超级黑客?
  • 蒲公英R300A 4G路由器实战:工业PLC远程监控全流程解析
  • 企业年会春联批量生成方案:Pixel Couplet Gen 结合Java八股文风格创作
  • OpenClaw定时任务设置:Qwen2.5-VL-7B自动化日报生成
  • 北京一明影视联系方式查询:关于影视广告制作服务咨询与合作的通用指引及背景信息梳理 - 品牌推荐
  • Phi-3-vision-128k-instruct数据库课程设计助手:ER图与表结构智能评审
  • Qwen3Guard-Gen-8B开箱即用:离线内容审核,保护你的AI应用免受风险
  • Pixel Aurora Engine 工业设计渲染:生成产品概念图与材质表现
  • SGLang多GPU配置教程:充分利用硬件提升推理速度
  • bge-large-zh-v1.5实测效果:长文本语义匹配精准度展示
  • 2026初效过滤器制造商推荐:行业技术与口碑之选 - 品牌排行榜
  • 零代码部署实时口罩检测:使用ModelScope镜像快速搭建AI检测服务
  • HunyuanVideo-Foley 入门:Node.js环境配置与音效生成API服务封装
  • Z-Image-Turbo效果展示:国风山水、赛博猫咪,高清作品一键生成
  • Qwen3.5-9B-AWQ-4bit镜像部署实战:基于CSDN GPU平台的7860端口服务搭建
  • 一些算法题的反思总结
  • 打造专业技术简历:gh_mirrors/re/resume模板的完整使用指南
  • 2026年苏州私立学校普高录取分数线及教育资源参考 - 品牌排行榜
  • 北京一明影视联系方式查询:影视广告制作行业合作前需了解的服务流程与常见注意事项 - 品牌推荐
  • 云容笔谈·东方红颜影像生成系统Python爬虫数据驱动创作实战
  • 千问3.5-2B轻量部署最佳实践:Docker容器资源限制+GPU显存预分配配置