嵌入式數據庫SQlite的移植和注意項

(一) 背景

       根據項目需求,需要使用數據庫存放一些數據,比如Web登錄的賬號和密碼,開發板的配置參數,以及後期所採集RTU設備的數據等。這裏選擇了適合嵌入式產品的數據庫 -- sqlite

(二) 移植平臺和環境

       主機端:Ubuntu; ARM板:ZLG EasyARM-i.MX283A、飛凌MX6UL-C;

       Sqlite版本:3.7.143.7.14.0 或 3.7.14.1);安裝包:sqlite-autoconf-3071400.tar.gz 或 sqlite-autoconf-3071401.tar.gz

(三) 步驟:

      1. 解壓安裝包

$ tar -zvf sqlite-autoconf-3071401.tar.gz
$ cd sqlite-autoconf-3071401

       2. 建立不同目錄

       在開發產品時,爲了效率以及使用的方便性,一般會先在主機端進行程序的設計和驗證,而後再經交叉編譯,把ARM板可執行的二進制文件copy到指定的路徑。故這裏涉及到移植兩個版本即主機端和ARM板。由於在配置和編譯安裝時產生一些不同的文件,爲了清晰,及管理方便,這裏建立了不同目錄,以示區分:

$ mkdir build
$ cd build
$ mkdir x86 arm  (主機端和ARM板文件在不同目錄下)

       3.1 編譯x86版本(主機端)

$ cd x86
$ ../../configure --prefix=/usr/local
$ make
$ sudo make install
$ sudo ldconfig

       上面配置命令中,--prefix選項後面的路徑是編譯安裝後目標安裝的位置,當然這個位置可以自定義安裝完成後,產生的文件會存放在配置時指定的目錄。bin目錄下放的是sqlite3的可執行文件(sqlite3),lib目錄下放的是庫文件(libsqlite3.alibsqlite3.so.0libsqlite3.so.0.8.6libsqlite3.lalibsqlite3.so),include目錄下放的是頭文件(sqlite3.h),編譯程序時。          注1:所有設置的路徑或目錄,自己要清晰,否則按照文檔執行;

       注2:執行上述make時,可能(不客氣的說一般都會)出現“SQLite header and source version mismatch”的錯誤。

      解決方法:(原因)主機端linux系統默認安裝了舊版本的SQLite,故需要先把其刪除,包括/usr/lib/i386-linux-gnu路徑下:libsqlite3.so.0libsqlite3.so.0.8.6兩個文件;然後按照上述依次執行:make、make install、ldconfig。

       最後執行:sqlite3 -version,即可看到版本結果。

$ sqlite3 -version
$ 3.7.14.1 2012-10-04 19:37:12 091570e46d04e84b67228e0bdbcd6e1fb60c6bdb

      注:(x86)編譯:gcc -o pass.cgi pass.c cgic.c -lsqlite3  要加靜態鏈接 (主機端)

      3.2 編譯arm版本(ARM板)

$ cd ../arm (進到arm目錄)

(1)$ ../../configure CC=/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-gcc --host=arm-linux --prefix=/home/liuxu/sqlite/sqlite-autoconf-3071400/build/arm/target (ZLG)

(2)$ ../../configure CC=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-gcc --host=arm-linux --prefix=/home/liuxu/sqlite/sqlite-autoconf-3071401/build/arm/target (飛凌) 

      注1:很容易出問題,注意自己主機端交叉編譯器的安裝路徑,以及自己設置的編譯和安裝路徑;

      注2:(1)和(2)硬件環境和軟件版本不同,飛凌自帶的版本爲3.7.14.1。

$ make
$ make install

      上面配置中,CC指定了ARM的編譯工具鏈,--host指定了平臺,安裝路徑爲當前目錄的target目錄下install完成後,會在target目錄下生成我們所需的執行文件,庫文件和頭文件等。

    注:交叉編譯:

$ arm-fsl-linux-gnueabi-gcc -o home-page.cgi home-page.c cgic.c -I /home/liuxu/sqlite/sqlite-autoconf-3071401/build/arm/target/include/ -L /home/liuxu/sqlite/sqlite-autoconf-3071401/build/arm/target/lib/ -lsqlite3  (飛凌)

       其中,-I指定頭文件的路徑,-L指定庫文件的路徑

       4. 移植sqlite到ARM板

       (1) 產品開發時,必須考慮ARM板內存空間的問題。爲了節省空間,對文件瘦身,去掉沒用的調試信息。如下:

$arm-fsl-linux-gnueabi-strip ./target/lib/libsqlite3.so.0.8.6
$arm-fsl-linux-gnueabi-strip ./target/lib/libsqlite3.a
$arm-fsl-linux-gnueabi-strip ./target/bin/sqlite3

      strip後,可執行:ls -l sqlite3查看“瘦身”前後文件大小的變化

      (2) 完成上述操作後,還需要把所得到的特定文件放到ARM板上。可以參照主機端,編譯x86版本產生文件的路徑,把相應的文件放到ARM板上。如/usr/local目錄相對應的目錄把sqlite3拷貝到ARM板上的/usr/local/bin下,把/lib下的所有文件拷貝到ARM板/usr/local/lib目錄下。

       注:不同的ARM板,文件存放的路徑不同,上述只是參考。

       5. ARM板上命令行測試

(1) 版本號:sqlite3 -version

(2) 建立或打開數據庫:sqlite3 info.db

(3) 創建數據表:create table user_table(userName,userPasswd);

(4) 向數據表中插入數據:insert into user_table(userName,userPasswd) values(“admin”,”1234”);

(5) 查詢數據表:select * from user_table;

(6) 查詢數據庫信息:.databases

(7) 查詢數據庫中的表信息:.tables

(8) 退出:.exit

      注:注意命令行中“;”和“.”的使用。      

      趁熱打鐵這裏只是總結了嵌入式數據庫SQLite的移植和注意項,對其深入的使用和學習,需在接下來的工作中進行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章