设为首页 加入收藏
   
     
   
科技•信息
 
ARM的嵌入式数据库研究与实现
双击自动滚屏 发布者:admin 时间:2011-2-25 16:20:43 阅读:265次 【字体:

ARM的嵌入式数据库研究与实现

 

  摘 要:
  ARM与uCLinux是当前非常流行的嵌入式系统组合,SQLite作为嵌入式数据库中的佼佼者,三者的结合,为各自带来了新的发展空间。针对SQLite运用于嵌入式系统所产生的技术问题,提出了较为详实的解决方案。
  
  关键词:嵌入式数据库;ARM;S3C44B0X;uClinux;SQLite;SkyEye
  
  1.引言
  
  32位ARM嵌入式微处理器具有高性能、低功耗的特性,已被广泛应用于消费电子产品、无线通信和网络通信等领域[1]。uClinux是专门为没有内存管理单元MMU的微处理器设计的Linux的衍生嵌入式操作系统,内核较常规Linux小但保留了其绝大多数优点[2]。目前国内外采用ARM-uClinux作为嵌入式系统非常普遍。
  
  SQLite是用C语言编写的开源嵌入式数据库引擎,占用资源非常低,在嵌入式设备中,只需要几百K的内存就够了。它能够支持Windows/Linux等主流操作系统,可与TCL、PHP、Java等程序语言相结合,提供ODBC接口,其处理速度甚至令开源世界著名的数据库管理系统Mysql、PostgreSQL望尘莫及[3]。
  
  本文给出了在一款ARM嵌入式微处理器S3C44BOX上移植uClinux及实现SQLite的具体过程,并简要介绍了硬件模拟平台SkyEye。
  
  2.基于S3C44B0X的uClinux的移植
  
  S3C44B0X是三星公司推出的一款基于ARM7TDMI核的16/32位RISC的嵌入式微处理器,它低功耗、高性能的设计,极其适合于对成本和功耗要求较高的应用场合。
  
  2.1 引导程序BLOB的移植
  
  BootLoader是嵌入式系统软件开发的第一个环节,它紧密地将软硬件衔接在一起,对于一个嵌入式设备后续的软件开发至关重要。BootLoader引导程序最基本的功能是完成CPU和存储器的硬件初始化(包括CPU的主频、SDRAM、中断、串口等) 和内核启动参数的设置并启动内核等。BLOB(Boot Loader Object)作为一款功能强大、使用方便、可移植性好的开源BootLoader,而成为S3C44B0X开发板上非常适合uClinux的Bootloader。
  
  (1) 在宿主机上搭建交叉编译环境编译内核与文件系统之前需要建立交叉编译环境。从http:// www. uclinux.org/下载arm-elf-tools安装在Linux宿主机上的/usr/local/bin 目录下,建立Linux机器上ARM的交叉编译环境。BLOB和uClinux 即在此环境下编译。
  
  (2) 下载适当的BLOB版本并安装从下载blob-mba44b0.tgz。这个blob-mba44b0.tgz是为一个叫mba44b0的开发板移植的BLOB,mba44b0也使用S3C44B0 作为其处理单元,所以这个blob-mba44b0 是需要改动最少的版本。
  
  (3) 选择适当的uClinux版本并安装在编译BLOB的时候需要uClinux的SOURCE CODE。从上下载uClinux-2.4.17-uc1.tgz,将它安装在宿主机上的某一个目录/path/to/armlinux/source。
  
  (4) 修改BLOB源代码并移植参考./doc/port文件的内容,修改与具体开发板相关的源文件。修改后,参考README中的内容编译得到./src/blob/目录下的BLOB,即为最终需要的可以直接运行在Flash中的执行代码。最后,将修改并编译后的BLOB通过Flash编程下载到开发板中Flash的零地址,完成BLOB的移植。此后,便可通过这个开发板上的BLOB下载编译好的uClinux内核以及ramdisk,为uClinux的移植开发打下基础。
  
  2.2 uClinux的移植
  
  uClinux的文件系统使用从uClinux官方网站下载的uClinux-dist-20030305.tar.gz中的文件系统部分[4]。
  
  2.2.1 uClinux 的内核配置
  
  在编译uClinux内核之前,需要使用命令make menuconfig根据目标板对内核进行必要的配置,进行uClinux的裁减、添加或删除部分支持,主要有如下几个方面。
  
  (1) 系统及其存储器配置在“System Type”中进行配置,该配置为板级核心配置。
  
  (2) 通用内核选项General setup 的配置
  
  (3) 块设备Block devices 的选择和配置(4) 文件系统的选择和配置在“/proc file system support”和“Second extend fs support”中进行配置。
  
  (5) 字符设备驱动Character devices的选择2.2.2 uClinux 的内核编译(1) 建立依赖关系:
  
  make dep(2) 编译:可以通过make或者make zImage进行编译,它们的差别在于make zImage将生成的核心进行压缩,并加入一段解压的启动代码。
  
  Make zImage将在/uClinux-2.4.x/下生成没有压缩的内核Linux和在/uClinux-2.4.x/arch/armnommu/boot下生成压缩的内核zImage。未进行压缩的内核大小为600KB左右,而压缩内核zImage大小在300KB左右。zImage将通过Flash编程被下载到Flash中的64K地址处。
  
  下面的关键是生成uClinux的根文件系统。
  
  2.2.3 uClinux文件系统的生成
  
  将下载的uClinux-dist-20030305.tar.gz解压缩到宿主机上的某个目录下,配置编译这个uClinux-dist 中的文件系统。在./uClinux-dist/目录下依次运行make menuconfig;makeclean;make dep;make lib_only;make user_only;和make romf,最终生成几百KB大小的romfs.img即为所需的文件系统。
  
  2.2.4 在开发板上运行uClinux
  
  给开发板加电,系统自动运行BLOB。超级终端或者minicom显示了BLOB运行的信息,然后回车进入命令行状态,得到提示符blob>,用xdownload kernel下载zImage。下载结束后,用xdownload ramdisk下载romfs.img。都结束后运行blob>boot,出现starting kernel,然后便是UncompressingLinux........ done,booting the kernel。内核开始启动,在启动的最后便是uClinux的欢迎信息和shell提示符。
  
  3. uClinux下嵌入式数据库SQLite的实现
  
  3.1 SQLite的内部结构
  
  SQLite 对SQL92 标准的支持包括索引、限制、触发和查看,支持原子的、一致的、独立和持久(ACID)的事务[5]。在内部,SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件,如图(1)。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。所有SQL语句都被编译成易读的、可以在SQLite 虚拟机中执行的程序集。
  
  两个先进的开源数据库抽象层对SQLite 提供支持:PEAR::DB,它们包含在 PHP V5 中。通过预先使用 PHP 扩展和应用程序库(PEAR),可将SQLite用于应用程序的快速复原,在以后需要时,可以将其无缝转向更具工业性质的数据库。
  
  3.2 sqlite的移植
  
  通过上述各步,已经能够正确编译uclinux的kernel。在移植sqlite前,应能参照“uClinux-dist/Documentation/Adding-User-Apps-HOWTO”中所描述的“用户程序的订制”的内容,完成将自己写的类似helloworld程序加到“用户自定义应用程序”中。
  
  3.2.1 下载并解压sqlite
  
  从下载sqlite-2.8.15.tar.gz软件包,并解压缩到uClinux-dist/user目录下,以便将sqlite编译成一个普通的用户应用程序:
  
  tar zxvf sqlite-2.8.15.tar.gz –C uClinux-dist/user/3.2.2 SQLite作为用户应用程序的相关设置按uClinux-dist/Documentation/Adding-User-Apps-HOWTO文档中说述,添加sqlite作为一个用户应用程序。
  
  编辑文件uClinux-dist/user/MakefileuClinux-dist/config/Configure.help uClinux-dist/config/config.in在这些文件里查找与“CPU”有关的项,然后在它的下面,加上sqlite项。运行uClinux的make menuconfig,选中“CustomizeVendor/User Settings”,“Miscellaneous Applications”,即出现了刚添加进去的SQLite项“sqlite (NEW)”。
  
  在稍后的make romfs中,uClinux会将sqlite编译进来,做成romfs的一部分,这样在移植后的uclinux的/bin目录中将会有sqlite命令可以执行。
  
  3.2.3 sqlite的修改
  
  添加、修改以下几个文件,完成sqlite在uClinux下的编译,简要介绍如下:
  
  (1) 修改sqlite/main.mk去掉make install项,加上make romfs项,这将在romfs的/bin目录下生成sqlite。
  
  romfs: sqlite $(ROMFSINST) /bin/sqlite(2) 在sqlite下增加Makefile文件以sqlite/Makefile.linux-gcc文件为蓝本,写一个合适的Makefile(3) 修改sqlite/src/os.c将所有 if (s!=0) 修改为 if (s!=0 $$ errno!=ENOSYS)(4) 修改sqlite/src/shell.c完成修改,再依次运行make dep;make lib_only;make user_only;make romfs;make image,即在uClinux-dist/images下编译生成了包含有sqlite的romfs文件系统。
  
  3.2.4 下载到开发板上的Flash中
  
  当uClinux内核比较稳定不需要经常修改的时候,可以将它下载到开发板中的Flash中。此时可以继续为开发板开发其它的应用,然后将应用加入到romfs中。当romfs不需要经常修改的时候它也被下载到开发板中的Flash中。这样便完成了开发板 uClinux+sqlite 的移植。
  
  4. SkyEye硬件模拟平台
  
  开源软件项目SkyEye的设计目标是防真多种主流的嵌入式开发板和外设,实现一个可扩展的硬件模拟框架,使在SkyEye可运行uCLinux以及uC/OS-II等多种嵌入式操作系统和各种系统软件(如TCP/IP,图形子系统,文件子系统等),并可对它们进行源码级的分析和测试[6]。
  
  SkyEye是一个指令级模拟器,可以模拟多种嵌入式开发板,可支持多种CPU指令集,在SkyEye上运行的操作系统意识不到它是在一个虚拟的环境中运行,而且开发人员可以通过SkyEye调试操作系统和系统软件。对于缺少嵌入式硬件开发环境和软件开发环境的用户来说,SkyEye是一个非常有效的学习工具和开发手段。
  
  在Linux上安装SkyEye后,即可仿真AMR7TDMI作为目标CPU核,实现uClinux和sqlite的移植,过程与上述各步大同小异。
  
  5.总结
  
  源码开放的嵌入式操作系统近年来发展迅速,掌握其移植技术对开发者非常重要。随着移动计算环境的形成、信息家电的普及以及移动商务的兴起,嵌入式数据库技术作为其核心技术,已经得到了普遍的关注,方兴未艾。希望本文的介绍能给嵌入式开发同行提供一些参考。

上一篇|下一篇

 相关评论

暂无评论

 发表评论
 昵称:
 评论内容:
 验证码:
  
打印本页 || 关闭窗口
 
 

咨询电话: 13891856539  欢迎投稿:gmlwfbzx@163.com  gmlwfb@163.com
617765117  243223901(发表)  741156950(论文写作指导)63777606     13891856539   (同微信)

All rights reserved 版权所有 光明论文发表中心 公司地址:西安市碑林区南大街169号-6
CopyRight ©  2006-2009  All Rights Reserved.


  制作维护:中联世纪  网站管理
访问 人次
国家信息产业部ICP备案:陕ICP备17019044号-1 网监备案号:XA12993