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

GobiNet 驱动移植调试

1. 背景概述
因遇到 Android Ndis 拨号 GobiNet 驱动移植问题,导致 Android RIL 测试阻
塞,经分析梳理,现将该问题处理过程中的问题及解决方法简单整理,作为后续 Android
GobiNet 驱动移植的参考。

知识拓展:Gobi 其实是高通的数据卡和模块的一个系列,有 Gobi2000/Gobi3000/Gobi4000 等系列。GobiNet 驱动就是针对高通 Gobi 系列的 NDIS 网卡驱动,其实就是 Qualcomm CDC/ECM 驱动(也叫 RmNet 驱动)。拨号成功后,客户端系统通过 DHCP client获取模块 DHCP server 分配的 IP。

2. USB端口信息
某模组的端口列表为:

3. Gobinet驱动集成

Gobinet驱动一般是基于平台提供的源码基础上修改而来的,一般包含makefile、GobiUSBnet.c、QMI.c、QMI.h、QMIDevice.c、QMIDevice.h以及Structs.h文件。

3.1 Gobinet驱动添加系统组件

Gobinet驱动需要内核的usbnet驱动支持,因此需要配置Linux内核,配置方法如下:

cd kernel

make menuconfig

device drivers->Network device support->usb Network Adapters

选中如下组件,然后保存配置:

Multi-purpose USB Networking Framework

3.2 Gobinet驱动编译

用户可以编译为*.ko形式,也可以将代码放入内核中一起编译为*.o形式。

编译为*.ko形式:修改 Makefile 中 KDIR 的值为 kernel 的编译路径, 在 driver 目录下执行 make 命令,编译成功就可以生成 GobiNet.ko 驱动。

编译为*.o形式:将代码文件复制到用户自己的 kernel 代码的 drivers/net/usb 目录下;
在 drivers/net/usb/Makefile 中增加以下内容:
obj-y += GobiNet.o
GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o

之后每次编译内核都会自动编译 Gobinet驱动。

3.3 Gobinet驱动加载

驱动加载的两种方式如下:
1.通过 insmod 命令加载Gobinet驱动:
sudo insmod GobiNet.ko
驱动一般默认 debug 关闭,可以采用如下方式开启:
ehco 1 > /sys/module/GobiNet/parameters/debug
2.通过 modprobe 命令加载 Gobinet 驱动:
在 driver 目录执行 make install 命令;
sudo make install
会将驱动安装到系统的 module 目录中,并且分析依赖关系,将相关模块同时加载。

然后使用ifconfig命令查看网卡信息,一般如果出现usb0则表示驱动加载成功。

4. USB串口驱动集成

4.1 USB串口驱动添加系统组件

USB串口驱动添加需要配置Linux内核,配置方法如下:

cd kernel

make menuconfig

device drivers->usb support->usb serial converter support

选中如下组件,然后保存配置:

USB driver for GSM and CDMA modems

4.2 代码修改

1. 打开内核源码文件 option.c(路径一般为 drivers/usb/serial/option.c)。在源码中找到 option_ids 数组,
在数组中添加某产品的 VID和 PID;
static const struct usb_device_id option_ids[] = {
… …
#if 1
    { USB_DEVICE(VID, PID) },
#endif
… …

2. 在 USB 串口驱动中,过滤 NDIS 接口。由于 USB 串口跟 NDIS 都属于非标准 CDC 设备,需要防止NDIS 口被 USB 串口驱动加载而导致无法正常加载 NDIS 口驱动。

在 probe 函数内判断当前的 interface num 进行过滤,具体如下:
#if 1
    if (serial->dev->descriptor.idVendor == cpu_to_le16(VID) &&
    serial->dev->descriptor.idProduct == cpu_to_le16(PID) &&
    serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4) {
        printk(KERN_INFO “Discover the 4 th interface for fibocom\n”);
        return –ENODEV;
    }
#endif

4.3 USB串口驱动加载

执行 sudo modprobe option,使用 lsusb 和 ls /dev/ttyUSB*命令,查看是否加载成功。一般会加载出/dev/ttyUSB0、/dev/ttyUSB1、/dev/ttyUSB2、/dev/ttyUSB3之类的端口,端口顺序与章节2的顺序相同。


http://www.kler.cn/a/587618.html

相关文章:

  • 如何利用Python爬虫获取微店商品详情数据:实战指南
  • DeepSeek大模型在政务服务领域的应用
  • 使用 PaddlePaddle 官方提供的 Docker 镜像
  • 超声重建,3D重建 超声三维重建,三维可视化平台 UR 3D Reconstruction
  • PCDN 与边缘计算的结合​
  • PyTorch 深度学习实战(14):Deep Deterministic Policy Gradient (DDPG) 算法
  • Linux 命令学习记录
  • 数位小游戏
  • 聊聊 Redis 的一些有趣的特性(上)
  • ubuntu系统下添加pycharm到快捷启动栏方法
  • 【Qt】qApp简单介绍
  • ENSP实验案例-企业局域网搭建实施设计方案(计算机毕业设计作品)
  • html-to-image的使用及图片变形和无图问题修复
  • Hive SQL 精进系列:SUBSTR 函数的多样用法
  • 基于Python的天气预报数据可视化分析系统-Flask+html
  • 仿最美博客POETIZE(简易版)
  • 【go】Go 语言中 errors.Is 和 errors.As 的区别
  • LeetCode-跳跃游戏 II
  • std::invoke详解
  • 【C++】string类