您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 5.6 嵌入式数据库移植
嵌入式系统程序设计大连理工大学软件学院嵌入式系统工程系赖晓晨嵌入式数据库嵌入式数据库简介SQLite的移植SQLite测试一、嵌入式数据库简介嵌入式数据库系统为嵌入式平台高效地管理和存储数据提供了解决方案,随着后PC时代的到来,嵌入式数据库技术现在已经从研究领域逐步走向广泛的应用领域。嵌入式数据库的功能在嵌入式系统中,需对各种数据进行存储和管理,对数据的处理可采取文件方式和数据库方式。文件方式是由用户直接对文件进行操作,应用程序以独占方式打开数据文件,数据的共享性、结构化和应用软件的可重用性差,影响了系统的整体性能。对于数据库方式,由于数据和程序相互独立,通过事务来进行调度与并发控制,可有效地对数据进行存取、查询等共享操作,同时借助于数据库所具有的安全性检验、完整性检查等多种安全措施,可确保系统具有较好的整体性能。嵌入式数据库的特点体积适当:占用尽量少的ROM、RAM及CPU的资源。功能齐备:在嵌入式设备中,数据库的管理对用户来说是透明的,这就要求此数据库能够自动完成启动初始化、日志管理、数据压缩、备份、数据恢复等功能;而且嵌入式设备经常有不可预料的硬复位,这就需要此数据库有高度的健壮性;能够提供完备开发文档。可移植性:嵌入式系统的平台种类繁多,因此嵌入式数据库应有一定的可移植性,以适用于不同的软硬件平台。代码开源:开源的代码在产品的开发过程中不仅可以减少开发成本,更重要的是为后期的维护完善和稳定运行都提供了昀为彻底的解决方法。ARM平台常用嵌入式数据库SQLiteBerkeleyDB1、SQliteSQlite是理查德.希普用一个小型的C库开发的一种强有力的嵌入式关系数据库管理体制。虽然功能较BerkerlyDB稍显逊色,但它简单易学并且速度较快,同时提供了丰富的数据库接口,提供了对SQL92的大多数支持:支持多表和索引、事务、视图、触发和一系列的用户接口及驱动。SQlite(续)目前支持SQLite的程序语言非常多,你能想到的大概都有了。这套数据库2005年还赢得了美国O'ReillyOpenSourceConference的昀佳开放源代码软件奖,奖评是“有什么东西能让Perl,Python,PHP,Ruby语言团结一致地支援的?就是SQLite”SQLite的特点SQLite有以下特性:支持ACID事务、零配置、无需安装和管理配置、存储在单一磁盘文件中的一个完整的数据库、数据库文件可以在不同字节顺序的机器间自由共享、支持数据库大小至2TB、足够小全部源码大致3万行C代码、250KB、比目前流行的大多数据库运行速度快、提供了对事务功能和并发处理的支持.SQlite的发展:2000年由D.RichardHipp开始开发2001年发布2.0v2004年发布3.0v(采用了不同的数据文件格式以及编程接口)SQlite的目标:易于管理、操作、维护、自定义以及提供易用的编程接口SQlite的优势:1.比MySQL快(2倍),比PostgreSQL(20倍)快2.ACID兼容(原子性,一致性,独立性,可持久性),支持视图,子查询,触发器单个库文件中包含数据库引擎与接口,且其运行不依赖其它库3.为C/C++,Perl,PHP等应用提供了接口4.免费5.允许为SQL命令集动态添加自定义函数(简单函数及聚集函数),而无需重新编译SQlite库文件SQLite工作过程当SQL语句被分析(标记处理器、分析器)后,VDBE(虚拟数据库引擎)便开始工作。由代码生成器将分析树翻译成一个袖珍程序,随后这些袖珍程序又被组合成VDBE的虚拟机器语言表示的一系列指令,由虚拟机器来执行。如此反复,VDBE执行每条指令直到昀终完成SQL语句指定的查询要求。2、BerkeleyDBBerkeleyDB是由Sleepycatsoftware开发的轻量级嵌入式数据库。它不仅适用于嵌入式系统,而且可以直接连接到应用程序内部和应用程序运行在同一地址空间,传统的数据库一般作为独立服务器工作,而Berkeley是软件开发库,开发者将它嵌入到应用程序中,应用程序本身就是一个服务器,避免了与应用服务器进程间通信的开销,因此Berkeley具有较高的运行效率,适用于资源受限的嵌入式系统。BerkeleyDB体系结构一般而言BerkeleyDB数据库系统可以大致分为五个子系统。BerkeleyDB体系结构(续)存取管理子系统(AccessMethods)该子系统为创建和访问数据库文件提供基本的支持,在没有事务管理的情况下子系统中的模块可单独使用,为应用程序提供快速高效的数据存取服务。BerkeleyDB体系结构(续)事物子系统(Transaction)该子系统为BerkeleyDB提供事务管理功能,保证操作的原则性、一致性和孤立性,事务子系统适用于对需要事务保证的数据进行修改的场合。BerkeleyDB体系结构(续)内存池管理子系统(MemoryPool)该子系统就是BerkeleyDB所使用的通用共享内存缓冲区。BerkeleyDB体系结构(续)锁子系统(Locking)该子系统提供进程之间以及进程内部的并发管理机制,为系统提供多用户读取和单用户修改同一对象的共享控制。BerkeleyDB体系结构(续)日志子系统(Logging)该子系统采用的是先写日志的策略,支持事务子系统进行数据恢复,保证数据一致性。3、SQlite和BerkeleyDB比较较难容易难易程度Unix/posix、win32及嵌入式wince、vxworks等ARM/Linux、sparc/solaris等多平台使用系统部分全部是否免费强弱加密功能较多较少错误处理Btree,Hash,Queue和RecnoBtree存储方式无,原样存储无,转换为ASCII数据类型C、javaC开发语言否是是否支持SQL否是是否关系数据库BerkeleyDBSQLite特性SQlite和BerkeleyDB比较(续)数据库类型SQlite基于关系数据库模式,支持绝大多数标准的SQL92语句,在很大程度上实现了ANSISQL92标准。这也就使得那些曾经有过PC机数据库经验的人对SQlite的学习变得易如反掌。BerkeleyDB不是关系型的数据库,不能应用标准的SQL语句对数据库操作,对它的操作要调用专用的API实现SQlite和BerkeleyDB比较(续)存储方式及模式SQlite只提供了Btree存储数据的模式,对二进制数据,SQlite不能直接保存,但可以先将二进制的数据转换成ASCⅡ编码,然后再保存。使用Base64编码机制。BerkeleyDB对任何存入的数据都是按原样直接存储到数据文件中去,无论其是二进制数据还是ASCⅡ或Unicode等编码的文本,BerkeleyDB提供了四种存储数据的模式:Btree,Hash,Queue和Reeno。SQlite和BerkeleyDB比较(续)数据类型SQlite昀大的特点在于其数据类型为无数据类型(Typelessness)这意味着可以保存任何类型的数据到所想要保存的任何表的任何列中,无论这列声明的数据类型是什么。在BerkeleyDB中关键字Key和数据Data是用来进行数据库管理的基础,由这两者构成的Key/Data对,组成了数据库中的一个基本结构单元。二、SQlite的移植下载源码包搭建开发平台修改配置文件和源文件配置和编译包含sqlite的内核烧写、测试1、下载SQlite源码包需要下载的源码包sqlite-2.8.17.tar.gzarm-elf-tools-20030314.shuClinux-dist-20040408.tar.gzuClinux040408.EduKit44b0.patch2、搭建开发平台拷贝uClinux源码包、补丁、交叉开发工具链到Redhatlinux根目录;解压缩uClinux源码包,安装Embest补丁;安装交叉开发工具链;$tarxzvfuClinux040408.EduKit44b0.patch$cduClinux-dist$patch–p1./uClinux040408.EduKit44b0.patch$../arm-elf-tools-20030314.sh3、修改配置文件和源文件解压缩sqlite-2.8.17.tar.gz包把sqlite-2.8.17文件夹改名为sqlite修改sqlite文件夹下的四个文件sqlite/main.mk在sqlite/下增加文件Makefile修改sqlite/src/shell.c修改sqlite/src/os.c3、修改配置文件和源文件解压缩sqlite-2.8.17.tar.gz包把sqlite-2.8.17文件夹改名为sqlite修改sqlite文件夹下的四个文件sqlite/main.mk在sqlite/下增加文件Makefile修改sqlite/src/shell.c修改sqlite/src/os.c(可以在windows下解压缩,然后修改配置文件,再拷贝到linux中;也可先拷贝包到linux,然后在linux下解压缩,再修改配置文件)A、main.mk1、TCCX将TCCX=$(TCC)$(OPTS)$(THREADSAFE)$(USLEEP)-I.-I$(TOP)/src修改为TCCX=$(TCC)$(OPTS)$(THREADSAFE)$(USLEEP)-I.-I$(TOP)/src$(CFLAGS)即加上$(CFLAGS)标记。53main.mk(续)2、LIBOBJ找到#ObjectfilesfortheSQLitelibrary。将其中的tclsqlite.o去掉。即去掉tcl有关的东西。tcl是编程语言,去掉后将来生成的镜像变小。但是就不再支持使用tcl语言了。60main.mk(续)3、sqlite$(EXE)找到类似sqlite$(EXE)的一句,将:sqlite$(EXE):$(TOP)/src/shell.clibsqlite.asqlite.h$(TCCX)$(READLINE_FLAGS)-osqlite$(EXE)$(TOP)/src/shell.clibsqlite.a$(LIBREADLINE)$(THREADLIB)替换为:shell.o:$(TOP)/src/shell.csqlite.h$(TCCX)$(READLINE_FLAGS)-c$(TOP)/src/shell.csqlite$(EXE):shell.olibsqlite.a$(TCC)$(LDFLAGS)-o$@shell.olibsqlite.a$(LIBREADLINE)$(THREADLIB)$(LDLIBS)154main.mk(续)4、romfs将:install:sqlitelibsqlite.asqlite.hmvsqlite/usr/binmvlibsqlite.a/usr/libmvsqlite.h/usr/include替换为:romfs:sqlite$(ROMFSINST)/bin/sqlite436main.mk(续)5、clean将:clean:rm-f*.osqlitelibsqlite.asqlite.hopcodes.*rm-flemonlempar.cparse.*sqlite*.tar.gzrm-f$(PUBLISH)rm-f*.da*.bb*.bbggmon.outrm-rftsrc替换为:clean:rm-f*.osqlitelibsqlite.asqlite.hopcodes.*sqlite.gdbrm-f$(PUBLISH)rm-f*.da*.bb*.bbggmon.outrm-rftsrcdistclean:cleanrm-flemonlempar.cparse.*sqlite*.tar.gzrm-fconfig.h439B、Makefile复制sqlite目录下的Makefile。linux-gcc文件为
本文标题:5.6 嵌入式数据库移植
链接地址:https://www.777doc.com/doc-5348658 .html