栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

域格模组在linux下使用

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

域格模组在linux下使用

Linux下域格模组的加载与应用

文章目录
  • Linux下域格模组的加载与应用
  • 前言
  • 一、模组在Linux下驱动加载
    • 1.域格在Linux下加载需要使用 USB 转串口的驱动,这个驱动系统基本都是配备的,简单介绍下,添加驱动需要配置 Linux内核
    • 2.检测驱动
    • 3.驱动创建原理
  • 二、模组在Linux下过滤接口以及option.c介绍
    • 1.黑名单过滤接口
    • 2.interface 过滤接口
    • 3.临时加载驱动
    • 4.检测过滤情况
  • 二、Linux下AT指令交互


前言

Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器方面保持着强劲的发展势头以外,在个人电脑、嵌入式系统上都有着长足的进步。使用者不仅可以直观地获取该操作系统的实现机制,而且可以根据自身的需要来修改完善Linux,使其最大化地适应用户的需要。意思就是Linux系统蛮重要的,模块在这个系统下的使用是必要的。


一、模组在Linux下驱动加载 1.域格在Linux下加载需要使用 USB 转串口的驱动,这个驱动系统基本都是配备的,简单介绍下,添加驱动需要配置 Linux内核

cd kernel
make menuconfig
device drivers -> usb support -> usb serial converter support
选中如下组件:
USB driver for GSM and CDMA modems
选中后保存配置。

2.检测驱动

3.驱动创建原理

option驱动分别注册到了usb总线和usb-serial总线,当接口驱动和id匹配后,我们通过id可以找到它的驱动,这里即是option驱动,option驱动在注册时就绑定了探测函数usb_serial_probe(),所以会执行它,而在usb_serial_probe()函数内又会调用端口的匹配,即usb_wwan_port_probe(),待这些工作完成之后,最后通过tty_register_device(usb_serial_tty_driver, minor, dev)完成ttyUSBx设备的创建。
具体驱动创建过程可以参考链接: linux options.

二、模组在Linux下过滤接口以及option.c介绍 1.黑名单过滤接口

在介绍过滤接口之前先介绍option.c,就以域格 ASR模块需加载 DIAG口,AT 口及 modem 口,其他无关端口需过滤,可根据实际情况选择处理
过滤的黑名单方式是kernel 版本支持 blacklist 的,在 option.c (路径一般为 drivers/usb/serial/option.c)中的 option_ids 中添加 blacklist,可使驱动在加载时自动跳过 blacklist 指定的 interface。
在文件中找到 option_ids[]的数组,添加域格模块的 VID 和 PID,模块的PID、VID可以参考上图lsusb所圈,参照以下方法添加VID、PID:

设置 interface 0、1 不加载 option 驱动,添加内容如下:

黑名单过滤源码如下:

static bool is_blacklisted(const u8 ifnum, enum option_blacklist_reason reason,
			   const struct option_blacklist_info *blacklist)
{
	unsigned long num;
	const unsigned long *intf_list;

	if (blacklist) {
		if (reason == OPTION_BLACKLIST_SENDSETUP)
			intf_list = &blacklist->sendsetup;
		else if (reason == OPTION_BLACKLIST_RESERVED_IF)
			intf_list = &blacklist->reserved;
		else {
			BUG_ON(reason);
			return false;
		}

添加相应的ID以及黑名单到 option_ids 数组中:代码如下

option_ids格式如下::

static struct usb_serial_driver option_1port_device = {
	.driver = { //设备驱驱动
		.owner =	THIS_MODULE,
		.name =		"option1", //设备驱动名称
	},
	.description       = "GSM modem (1-port)", //描述符
	.id_table          = option_ids, //厂商id和产品id表
	.num_ports         = 1,
	.probe             = option_probe, //探测之后存储该usb串口设备对应的id(VID/PID)
	.open              = usb_wwan_open,
	.close             = usb_wwan_close,

2.interface 过滤接口

还是先添加域格模块的 VID 和 PID:

相比黑名单方式,只需要添加相应的ID到 option_ids 数组中

在 option_probe 函数内判断当前 interface 号进行过滤:

代码如下(示例):

static int option_probe(struct usb_serial *serial,
			const struct usb_device_id *id)
{
	struct usb_interface_descriptor *iface_desc =
				&serial->interface->cur_altsetting->desc;
	struct usb_device_descriptor *dev_desc = &serial->dev->descriptor;
3.临时加载驱动

这个应用于usb驱动加载不了的情况,在命令行发送指令:
sudo modprobe usbserial vendor=0x1286 product=0x4e3c

4.检测过滤情况

二、Linux下AT指令交互

过滤后模块开机,加载 USB 驱动,获取 USB端口:ttyUSB0~ttyUSB2。

ttyUSB0 -> DIAG
ttyUSB1 -> AT
ttyUSB2 -> Modem
操作AT指令可以使用echo cat,以向 ttyUSB2 发送命令 AT 为例,可按以下命令操作(通过 ctrl+c 退出)

注:附加一个权限错误以示为证。
echo cat一般是用于系统固件不可相关的指令工具,工具就以minicom为例:
命令行输入minicom -s

选择ttyUSB1,波特率相关的也可以设置

直接进入发送AT指令

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/618866.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号