基于openSUSE的SIM900A驱动模块的设计

2019-11-11 13:14杨建军
电脑知识与技术 2019年27期
关键词:串口

杨建军

摘要:针对广泛用于紧凑型嵌入式通信设备中的SIM900A模块的驱动设计,对其组成系统的硬件和基于Linux的驱动构架进行分析;采用典型的字符驱动模式,以openSUSE内核为平台,设计了SIM900A的字符驱动模块,模块中通过将串口的操作封装于ioctl命令函数中,并引入命令字SETPORTID供应用程序调用方法,使得对串口的操作相比于经典的操作方式更具有灵活性和适应性,并减少上层应用对SIM900A操作的复杂性;现场测试测试结果显示,该模块可以方便而简单地设置串口参数的不同工作方式;相应的上层应用程序相对于不采用封装串口的驱动,代码量要节省1/3的量。

关键词:openSUSE;GSM模块;SIM900A;字符设备驱动;串口

中图分类号:TP311.52      文献标识码:A

文章编号:1009-3044(2019)27-0065-03

Abstract: The typical hardware architecture and Linux-based character driver module based on the SIM900A, which is widely used in small embedded devices, has been analyzed under openSUSE system. Then focused on the designing of the driver module, to improve the flexibility of the driver module to the deference of serial ports, a new command word SETPORTID has been introduced, which encapsulated the whole operation of serial port and made the apps more convenient to control the SIM900A through serial interface than the traditional Linux-based character driver. The test app of the AT commands indicates the driver module has an adaptability to different serial port parameters. The amount of codes, compared to apps without encapsulation of serial port, could get a decrease of 1/3.

Key words: openSUSE; GSM module; SIM900A; character device driver; serial interface

1 背景

OpenSUSE是著名Novell公司旗下的 Linux的发行版,发行量在欧洲占第一位。它采用的KDE4.3作为默认桌面环境,同时也提供GNOME桌面版本。它的软件包管理系统采用自主开发的YaST,颇受好评,其最新版本是13.2。它不仅是优秀的桌面系统,而且作为中小型企业服务器也是有十分的优势的。SIM900作为SIMCom专为中国市场设计的紧凑型无线模块产品,属于双频GSM/GPRS模块, SIM900A采用工业标准接口,工作频率为GSM/GPRS 900/1800MHz,可以低功耗实现语音、SMS、数据和传真信息的传输。针对基于其Linux平台的驱动开发进行设计,对其他延展设计具有参考意义。

2 系统构架

本系统中,SIM900模块采用ALientek公司的ATK-SIM900A-V15开发板,在系统一端采用windows中用VMWare搭载openSUSE13.2的模式进行,这样做的好处是设计成本较低,整个系统框图如图1所示。

在该系统中,SIM900A开发板和PC用串口相连,采用最简单的通讯方式[1],在PC端,利用虚拟机搭建起openSUSE環境,在配置openSUSE开发环境时,需要将Kernel开发环境的相关包在安装系统时就选择好,否则需要在之后重新搭建。系统的工作过程为SIM900A模块通过串口接受来自串口的AT指令,如果指令格式正确,则执行,否则通过串口立即返回指令错误的信息给上位windows主机。上位机接受来自人机接口的动作,根据该动作,构建正确的AT指令,通过串口发送给SIM900A模块,并等待来自串口的下位无线模块的执行结果,整个过程基本上采用应答的方式进行。

3 驱动构架

本系统驱动构架使用标准的Linux的字符驱动模式[2][3]开发,在整个系统中的逻辑位置如图2所示。

在系统中,本设计主要提供一个封装上层应用的具体需求为SIM900A的AT指令的过程,并将该指令通过串口发送给SIM900A模块的过程。SIM900A的移动通讯模块的驱动作为典型字符驱动模式进行开发,在驱动构架上,包含了两个主要部分:串口控制和SIM900A字符流驱动编写,串口控制的流程[5][6]如图3所示:

在串口的操作过程中,就是对/dev/tty0和/dev/tty1两个文件的操作,在设置串口传输协议的参数时,使用tcgetattr和tcsetattr进行读写,一般而言,在设置时,采用先读后写的方式进行,不需要调整的参数维持原先的值即可;而SIM900A的典型字符驱动模式[2-4]的设计,可以采用如图4的流程进行:

在SIM900A的驱动的设计中,主要是需要将串口的读写嵌入到字符设备驱动的操作函数中去,在这里为了提供对串口号的灵活访问,故提供一个设置串口端口号的IOCTL控制操作命令SETPORTID,若为0,则选择tty0,若为1选择tty1。而其他函数的设计完全是典型的字符设备函数的编写方式。有了上面的思路,就可以完成SIM900A的基于Linux的设计了。

4 驱动实现

在此,实现SIM900A的字符设备驱动设计,需要进行makefile和C源文件的编写,makefile是自动编译规则文件[3]。

4.1 makefile的编写

在驱动模块中的makefile和应用程序模块中的makefile的最大的区别在于需要指定内核编译链接的目录所在,在本次设计中,内核编译链接目录用了openSUSE的/lib/modules/ 3.16.6-2-desktop /build,在进行驱动开发,编译出的模块所用的库必须和目标系统的内核模块的版本保持一致,否则内核模块的加载就会有问题。下面就是本次设计的Makefile的内容。

通过使用该makefile进行模块编译,最终产生sim900a.ko的内核驱动模块,可以采用insmod将该模块加载到系统内核中去。

4.2 字符驱动关键结构体和函数的设计举例在各个函数的设计中,对于本用例特殊的函数时需要对串口进行选择和设置,为此,需要定义串口参数结构体和SIM900A内核控制的结构体,这两个结构体的定义如下:

4.3 编译

在完成以上编码工作之后,就可以在终端窗口中,在驱动文件目录处用make命令编译最终产生sim900a.ko,然后利用insmod命令加载之。

4.4 驱动测试结果

在进行该驱动模块的驱动测试时,应用端的程序需要按照如下的顺序进行执行编程处理:

1)找到设备驱动在加载时创建的主设备号;

2)用mknod创建名为“/dev/sim900a”的设备节点;

3)在软件程序中,调用的次序是先open该设备,然后调用ictl设置串口参数(如果是串口0,则在调用ictl时,需要在串口参数的id号中传递0,否则传递1即可),然后进行写操作(主要是AT命令[6]的字符串发送)和读操作(sim900执行相应命令后的返回数据);

4)关闭设备。

5 结束语

本驱动经测试可以完成简单的AT命令[7]的发送和结果的接收,可以在SIM900A与系统的两个不同串口连接后,简单调整应用程序中的串口号,就可以完成命令的接收和发送。如果需要进一步完善,则需要对AT命令进行分类封装。

参考文献:

[1] Michael R Sweet. Serial Programming Guide for POSIX Operating Systems[EB/OL]. 5th ed. http://digilander.libero.it/robang/rubrica/serial.htm#CONTENTS.

[2] 馮国进. Linux驱动程序开发实例[M]. 北京: 机械工业出版社, 2012: 13-25.

[3] 宋宝华. Linux设备驱动开发详解[M]. 2版. 北京: 人民邮电出版社, 2010: 92-103.

[4] 付智华. Linux字符设备驱动程序设计[J]. 电脑知识与技术, 2010, 6(15): 3941-3944.

[5] 龚建伟, 熊光明. visual c++/turbo c串口通信编程实践[M]. 2版. 北京: 电子工业出版社, 2007: 168-195.

[6] 华清远见嵌入式培训中心. 嵌入式Linux应用程序开发标准教程[M]. 2版. 北京: 人民邮电出版社, 2009: 172-189.

[7] SIMcom. SIM900 AT Commands Set[Z]. 2010.

【通联编辑:谢媛媛】

猜你喜欢
串口
基于串口服务器的通信机串口通信解决方案
浅谈AB PLC串口跟RFID传感器的通讯应用
船舶电子设备串口数据的软件共享方法
详解lAP15W4K58S4单片机的串行口通信
串口嗅探技术研究
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
基于单片机串口通信的转动天线角度传输
串口技术的实物调试和虚拟仿真联合教学模式
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信