摘 要:文章提出了基于嵌入式的簡單數(shù)據(jù)庫設計。設計了以S3C2440A微處理器作為數(shù)據(jù)庫數(shù)據(jù)采集的硬件控制核心,然后指出了嵌入式下數(shù)據(jù)庫的需求特點,對在ARM-Linux下的SQLite數(shù)據(jù)庫的體系進行分析,再結合ARM-Linux開發(fā)板給出了如何實現(xiàn)SQLite數(shù)據(jù)庫的具體方法。
關鍵詞:嵌入式;SQLite數(shù)據(jù)庫;ARM-Linux開發(fā)平臺
引言
現(xiàn)有的RTU多基于ARM7開發(fā)板上的程序植入和數(shù)據(jù)庫管理,對于多線程的數(shù)據(jù)管理,以及種類繁多的第三方數(shù)據(jù)接口,顯得力不從心。本課題擬在ARM9處理器上進行數(shù)據(jù)庫的建立,對底層的數(shù)據(jù)采集,并對采集數(shù)據(jù)進行歷史保留和遠程管理。其中,數(shù)據(jù)庫的建立運用可基于嵌入式系統(tǒng)的小型數(shù)據(jù)庫SQlite,SQLite是一款嵌入式數(shù)據(jù)庫,沒有獨立運行的進程,在所服務的應用程序在應用程序進程空間中是共同存在的。它與應用程序的代碼也是一起的,作為它所服務程序的一部分,同時提供了豐富的數(shù)據(jù)庫接口;而對數(shù)據(jù)采集,則由底層設備驅動程序完成。
1 數(shù)據(jù)庫數(shù)據(jù)采集的硬件平臺設計
為了實時的對現(xiàn)場數(shù)據(jù)的采集和傳輸,我們采用功能強大的ARM9作為主控處理器,外接相關功能模塊,在ARM9處理器上嵌入Linux操作系統(tǒng),其強大的多任務和多線程以及設備獨立性能夠較好的發(fā)揮ARM9強大的控制功能。
現(xiàn)場數(shù)據(jù)采集主要由:數(shù)字量輸入、輸出模塊、模擬量輸入模塊組成。數(shù)字量輸入模塊將外部采集的數(shù)據(jù)經過處理輸入到ARM9處理器;模擬量輸入模塊采集外部輸入的模擬量;數(shù)字量輸出模塊采集主控處理器的輸出量。如圖1所示。
圖1 硬件系統(tǒng)主要構成圖
數(shù)據(jù)的存儲和傳輸部分主要包括S3C2440A微處理器、存儲器模塊、數(shù)據(jù)通信模塊、RS458模塊、以太網模塊、無線功能模塊等。該處理器是基于ARM920T核心的16/32位的精簡指令集(RISC)微處理器,S3C2440A為手持設備和一些小型應用提供了低耗能、低價格、高性能提供了一個絕佳的選擇。它采用了新的總線結構AMBA(Advanced Microcontroller Bus Architecture),這一結構具有獨立的16KB指令緩存和16KB數(shù)據(jù)緩存,每個都是由8字長的行組成。因為它具有一套完整的系統(tǒng)外設,S3C2440A降低了整體的系統(tǒng)成本并且不需配置另外的組件。這部分的主要功能是對現(xiàn)場采集數(shù)據(jù)進行處理、存儲和顯示,之后通過網絡把所采集的數(shù)據(jù)上傳到遠程的PC機網頁上。遠程的PC機主要負責的功能是對所上傳的數(shù)據(jù)進行監(jiān)測、分析、處理。必要時對采集終端進行控制。
2 Linux下的數(shù)據(jù)庫的應用
基于Linux系統(tǒng)下的數(shù)據(jù)庫數(shù)不勝數(shù),大型應用于商業(yè)開發(fā)的數(shù)據(jù)庫有Sybase、Empress、Oracle、Informix等,小型數(shù)據(jù)庫常用的有mSQL、MySQL、Sqlite等等。應用于商業(yè)開發(fā)的大型數(shù)據(jù)庫一般價格高昂并且體積龐大,不符合嵌入式下數(shù)據(jù)庫要求。在小型數(shù)據(jù)庫中MySQL雖說在保持體積較小的情況,提供了足夠的應用與一般開發(fā)的功能,但是在應用于商業(yè)用途也要收費。mSQI具有嵌入式開發(fā)的條件,但是由于它并非完全開源的代碼,在使用期限上不符合本設計的要求。余下的開放源碼數(shù)據(jù)庫中,除了占用空間較大以外,學習難度也比較大,如果非要采用的話必然會加大開發(fā)成本。
SQLite支持大部分的SQL的語句,采用單文件存放數(shù)據(jù)庫,存儲速度也快,在操作語句上與關系數(shù)據(jù)庫類型更加接近,最重要的是它的代碼使完全開源的,不用收費?;赟QLite的設計理念,雖然相較與商業(yè)用途的大型數(shù)據(jù)庫在功能上有所不足,但是在開源組織的日漸完善下差距逐漸縮小。在應用上如果不需要存儲過程或者復雜的表之間的關聯(lián)的話,SQLite是個非常好的平衡點。
3 SQLite的體系結構以及在Linux平臺上的開發(fā)技術
3.1 SQLite的體系結構
SQLite有一套簡潔的、模塊化的體系結構,并引進了一些方法進行有關關系型數(shù)據(jù)庫的管理。SQLite的體系結構由3個子系統(tǒng)和8個獨立模塊組成,如圖2所示,它顯示了SQLite的主要成分及各成分之間的關聯(lián),其中有一些相當接近于關系數(shù)據(jù)庫管理。
圖2 SQLite的體系機構
接口位于整個結構的頂端,由SQLite C API組成。所有與SQLite交互的程序和庫文件都是通過接口進行的。Tokenizer(詞法分析器)和Parser(語法分析器)協(xié)同對文本形式的查詢語言進行分析,驗證其語法的有效性,然后轉化成底層能更容易處理的層次化數(shù)據(jù)結構。這個結構的中心部分便是數(shù)據(jù)庫引擎VDBE(Virtual DataBase Engine)。VDBE在字節(jié)碼上工作,區(qū)別于頂層操作系統(tǒng)、系統(tǒng)體系結構和CPU。B-tree、page cache(頁緩存)、操作系統(tǒng)接口組成了整個后端。B-tree和pager作為信息代理,他們并不知道信息內容,只是對這些信息進行移動和排列。
3.2 SQLite在ARM上的實現(xiàn)
SQLite嵌入式數(shù)據(jù)庫的代碼使開源的,根據(jù)不同需求的硬件平臺,對源碼進行交叉編譯即可實現(xiàn)移植。在上的編譯過程主要有以下幾個步驟:
解壓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/及系統(tǒng)標準目錄
頭文件 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安裝在系統(tǒng)庫文件標準目錄/usr/lib下,可執(zhí)行文件sqlite3安裝在/usr/local/bin目錄下以及系統(tǒng)可執(zhí)行標準目錄/usr/bin下,幫助文檔man安裝在/usr/local/share目錄下。
修改Makefile文件:
將代碼行BBC=arm-linux-gcc-g-02改成BBC=gcc-g-02。用make生成sqlite、libsqlite.a和libsqlite.so。為了減小執(zhí)行文件大小可用strip處理,去掉其中的調試信息。
在ARM板上運行SQLite:
將SQLite下載到ARM板的/tmp目錄,修改權限并運行:
chmod +wx sqlite
./sqliteest.sqlite
會出現(xiàn):
sqlite>
如果一切正常,SQLite已經在ARM-Linux下正常運行,然后就可以基于此進行數(shù)據(jù)庫數(shù)據(jù)的遠程處理。
4 結束語
該遠程數(shù)據(jù)庫的設計,可以提高現(xiàn)階段RTU在ARM7開發(fā)板上的歷史數(shù)據(jù)存儲和數(shù)據(jù)借調的缺點,在分析對比了各數(shù)據(jù)庫在嵌入式下的表現(xiàn),選取了比較符合需求的SQLite數(shù)據(jù)庫,并且完成了在ARM-Linux下的編譯以及開發(fā)工作。實踐證明,基于ARM9的數(shù)據(jù)庫設計可以完成對數(shù)據(jù)采集更多的需求。
參考文獻
[1]李文進,韓曉萍.ARM平臺在嵌入式遠程數(shù)據(jù)采集系統(tǒng)中的設計與實現(xiàn)[J].繼電器,2006,05:64-67.
[2]郝曉弘,李桂肅,瞿華.基于移動網絡的嵌入式遠程數(shù)據(jù)終端實現(xiàn)[J].微計算機信息,2007,05:24-25+23.
[3]黃萬志,陳永煌.基于嵌入式Linux的遠程數(shù)據(jù)采集系統(tǒng)[J].現(xiàn)代電子技術,2007,04:55-57.
[4]周衛(wèi)玉,孫新亞.基于ARM和uCLinux的嵌入式遠程數(shù)據(jù)采集終端[J].計算機工程,2004,23:156-158.
作者簡介:李少雄(1990,3-),男,陜西省咸陽市,西安石油大學,2012級,碩士研究生,計算機院,計算機科學與技術,計算機技術。