工程技术与应用
9
工程技术与发展
嵌入式 linux 系统 5G 模块的调试应用
张东帅
(南京磐能电力科技股份有限公司 江苏南京 210000)
摘要 主控 MCU 连接 5G 模块,实现远程通信,既要考虑到硬件电路设计,接口的使用,还要考虑到软件设计,嵌入式系统比较普遍使用 linux内核以及文件系统构成完整的操作系统,其余的模块调试主要包括驱动移植,应用程序交叉编译和移植。本文完整的介绍了一种 USB 接口的 5G 模块在嵌入式 linux 系统中的硬件实现方案,以及软件移植方法,及问题处理方案。
关键词 5G 模块 嵌入式 linux 系统 USB 驱动
引言 移动通信进入 5G 时代,各种产品都将或多或少用到 5G 通信模块,以实现对外的数据通信,嵌入式产品更是有广阔的应用 场景。市场上绝大部分嵌入式系统基于 linux 内核,其代码完善,
解决方案众多,且体积较小,对于硬件设计的要求较低,且驱动代 码开源,任何用户均可免费获取,并调试使用,因此具有普遍的实 用性。
基本概念
1、嵌入式 linux 系统简介
嵌入式 Linux 是嵌入式操作系统的一个新成员,其最大的特点 是源代码公开并且遵循 GPL 协议。目前正在开发的嵌入式系统中,
有近 50%的项目选择 Linux 作为嵌入式操作系统。
嵌入式 linux 是将日益流行的 Linux 操作系统进行裁剪修改,使 之能在嵌入式计算机系统上运行的一种操作系统。嵌入式 linux 既 继承了 Internet 上无限的开放源代码资源,又具有嵌入式操作系统 的特性。
本文开发主控 MCU 的操作系统基本结构为 bootloader、经过裁 剪的 linux 内核、ubuntu core 文件系统。
2、5G 通信模块简介
本次开发选用广和通 FG150 模组,支持 5G、NR、WCDMA、
LTE 等多种制式,可适用于各种数据采集场景,包括视频音频车载 导航等等。
3、硬件架构简介
广和通提供的模组带有 linux4.1 操作系统,可用其与运行 linux 系统主控 MCU 直接通信,硬件接口选用 USB 接口通信。
基本硬件架构图如下,本文主要描述开发主控 MCU 系统。
操作系统调试,本文开发选用 linux 4.19 版本内核
1、linux 内核执行 make menuconfig,配置需打开如下选项:
1)、USB 模块驱动配置:Device drivers ->USB Support -> USB gadget support、Support for Host-side USB。
对应 linux 驱动代码 drivers/usb/dwc2/platform.c
配置完成后,硬件板卡插入 U 盘测试,通过 lsusb 指令,可看 到主控 MCU 板已检测到 U 盘,可以将 U 盘设备挂载到目录,写入 或读取 U 盘文件,说明 USB 驱动加载成功。
2)、USB 网络驱动配置:Device drivers -> network device support -> USB network adapters。
配置完成后,执行 ifconfig –a 指令,可以看到网络设备多出 usb0 设备,插入 5G 模块后,执行 ifconfig usb0 up 指令,启动 usb0 设备,启动后执行 ifconfig 指令,可看到设备已成功获取到 mac 地 址。
2、5G 模块连接成功后,控制台执行 udhcpc -i usb0,使用 DHCP 协议申请 IP 地址,该过程可使用 wire Shark 抓包工具查看,
DHCP 租约过程就是 DHCP 客户机动态获取 IP 地址的过程,过 程分为 4 步:
客户机请求 IP(客户机发 DHCPDISCOVER 广播 包),pc(68)->ps(67);
服务器响应(服务器发 DHCPOFFER 广播包);
客户机选择 IP(客户机发 DHCPREQUEST 广播包);
服务器确定租约(服务器发 DHCPACK/DHCPNAK 广播包)。
IP 地址获取成功后,控制台执行 ifconfig,可以看到对应的 usb0 设备已获取到 IP 地址,到这一步说明主控 MCU 和 5G 模块网络通 信已实现。
3、文件系统建议使用 ubuntu core18.04 系统,可在 ubuntu 官网 下载,注意修改网络配置文件/etc/network/interfaces 文件, 添加如 下内容:
auto usb0 iface usb0 inet dhcp
up route add default gw 192.168.225.1
以上操作目的是开机启动 usb0 设备,并配置 IP 地址和路由,
路由地址和 5G 模块 IP 地址同网段。 配置成功后,可在主控 MCU 控制台 ping 通外网。
4、调试 USB 接口的过程中,一个好的调试方法是通过 tcpdump 抓取 Usb 报文,内核配置需打开 usb monitor 选项,之后执行 mount -t debugfs none /sys/kernel/debug,再检查是否存在目录
/sys/kernel/debug/usb/usbmon
以上配置成功后,通过指令抓包 tcpdump -i usbmon1 实现抓包,
协助调试。
结束语
嵌入式 linux 系统以及驱动的调试方法,资料众多,但实际调 试过程中由于硬件设计或内核版本不同,会遇到不同的问题,所以 需要掌握各种调试工具,比如本文中提到使用 wireshark 抓包工具 分析报文。本文只提供了 USB 接口的 5G 模块的调试方法,实际上 还可以根据实际需求和芯片功能,使用 SPI 接口、RGMII 接口等,
linux 内核为此提供了丰富的驱动,其调试方法也大概一致。