本站小编为你精心准备了无线通信传输技术研究参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
1LINUX文件系统
文件在系统环境中发挥着重要的作用,它为操作系统和设备提供了高效简单的访问接口。除了一般文件,程序可以调用硬盘文件、串口文件、打印机文件和其他设备文件。文件目录也是一种极特殊的文件,目录文件具有节点号和其包含文件的文件名,每一个目录入口点就是文件节点。每个文件夹下还包 括一个Makefile文件,文件包含了程序的编译规则。库文件为设备和硬盘文件提供了一种高级接口,使系统更智能。设备能够被使用,也必须借助驱动被内核使用。1.3BOOTLOADER启动过程步骤(1)硬件初始化CFG_HW_INIT(2)从nandflash加载镜像到动态内存ram,load_nandflash(IMG_ADDRESS,IMG_SIZE,JUMP_ADDR)(3)处理镜像文件,decompress_image((void*)IMG_ADDRESS,(void*)JUMP_ADDR,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.3MAKEFILE文件编译规则Makefile文件是一种脚本文件,把各级目录下的文件有规则的组织在一起;它是一种程序编译规则。它的独特优势在于“自动化编译”,就是脚本代码写好后,执行命令就会按照脚本进行编译。在脚本语言中,我们首先要把源文件编译成中间代码文件也就是.o文件,然后把.o文件链接成可执行文件。书写规则如下:(1)如果工程没有编译过,所有源文件都要编译并链接。(2)如果工程中有文件被修改,只编译和链接被修改的文件。(3)如果工程中头文件被修改,只编译引用头文件的源文件。
3网络通信硬件结构以及驱动软
3.1网络设备工作原理网络通信的发展方便了我们的生活,因为地形复杂的山地不方便仪器的架设。而通过网络通信大大丰富了系统的功能。设备发送队列dev_queue_xmit()申请传输数据,在设备结构描述中找到相应的设备发送网络数据包函数和设备名,发送网络数据包函数hard_start_xmit()通过物理设备发送网络数据包。和前两种驱动类型不同,网络驱动能够异步接收和发送数据包文件。它还要完成发地址,修改传输参数,阻塞处理和错误统计等任务。内核网络子系统完全依赖网络协议和硬件协议。网络协议是实现网络传输的各种协议;硬件协议是网络设备硬件驱动程序,负责与硬件设备通信与数据传输驱动接口都被结构体structnet_device表示:初始化的主要作用是为网络设备提供一个设备结构文件;网络设备和结构文件紧密连接,相互依赖。结构包含:打开设备,关闭设备,设备配置,硬件传输,I/O控制,设备状态,重建文件头,网络硬件结构件头,传输超时,看门狗超时,地址解析协议禁用标志,设置模块所有者等参数。网络硬件结构件头包含:设备名,设备内存信息,网络接口的I/O地址,中断号,接口选择,DMA通道,设备状态,指向下一个设备的指针,初始化。网络硬件结构文件的很多参数都可以在ifconfig中看到。除了以上网络设备结构文件可见的参数外,网络设备结构文件中还有很多不可见的参数,这些参数在结构中也都发挥着重要作用。内核网络子系统即网络接口是系统初始化时实时自动生成的,内核支持而实际不存在的网络物理设备。而对于字符设备和块设备,无论有没有实际的物理设备,内核都生成其接。当驱动链接到内核时,网络驱动不在内核里声明此网络设备结构;而是在drivers/net/space.c里声明设备结构文件,这个文件的下有很多网络设备结构的声明。系统启动时,网络初始化代码把所有的网络设备结构都初始化,初始化时仅仅是给设备本身一个指针。另外,网络设备驱动的注册也不需要创建设备文件,而是直接通过设备名从设备描述结构链表中找到对应的structnet_device结构,可以直接用此结构对应的操作函数进行注册。
3.2网络通信硬件电路以太网MAC模块兼容IEEE802.3标准,包含地址检测,统计和控制寄存器,收发块,DMA接口。地址检测辨认4个标准的48位地址,它还包含一个64位应急寄存器来匹配广播和单发地址。统计寄存器块对收发操作相关的各种类型事件计数,能让软件产生网络管理统计兼容IEEE802.3,它和状态字被存在接收缓存表中。DM9161A是具有网络功能,工作在物理层,低功率收发芯片。从而决定物理层设备的职能,但这些功能依然由协议完成。串口管理接口包括管理数据时钟和管理数据输入输出信号。自动识别媒体功能能够让它自动识别是直连还是交叉双绞线,通过置位某特定寄存器的设置位即可。图3网络芯片硬件电路9161原理图。
3.3网络通信软件实现进行网络编程,套接字是至关重要的;套接字代表通信的端口,通过套接字建立通信的桥梁。套接字有描述符,应用程序可以通过描述符操作套接字。通过socket()创建套接字;同时套接字只有和地址绑定之后才有意义,通过bind()进行地址绑定。函数socket()有四个参数,分别表示通信域,套接字类型,制定协议。通过套接字和connect()函数建立一个连接,建立连接之后,我们就可以通过send()和recv()发送和接收数据了。函数send()有四个参数:第一个表示通信,连接套接字;第二个是设置发送缓冲区;第三个表示发送内容字节数;第四个是传输数据标志。发送成功则返回已发送数据的字节数,否则返回-1。函数recv()也有四个参数:第一个用来通信的套接字;第二个读缓冲区设置;第三个读最大字节数;第四个接收数据标志。而返回值有三种情况:大于零表示成功接收数据返回已接收字节数目;等于零表示无数据接收;小于零表示接收数据出错。网络驱动程序客户端仔程序流程如图4。
作者:王庆吉单位:吉林大学仪器科学与电气工程学院