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

保姆级教程:在Firefly RK3568开发板上为Android11添加4G模块(广和通NL668)

Firefly RK3568开发板Android 11系统集成广和通NL668 4G模块实战指南

当我们需要在无Wi-Fi或以太网的环境下为嵌入式设备提供稳定的网络连接时,4G模块无疑是最可靠的解决方案之一。本文将手把手带你完成广和通NL668 4G模块在Firefly RK3568开发板Android 11系统上的完整集成过程,从内核驱动配置到Android框架适配,涵盖所有关键步骤和常见问题排查方法。

1. 硬件准备与开发环境搭建

在开始软件配置前,确保你已准备好以下硬件组件:

  • Firefly RK3568开发板(核心板型号视具体需求而定)
  • 广和通NL668 4G模块(建议选择带外壳的完整模组)
  • 标准SIM卡(已开通数据流量服务)
  • USB转接板(若模块非直接插接式)
  • 串口调试工具(如CP2102 USB转TTL模块)

开发环境要求:

# 检查编译环境基础依赖 sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \ lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \ libgl1-mesa-dev libxml2-utils xsltproc unzip python3 python3-pip

建议使用Ubuntu 20.04 LTS作为编译主机系统,并确保磁盘空间至少有200GB可用。获取Firefly官方提供的Android 11 BSP代码:

repo init -u https://gitlab.com/firefly-linux/manifests.git -b android11 repo sync -j$(nproc)

2. Linux内核驱动配置

2.1 模块USB识别配置

广和通NL668通过USB接口与主机通信,首先需要在内核驱动中添加设备标识:

// kernel/drivers/usb/serial/option.c static const struct usb_device_id option_ids[] = { { USB_DEVICE(0x1508, 0x1001) }, /* Fibocom NL668 */ // ... 其他设备项保持不变 };

验证驱动加载状态:

# 插入模块后检查USB设备枚举 lsusb | grep 1508:1001 dmesg | grep ttyUSB

2.2 内核配置选项调整

进入内核配置菜单进行必要设置:

cd kernel make ARCH=arm64 firefly_rk3568_defconfig make ARCH=arm64 menuconfig

关键配置项路径:

Device Drivers ---> [*] USB support ---> <*> USB Serial Converter support ---> <*> USB driver for GSM and CDMA modems [*] Network device support ---> [*] USB Network Adapters ---> <*> CDC Ethernet support (smart devices such as cable modems)

保存配置后,建议清理并重新编译内核:

make ARCH=arm64 clean make ARCH=arm64 -j$(nproc)

2.3 设备树(DTS)配置

根据硬件设计修改设备树文件,典型配置如下:

// kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-roc-pc.dtsi &usb_host0_xhci { status = "okay"; }; &modem { compatible = "fibocom,nl668"; pinctrl-names = "default"; pinctrl-0 = <&lte_power_en &lte_reset>; power-enable-gpio = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>; reset-gpio = <&gpio4 RK_PD4 GPIO_ACTIVE_LOW>; status = "okay"; };

3. Android系统层适配

3.1 RIL库集成与配置

从广和通获取专为Android 11适配的RIL库(libreference-ril.so),建议按以下目录结构存放:

vendor/fibocom/nl668/ ├── bin/ │ └── chat ├── etc/ │ └── ppp/ │ ├── ip-down │ └── ip-up └── lib64/ └── libreference-ril-nl668.so

修改编译配置文件:

# device/rockchip/rk356x/device.mk PRODUCT_PACKAGES += \ libreference-ril-nl668 PRODUCT_COPY_FILES += \ vendor/fibocom/nl668/lib64/libreference-ril-nl668.so:$(TARGET_COPY_OUT_VENDOR)/lib64/libreference-ril-nl668.so \ vendor/fibocom/nl668/bin/chat:$(TARGET_COPY_OUT_SYSTEM)/bin/chat \ vendor/fibocom/nl668/etc/ppp/ip-up:$(TARGET_COPY_OUT_SYSTEM)/etc/ppp/ip-up \ vendor/fibocom/nl668/etc/ppp/ip-down:$(TARGET_COPY_OUT_SYSTEM)/etc/ppp/ip-down

3.2 RIL服务启动配置

修改init.rc文件确保正确加载自定义RIL库:

# hardware/ril/rild/init.rc -service ril-daemon /vendor/bin/hw/rild +service ril-daemon /vendor/bin/hw/rild -l /vendor/lib64/libreference-ril-nl668.so -- -d /dev/ttyUSB0 class main socket rild stream 660 root radio socket rild-debug stream 660 radio system user root group radio cache inet misc audio sdcard_rw log

3.3 网络类型与APN配置

在device.mk中添加必要的系统属性:

# device/rockchip/rk356x/device.mk PRODUCT_PROPERTY_OVERRIDES += \ ro.telephony.default_network=9 \ persist.vendor.radio.apm_sim_not_pwdn=1 \ ril.fibocom.dialmode=1 \ ril.fibocom.usbmode=18

更新APN配置:

<!-- device/rockchip/rk356x/overlay/frameworks/base/core/res/res/xml/apns.xml --> <apn carrier="China Mobile" mcc="460" mnc="00" apn="cmnet" type="default,supl" protocol="IPV4V6" roaming_protocol="IPV4V6"/>

4. 系统编译与烧写

完成所有配置后,执行完整系统编译:

source build/envsetup.sh lunch rk3568_firefly-userdebug make -j$(nproc)

生成固件后使用Firefly官方工具进行烧写:

# 进入烧录模式 adb reboot bootloader # 使用upgrade_tool工具烧写 ./upgrade_tool di -b boot.img ./upgrade_tool di -s system.img ./upgrade_tool rd

5. 功能验证与问题排查

5.1 基础功能测试

检查RIL服务状态:

adb shell ps -A | grep rild adb logcat -b radio | grep RIL

验证模块识别:

adb shell getprop | grep ril adb shell ls /dev/ttyUSB*

5.2 常见问题解决方案

问题1:RIL服务不断重启

检查日志中的关键错误:

adb logcat -b crash | grep SIG

可能原因及解决:

  • RIL库与Android版本不兼容 → 联系模组厂商获取正确版本
  • USB端口权限问题 → 检查/dev/ttyUSB*权限为660,属组radio

问题2:信号强度显示异常

修改配置文件:

# vendor/etc/qi-ril.conf -LTE_ls_Report_SignalStrength=0 +LTE_ls_Report_SignalStrength=1

问题3:APN无法自动配置

临时解决方案:

adb shell settings put global preferred_network_mode 9 adb shell am broadcast -a android.intent.action.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED

6. 性能优化建议

  1. 电源管理优化

    • 配置合理的模块休眠策略
    • 添加wake_lock防止系统休眠时断网
  2. 网络切换优化

    # device.mk PRODUCT_PROPERTY_OVERRIDES += \ persist.vendor.radio.enableadvancedscan=true \ persist.vendor.radio.scan_mode=2
  3. 日志级别控制

    adb shell setprop persist.vendor.ril.log_level 2
  4. ECM模式优化参数

    PRODUCT_PROPERTY_OVERRIDES += \ net.rmnet0.dns1=8.8.8.8 \ net.rmnet0.dns2=8.8.4.4 \ net.dns1=8.8.8.8 \ net.dns2=8.8.4.4

实际项目中,我们发现NL668模块在信号较弱环境下表现优异,但需要注意天线摆放位置对信号强度的影响。建议使用外置天线并远离高频干扰源。

http://www.jsqmd.com/news/757099/

相关文章:

  • Qt 信号与槽 [ 2 ]
  • Obsidian PDF++:打造原生PDF标注与知识管理的终极解决方案
  • 告别云端依赖:用TensorFlow Lite在Android手机上跑通你的第一个AI模型(附完整代码)
  • 终极指南:5分钟搞定Rhino到Blender的3D模型转换
  • 基于Node.js与LLM的WhatsApp智能机器人开发实战
  • 河北省 CPPM 和 SCMP 报考新选择(众智商学院)联系方式 - 众智商学院课程中心
  • 通过Python快速调用Taotoken提供的多模型聊天补全接口
  • 【shell编程知识点汇总】第三章 深入理解 grep 和扩展正则表达式
  • 电商场景下小型语言模型优化实战
  • MAGI:AI原生文档格式,为RAG与智能体注入结构化灵魂
  • 本地 AI 智能体 OpenClaw 部署实操教程
  • PHP表单引擎从零到生产级:7大核心模块拆解,含动态规则引擎+JSON Schema驱动源码
  • 嵌入式Intel架构固件技术解析与优化实践
  • 别再乱拨开关了!手把手教你配置正点原子imx6ull开发板的启动模式(EMMC/SD卡启动详解)
  • 3步掌握GPX在线编辑:告别复杂软件,浏览器搞定所有轨迹处理
  • 2026年京东e卡回收测评科学攻略,安全变现就看这篇 - 京顺回收
  • 5大核心功能解析:TrguiNG如何重新定义Transmission远程管理体验
  • 2026 网媒发稿平台权威测评:十大渠道综合实力榜单与企业选型指南 - 博客湾
  • SAP MRP日期配置避坑指南:从收货处理天数到计划边际码,一次讲透所有时间参数
  • CSDN博客下载器:打造个人技术知识库的利器
  • CPPM网课和自学哪个好? - 众智商学院官方
  • Windows风扇终极控制指南:3分钟掌握专业级静音散热方案
  • PIVOT技术:动态剪枝优化多模态大语言模型视觉编码器
  • 【RK3506实战-09】RK3506 + RTL8852BS(SDIO)WiFi6 驱动调试实战
  • 从‘哞加密’到通用模式:如何用哈希表优雅处理棋盘上的所有ABB型字符串?
  • 终极指南:如何利用PIDtoolbox快速诊断无人机控制系统性能问题
  • Agent工具调用中的错误处理 重试机制降级处理
  • MaxBot抢票机器人:3步实现自动化抢票的高效解决方案
  • 开源协作平台Olla:从代码托管到社区生态的技术架构与部署实践
  • Nexus-7B-V3上线,长文本推理新突破