物联网数据采集器硬件设计

2021-11-12 04:41高学群
中国军转民 2021年10期

高学群

摘要:嵌入式 Linux是以Linux系统为基础的嵌入式操作系统,将Linux操作系统定制成能够运行的嵌入式操作系统。嵌入式Linux不仅具有嵌入式操作系统的特点还有着大量的开放源码资源和免费的版权,最重要的是有着优异的性能和许多应用软件的支持。凭借着产品应用开发周期短,可参考和移植实时开放代码,被开发人员广泛关注。

关键词: Linux;设备驱动;软件平台

Linux系统作为嵌入式操作系統有着明显的优势,首先,Linux源代码是开放的,全球的Linux爱好者都是在不断地开发完善Linux内核;其次,Linux系统内核很小,最小可达约134KB。同时Linux内核的更新速度很快并且可以定制。Linux一大亮点就是免费。Linux适应多种CPU硬件平台表现了嵌入式操作系统必须的特色。如今,Linux操作系统不仅支持二三十种CPU,而且容易开发、使用和性能良好。Linux的平台移植成为CPU芯片行业的热门项目,移植速度更是超过了Java。在网络方面,Linux内核的结构更有优势,能够完备的支持TCP/IP协议并且能够提供了最高千兆的以太网以及无线等网络支持。

本设计选用Linux作为软件平台进行开发,内核版本2.6.39。

1基于Linux的设备驱动介绍

设备驱动在字面可以清楚的理解为“驱使硬件设备行动”。驱动是与底层硬件接触,而不同硬件设备具有不同的工作方式,所以驱动要按照具体的工作方式读写硬件设备寄存器,完成中断处理、物理内存向虚拟内存的映射等,使设备各功能能够正常工作,如能够收发数据的通信设备,能显示文字的显示设备等。

驱动的对象不是CPU内核而是存储器和外设。Linux把存储器和外设分为字符设备、块设备和网络设备。字符设备是像触摸屏、鼠标之类的以串行顺序依次进行访问的设备。块设备是可以用任意顺序进行访问并经过系统的快速缓冲的设备。虽然字符设备不经过系统的快速缓冲,但是它们之间并没有明显的界限,就像有块设备特点的Flash设备,也可以把它看成一个字符设备来访问。网络设备主要是接收和发送数据包。

2设计的嵌入式Linux驱动程序设计

2.1串口底层驱动程序

异步串口是通信最常用的资源。RS-232和RS-485都是串行数据接口标准。RS-485比RS-232在传输速度、距离等方面都有着明显优势,同时一条总线上最多可连接32个接收器。由于它们的时序完全一样,只是在电气特性上有所区别,所以它们之间也很容易实现转换。

串口驱动位于tty子系统。对于用户来说,访问串口与访问其它字符设备的方法一样,都是通过系统调用访问设备文件从而访问设备。串口主要有open函数,read函数,write函数。因此驱动程序中也要实现这三个实现函数,如图1串口驱动包含以下部分:

本设计基于Linux-2.6.39内核源码完成对串口驱动程序的开发。其主要代码在linux-2.6.39\drivers\tty\ serial\atmel_serial.c中实现。其中部分函数如下:

(1)驱动加载与卸载函数

2.2以太网口底层驱动程序

在物联网发展的今天,嵌入式系统都会拥有网络模块。以太网作为通信接口有着传输速度快、稳定等优点。它也可以作为嵌入式系统开发的调试的接口。Linux网络驱动程序的体系结构如图2所示

网络设备接口及以上层次的源码都可以通过Linux内核中找到,因此对于特定网络硬件驱动程序的移植关键在于设备驱动功能层,包含接收数据、发送数据等控制。所有网络设备在Linux中都可以抽象为一个接口,网络设备在内核中的运行情况由网络设备接口(结构体struct net_ device)来表示。以dev_base为头指针的设备链表(每个元素代表一个网络设备接口)管理着所有网络设备。大部分供系统访问和协议层调用的设备方法都在结构体net_ device中,有init函数(初始化)、open和stop函数(设备打开关闭)、hard_start_xmit函数(数据包发送)以及中断处理函数等。

本设计基于Linux-2.6.39内核源码完成对网口驱动程序的开发。其主要代码在linux-2.6.39\drivers\net\fec.c中实现。其中部分功能如下: