基于嵌入式的数据库设计

2015-05-04 07:48李少雄
科技创新与应用 2015年13期
关键词:嵌入式

摘 要:文章提出了基于嵌入式的简单数据库设计。设计了以S3C2440A微处理器作为数据库数据采集的硬件控制核心,然后指出了嵌入式下数据库的需求特点,对在ARM-Linux下的SQLite数据库的体系进行分析,再结合ARM-Linux开发板给出了如何实现SQLite数据库的具体方法。

关键词:嵌入式;SQLite数据库;ARM-Linux开发平台

引言

现有的RTU多基于ARM7开发板上的程序植入和数据库管理,对于多线程的数据管理,以及种类繁多的第三方数据接口,显得力不从心。本课题拟在ARM9处理器上进行数据库的建立,对底层的数据采集,并对采集数据进行历史保留和远程管理。其中,数据库的建立运用可基于嵌入式系统的小型数据库SQlite,SQLite是一款嵌入式数据库,没有独立运行的进程,在所服务的应用程序在应用程序进程空间中是共同存在的。它与应用程序的代码也是一起的,作为它所服务程序的一部分,同时提供了丰富的数据库接口;而对数据采集,则由底层设备驱动程序完成。

1 数据库数据采集的硬件平台设计

为了实时的对现场数据的采集和传输,我们采用功能强大的ARM9作为主控处理器,外接相关功能模块,在ARM9处理器上嵌入Linux操作系统,其强大的多任务和多线程以及设备独立性能够较好的发挥ARM9强大的控制功能。

现场数据采集主要由:数字量输入、输出模块、模拟量输入模块组成。数字量输入模块将外部采集的数据经过处理输入到ARM9处理器;模拟量输入模块采集外部输入的模拟量;数字量输出模块采集主控处理器的输出量。如图1所示。

图1 硬件系统主要构成图

数据的存储和传输部分主要包括S3C2440A微处理器、存储器模块、数据通信模块、RS458模块、以太网模块、无线功能模块等。该处理器是基于ARM920T核心的16/32位的精简指令集(RISC)微处理器,S3C2440A为手持设备和一些小型应用提供了低耗能、低价格、高性能提供了一个绝佳的选择。它采用了新的总线结构AMBA(Advanced Microcontroller Bus Architecture),这一结构具有独立的16KB指令缓存和16KB数据缓存,每个都是由8字长的行组成。因为它具有一套完整的系统外设,S3C2440A降低了整体的系统成本并且不需配置另外的组件。这部分的主要功能是对现场采集数据进行处理、存储和显示,之后通过网络把所采集的数据上传到远程的PC机网页上。远程的PC机主要负责的功能是对所上传的数据进行监测、分析、处理。必要时对采集终端进行控制。

2 Linux下的数据库的应用

基于Linux系统下的数据库数不胜数,大型应用于商业开发的数据库有Sybase、Empress、Oracle、Informix等,小型数据库常用的有mSQL、MySQL、Sqlite等等。应用于商业开发的大型数据库一般价格高昂并且体积庞大,不符合嵌入式下数据库要求。在小型数据库中MySQL虽说在保持体积较小的情况,提供了足够的应用与一般开发的功能,但是在应用于商业用途也要收费。mSQI具有嵌入式开发的条件,但是由于它并非完全开源的代码,在使用期限上不符合本设计的要求。余下的开放源码数据库中,除了占用空间较大以外,学习难度也比较大,如果非要采用的话必然会加大开发成本。

SQLite支持大部分的SQL的语句,采用单文件存放数据库,存储速度也快,在操作语句上与关系数据库类型更加接近,最重要的是它的代码使完全开源的,不用收费。基于SQLite的设计理念,虽然相较与商业用途的大型数据库在功能上有所不足,但是在开源组织的日渐完善下差距逐渐缩小。在应用上如果不需要存储过程或者复杂的表之间的关联的话,SQLite是个非常好的平衡点。

3 SQLite的体系结构以及在Linux平台上的开发技术

3.1 SQLite的体系结构

SQLite有一套简洁的、模块化的体系结构,并引进了一些方法进行有关关系型数据库的管理。SQLite的体系结构由3个子系统和8个独立模块组成,如图2所示,它显示了SQLite的主要成分及各成分之间的关联,其中有一些相当接近于关系数据库管理。

图2 SQLite的体系机构

接口位于整个结构的顶端,由SQLite C API组成。所有与SQLite交互的程序和库文件都是通过接口进行的。Tokenizer(词法分析器)和Parser(语法分析器)协同对文本形式的查询语言进行分析,验证其语法的有效性,然后转化成底层能更容易处理的层次化数据结构。这个结构的中心部分便是数据库引擎VDBE(Virtual DataBase Engine)。VDBE在字节码上工作,区别于顶层操作系统、系统体系结构和CPU。B-tree、page cache(页缓存)、操作系统接口组成了整个后端。B-tree和pager作为信息代理,他们并不知道信息内容,只是对这些信息进行移动和排列。

3.2 SQLite在ARM上的实现

SQLite嵌入式数据库的代码使开源的,根据不同需求的硬件平台,对源码进行交叉编译即可实现移植。在上的编译过程主要有以下几个步骤:

解压sqlite压缩文件

tar -zvxf sqlite-autoconf-3071300.tar.g

得到文件sqlite-autoconf-307130

进入sqlite-autoconf-3071300目录

[root@localhost ~]# cd /home/sqlite-autoconf-3071300/

配置

[root@localhost sqlite-autoconf-3071300]# ./configure

编译

[root@localhost sqlite-autoconf-3071300]# make

安装

[root@localhost sqlite-autoconf-3071300]# make install

默认安装路径为/usr/local/及系统标准目录

头文件 sqlite3.h sqlite3ext.h安装在 /usr/local/include下

以及头文件标准目录 /usr/include下

库文件

libsqlite3.a libsqlite3.so.0.8.6 libsqlite3.so.0 libsqlite3.so

安装在/usr/local/lib目录下并且共享库文件libsqlite3.so libsqlite3.so.0 libsqlite3.so.0.8.6安装在系统库文件标准目录/usr/lib下,可执行文件sqlite3安装在/usr/local/bin目录下以及系统可执行标准目录/usr/bin下,帮助文档man安装在/usr/local/share目录下。

修改Makefile文件:

将代码行BBC=arm-linux-gcc-g-02改成BBC=gcc-g-02。用make生成sqlite、libsqlite.a和libsqlite.so。为了减小执行文件大小可用strip处理,去掉其中的调试信息。

在ARM板上运行SQLite:

将SQLite下载到ARM板的/tmp目录,修改权限并运行:

chmod +wx sqlite

./sqliteest.sqlite

会出现:

sqlite>

如果一切正常,SQLite已经在ARM-Linux下正常运行,然后就可以基于此进行数据库数据的远程处理。

4 结束语

该远程数据库的设计,可以提高现阶段RTU在ARM7开发板上的历史数据存储和数据借调的缺点,在分析对比了各数据库在嵌入式下的表现,选取了比较符合需求的SQLite数据库,并且完成了在ARM-Linux下的编译以及开发工作。实践证明,基于ARM9的数据库设计可以完成对数据采集更多的需求。

参考文献

[1]李文进,韩晓萍.ARM平台在嵌入式远程数据采集系统中的设计与实现[J].继电器,2006,05:64-67.

[2]郝晓弘,李桂肃,瞿华.基于移动网络的嵌入式远程数据终端实现[J].微计算机信息,2007,05:24-25+23.

[3]黄万志,陈永煌.基于嵌入式Linux的远程数据采集系统[J].现代电子技术,2007,04:55-57.

[4]周卫玉,孙新亚.基于ARM和uCLinux的嵌入式远程数据采集终端[J].计算机工程,2004,23:156-158.

作者简介:李少雄(1990,3-),男,陕西省咸阳市,西安石油大学,2012级,硕士研究生,计算机院,计算机科学与技术,计算机技术。

猜你喜欢
嵌入式
TS系列红外传感器在嵌入式控制系统中的应用
嵌入式系统通信技术的应用
搭建基于Qt的嵌入式开发平台
嵌入式软PLC在电镀生产流程控制系统中的应用
Altera加入嵌入式视觉联盟
倍福 CX8091嵌入式控制器