嵌入式数据库SQlite的移植和注意项

2019-07-12 23:34发布

(一) 背景

       根据项目需求,需要使用数据库存放一些数据,比如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 -- 主机端)编译:要加静态链接              (1)gcc -o test test.c -lsqlite3  (普通编译)              (2)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的移植和注意项,对其深入的使用和学习,需在接下来的工作中进行