电磁探测装备无线通信传输技术研究

2014-02-27 13:16王庆吉
网络安全技术与应用 2014年4期
关键词:驱动程序网络设备内核

王庆吉

(吉林大学仪器科学与电气工程学院 吉林 130061)

0 引言

随着现代电子技术、数据处理解释和计算机处理技术的发展,电法探测仪器逐渐成型,并且发展成为地下资源勘探中十分有效的方式之一,对探测仪器功能的完善意义重大。

可控源电磁探测系统网络通信技术的实现,不但丰富了可控源电磁探测系统的数据保存,还为可控源电磁探测系统通信技术提供了技术保证。完成无线通信设备驱动程序的编写,并调试驱动软件模块,将其加载到硬件平台上工作的内核中,调试并修改程序。系统整体功能框架如图1所示包括系统移植以及bootloader启动分析;数据模块和网络模块。

图1 系统功能框

1 嵌入式系统平台以及设备驱动程序

1.1 嵌入式系统简介

嵌入式系统是专用的计算机系统,在使用嵌入式系统之前,必须搭建嵌入式系统平台。嵌入式系统平台的构建主要是系统移植。本文用到的嵌入式系统的软件操作系统是Linux,并在此操作系统下编写了相应的设备驱动程序。Linux是从Unix操作系统发展而来的,Unix操作系统是由贝尔实验室开发的。Linux已经成为一个备受欢迎的多线程,多任务的操作系统。广泛用于多种硬件平台,操作系统本身仅是由高效的可开发系统核构成。由于用户间的免费共享以及系统源文件的开放,使得这个系统具有很好的流传。Linux应用程序主要是由两种特殊类型的文件:可执行文件excutables和脚本scripts。可执行文件直接被计算机运行,它们可以生成窗口文件Windows.exe files。脚本文件是另一个程序的指令集,按照脚本可以完成程序的解释。

1.2 LINUX文件系统

文件在系统环境中发挥着重要的作用,它为操作系统和设备提供了高效简单的访问接口。除了一般文件,程序可以调用硬盘文件、串口文件、打印机文件和其他设备文件。文件目录也是一种极特殊的文件,目录文件具有节点号和其包含文件的文件名,每一个目录入口点就是文件节点。每个文件夹下还包括一个Makefile文件,文件包含了程序的编译规则。库文件为设备和硬盘文件提供了一种高级接口,使系统更智能。设备能够被使用,也必须借助驱动被内核使用。

1.3 BOOTLOADER启动过程步骤

(1)硬件初始化 CFG_HW_INIT

(2)从nandflash加载镜像到动态内存ram,load_nandflash(IMG_ADDRESS,IMG_SIZE,JUMP_ADDR)

(3)处理镜像文件,decompress_image((void*)IMG_ADDRESS,(void*)JUMP_A DDR,IMG_SIZE)

(4)开始应用程序,设置偏移量

Crt0_gnu.S文件由汇编语言构成的初始文件。它是首先被执行的指令集,启动程序乃至整个软件操作系统运行的第一个文件。应用程序开始的入口点,设置了中断向量并初始化堆栈等,最后进入main主函数中和跳到应用程序入口。

2 设备驱动程序

2.1 设备驱动程序基本概念

设备驱动在操作系统Linux内核发挥重要作用,使得硬件成为对某些特定程序作出相应反应的内部可编程程序接口,在执行过程中完全隐藏了设备工作的具体细节。通过一系列依赖特定驱动程序的标准指令来实现用户要完成的行为功能,将这些标准指令组织起来,让实际硬件根据指令发挥相应的作用,这就是设备驱动要完成的。这个所谓的可编程的接口驱动能够独立于内核存在,也可以在内核运行需要时进行加载。事实上许多设备驱动和用户程序一起发行用来帮助构造和使用目标设备。这些程序包含很多种,从简单公用程序到完全的图形化应用程序。

2.2 设备驱动程序分类和模块化

Linux将设备驱动分为 3种,每个模块至少完成其中的一种设备驱动类型。这三种设备驱动的类型分别是:字符型设备模块、块设备模块、网络设备模块。设备驱动的模块化使得设备驱动划分成不同的类型,不同类型之间并不是孤立的,可以用一系列的代码将不同的设备驱动整合成一个大的模块具备更强大的功能。通过insmod和rmmod可以对模块进行加载和卸载,而且只有超级用户才有权限加载和卸载模块。通过insmod命令调用模块中的init_module函数通知内核有模块进行注册,然后直接引用内核函数register_capability( ),一旦内核有空闲就发送响应请求执行模块程序。此时,模块程序中可以直接调用内核函数进行内核操作。模块注销时,不用申请响应而是直接通过unregister_capability( )注销。链接模块到内核过程如图2。

图2 链接模块到内核图

2.3 MAKEFILE文件编译规则

Makefile文件是一种脚本文件,把各级目录下的文件有规则的组织在一起;它是一种程序编译规则。它的独特优势在于“自动化编译”,就是脚本代码写好后,执行命令就会按照脚本进行编译。在脚本语言中,我们首先要把源文件编译成中间代码文件也就是.o文件,然后把.o文件链接成可执行文件。书写规则如下:

(1)如果工程没有编译过,所有源文件都要编译并链接。

(2)如果工程中有文件被修改,只编译和链接被修改的文件。

(3)如果工程中头文件被修改,只编译引用头文件的源文件。

3 网络通信硬件结构以及驱动软

3.1 网络设备工作原理

网络通信的发展方便了我们的生活,因为地形复杂的山地不方便仪器的架设。而通过网络通信大大丰富了系统的功能。设备发送队列dev_queue_xmit( )申请传输数据,在设备结构描述中找到相应的设备发送网络数据包函数和设备名,发送网络数据包函数hard_start_xmit( )通过物理设备发送网络数据包。和前两种驱动类型不同,网络驱动能够异步接收和发送数据包文件。它还要完成发地址,修改传输参数,阻塞处理和错误统计等任务。内核网络子系统完全依赖网络协议和硬件协议。网络协议是实现网络传输的各种协议;硬件协议是网络设备硬件驱动程序,负责与硬件设备通信与数据传输驱动接口都被结构体struct net_device表示:

初始化的主要作用是为网络设备提供一个设备结构文件;网络设备和结构文件紧密连接,相互依赖。结构包含:打开设备,关闭设备,设备配置,硬件传输,I/O控制,设备状态,重建文件头,网络硬件结构件头,传输超时,看门狗超时,地址解析协议禁用标志,设置模块所有者等参数。网络硬件结构件头包含:设备名,设备内存信息,网络接口的I/O地址,中断号,接口选择,DMA通道,设备状态,指向下一个设备的指针,初始化。网络硬件结构文件的很多参数都可以在ifconfig中看到。除了以上网络设备结构文件可见的参数外,网络设备结构文件中还有很多不可见的参数,这些参数在结构中也都发挥着重要作用。内核网络子系统即网络接口是系统初始化时实时自动生成的,内核支持而实际不存在的网络物理设备。而对于字符设备和块设备,无论有没有实际的物理设备,内核都生成其接。当驱动链接到内核时,网络驱动不在内核里声明此网络设备结构;而是在drivers/net/space.c里声明设备结构文件,这个文件的下有很多网络设备结构的声明。系统启动时,网络初始化代码把所有的网络设备结构都初始化,初始化时仅仅是给设备本身一个指针。另外,网络设备驱动的注册也不需要创建设备文件,而是直接通过设备名从设备描述结构链表中找到对应的struct net_device结构,可以直接用此结构对应的操作函数进行注册。

3.2 网络通信硬件电路

以太网MAC模块兼容IEEE802.3标准,包含地址检测,统计和控制寄存器,收发块,DMA接口。地址检测辨认4个标准的48位地址,它还包含一个64位应急寄存器来匹配广播和单发地址。统计寄存器块对收发操作相关的各种类型事件计数,能让软件产生网络管理统计兼容 IEEE802.3,它和状态字被存在接收缓存表中。DM 9161A是具有网络功能,工作在物理层,低功率收发芯片。从而决定物理层设备的职能,但这些功能依然由协议完成。串口管理接口包括管理数据时钟和管理数据输入输出信号。自动识别媒体功能能够让它自动识别是直连还是交叉双绞线,通过置位某特定寄存器的设置位即可。图3网络芯片硬件电路9161原理图。

图3 网络芯片9161原理图

3.3 网络通信软件实现

进行网络编程,套接字是至关重要的;套接字代表通信的端口,通过套接字建立通信的桥梁。套接字有描述符,应用程序可以通过描述符操作套接字。通过 socket( )创建套接字;同时套接字只有和地址绑定之后才有意义,通过bind( )进行地址绑定。函数 socket( )有四个参数,分别表示通信域,套接字类型,制定协议。通过套接字和connect( )函数建立一个连接,建立连接之后,我们就可以通过send( )和recv( )发送和接收数据了。函数send( )有四个参数:第一个表示通信,连接套接字;第二个是设置发送缓冲区;第三个表示发送内容字节数;第四个是传输数据标志。发送成功则返回已发送数据的字节数,否则返回-1。函数 recv( )也有四个参数:第一个用来通信的套接字;第二个读缓冲区设置;第三个读最大字节数;第四个接收数据标志。而返回值有三种情况:大于零表示成功接收数据返回已接收字节数目;等于零表示无数据接收;小于零表示接收数据出错。网络驱动程序客户端仔程序流程如图4。

图4 网络通信客户端流

[1]杨建华.嵌入式 Linux设备驱动程序开发[D].华南理工大学硕士论文,2010.

[2]王岩,王子牛.嵌入式Linux设备驱动的研究与开发[J].贵州工业大学学报(自然科学版),2006,32(19):283-285.

[3]张静.嵌入式ARM 9200与MCP2510的通信研究[D].太原科技大学硕士论文,2008.

[4]吴岳.Linux c程序设计大全.清华大学出版社[M].北京:2009年3月第一版.

猜你喜欢
驱动程序网络设备内核
多内核操作系统综述①
网络设备的安装与调试课程思政整体设计
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
一种基于C# 的网络设备自动化登录工具的研制
阻止Windows Update更新驱动程序
Linux内核mmap保护机制研究
计算机硬件设备驱动程序分析
防范加固SNMP团体名漏洞
妙用鼠标驱动