嵌入式服务器SQLite3在ok6410开发板上的移植
2012-01-11 20:23
585 查看
老房原创修改版
-------------------------------------------------------------------------分隔-------------------------------------------------------------------------------------------------------
SQLite是一款轻型的数据库,它的设计目标是嵌入式的,目前已经在很多嵌入式产品中使用了它,占用资源非常的低,在嵌入式设备中可能只需要几百K的内存就够了;
以下采用arm-linux-gcc4.2.2 eabi,经老房测试,在飞凌6410开发板上运行通过:
1、下载sqlite3源代码、解压
http://www.sqlite.org/sqlite-src-3070900.zip
下载sqlite-src-3070900.zip解压
2、配置交叉编译到arm平台:
./configure --prefix=/usr/local/sqlite --host=arm-linux CC=arm-linux-gcc
3、编译:
make
4、安装:
make install 头文件和生成的库文件将安装到PC的/usr/local/sqlite目录;
将sqlite目录拷贝到开发板文件系统的/usr/local;
将/usr/local/sqlite/lib添加到LD_LIBRARY_PATH(在开发板文件系统/etc/profile中修改);
将/usr/local/sqlite/bin添加到PATH(在开发板文件系统/etc/profile中修改);
5、写自己的数据库程序,保存为radiodb.c(这个程序我不是原创)
#include <stdio.h>
#include <sqlite3.h>
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main(int argc, char **argv){
sqlite3 *db;
char *zErrMsg = 0;
int rc;
if( argc!=2 ){
fprintf(stderr, "Usage: %s DATABASE \n", argv[0]);
return 0;
}
rc = sqlite3_open(argv[1], &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 0;
}
char *sql = " CREATE TABLE SensorData( \
ID INTEGER PRIMARY KEY, \
SensorID INTEGER, \
SiteNum INTEGER, \
Time VARCHAR(12), \
SensorParameter REAL \
);";
//使用sql字符串指定的sql语言 创建数据表SensorData
sqlite3_exec( db , sql , 0 , callback , &zErrMsg );
//插入数据到数据表
sql = "INSERT INTO 'SensorData' VALUES( 0 , 1 , 1 , '200605011206', 18.9 );" ;
sqlite3_exec( db , sql , 0 , callback , &zErrMsg );
//插入数据到数据表
sql = "INSERT INTO 'SensorData' VALUES(1 , 1 , 1 , '200605011306', 16.4 );" ;
sqlite3_exec( db , sql , 0 , callback , &zErrMsg );
int nrow = 0, ncolumn = 0;
char **azResult;
int i;
//从数据表查询数据
sql = "SELECT * FROM SensorData ";
sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
printf( "row:%d column=%d" , nrow , ncolumn );
printf( "The result of querying is :" );
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ ){
printf( "azResult[%d] = %s \r\n", i , azResult[i] );
}
sqlite3_free_table( azResult );
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db);
return 0;
}
6、编写Makefile
prefix=/usr/local/sqlite
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Libs = -L${libdir} -lsqlite3 -lpthread
Cflags = -I${includedir}
CROSS_COMPILE = arm-linux-
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
radiodb: radiodb.o
$(CC) $^ $(Libs) -o $@
radiodb.o: radiodb.c
$(CC) $(Cflags) -c $^ -o $@
clean:
rm -rf radiodb *.o
7、编译,得到radiodb,拷贝到开发板文件系统/usr/local,NFS挂载根文件系统后,超级终端执行:
cd /usr/local
./radiodb testdb
另外,在QT4中对SQLite3提供了不错的支持,已经写了封装好的类如QSqlDatabase等,直接使用即可!!
-------------------------------------------------------------------------分隔-------------------------------------------------------------------------------------------------------
SQLite是一款轻型的数据库,它的设计目标是嵌入式的,目前已经在很多嵌入式产品中使用了它,占用资源非常的低,在嵌入式设备中可能只需要几百K的内存就够了;
以下采用arm-linux-gcc4.2.2 eabi,经老房测试,在飞凌6410开发板上运行通过:
1、下载sqlite3源代码、解压
http://www.sqlite.org/sqlite-src-3070900.zip
下载sqlite-src-3070900.zip解压
2、配置交叉编译到arm平台:
./configure --prefix=/usr/local/sqlite --host=arm-linux CC=arm-linux-gcc
3、编译:
make
4、安装:
make install 头文件和生成的库文件将安装到PC的/usr/local/sqlite目录;
将sqlite目录拷贝到开发板文件系统的/usr/local;
将/usr/local/sqlite/lib添加到LD_LIBRARY_PATH(在开发板文件系统/etc/profile中修改);
将/usr/local/sqlite/bin添加到PATH(在开发板文件系统/etc/profile中修改);
5、写自己的数据库程序,保存为radiodb.c(这个程序我不是原创)
#include <stdio.h>
#include <sqlite3.h>
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main(int argc, char **argv){
sqlite3 *db;
char *zErrMsg = 0;
int rc;
if( argc!=2 ){
fprintf(stderr, "Usage: %s DATABASE \n", argv[0]);
return 0;
}
rc = sqlite3_open(argv[1], &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 0;
}
char *sql = " CREATE TABLE SensorData( \
ID INTEGER PRIMARY KEY, \
SensorID INTEGER, \
SiteNum INTEGER, \
Time VARCHAR(12), \
SensorParameter REAL \
);";
//使用sql字符串指定的sql语言 创建数据表SensorData
sqlite3_exec( db , sql , 0 , callback , &zErrMsg );
//插入数据到数据表
sql = "INSERT INTO 'SensorData' VALUES( 0 , 1 , 1 , '200605011206', 18.9 );" ;
sqlite3_exec( db , sql , 0 , callback , &zErrMsg );
//插入数据到数据表
sql = "INSERT INTO 'SensorData' VALUES(1 , 1 , 1 , '200605011306', 16.4 );" ;
sqlite3_exec( db , sql , 0 , callback , &zErrMsg );
int nrow = 0, ncolumn = 0;
char **azResult;
int i;
//从数据表查询数据
sql = "SELECT * FROM SensorData ";
sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
printf( "row:%d column=%d" , nrow , ncolumn );
printf( "The result of querying is :" );
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ ){
printf( "azResult[%d] = %s \r\n", i , azResult[i] );
}
sqlite3_free_table( azResult );
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db);
return 0;
}
6、编写Makefile
prefix=/usr/local/sqlite
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Libs = -L${libdir} -lsqlite3 -lpthread
Cflags = -I${includedir}
CROSS_COMPILE = arm-linux-
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
radiodb: radiodb.o
$(CC) $^ $(Libs) -o $@
radiodb.o: radiodb.c
$(CC) $(Cflags) -c $^ -o $@
clean:
rm -rf radiodb *.o
7、编译,得到radiodb,拷贝到开发板文件系统/usr/local,NFS挂载根文件系统后,超级终端执行:
cd /usr/local
./radiodb testdb
另外,在QT4中对SQLite3提供了不错的支持,已经写了封装好的类如QSqlDatabase等,直接使用即可!!
相关文章推荐
- OK6410 嵌入式开发板无线网卡USB RT3070移植笔记
- vsftpd-2.3.4服务器在ok6410开发板上的移植
- ok6410 移植 嵌入式服务器boa
- 在嵌入式Linux系统(OK6410)中移植Boa 服务器
- 在嵌入式Linux系统(OK6410)中移植Boa 服务器
- ok6410开发板移植vlc做简单视频流媒体服务器
- vsftpd-2.3.4服务器在ok6410开发板上的移植
- 在嵌入式Linux系统(OK6410)中移植Boa 服务器
- 成功移植Mplayer到OK6410开发板上了
- u-boot下wifi驱动在OK6410开发板下的移植-前言
- pppoe客户端往ok6410开发板的移植
- 嵌入式成长轨迹62【智能家居项目】【ARM 飞凌ok6410】【QT&QWT&sqlite3安装配置】
- qt在linux与ok6410上的安装移植(5)——tslib和qt在开发板上的移植
- 飞凌OK6410开发板移植u-boot官方最新版u-boot-2012.10.tar.bz2
- OK6410开发板linux内核移植
- httpd 服务器在6410开发板上的移植
- 移植Mplayer到OK6410开发板
- OK6410-A开发板学习-③uboot移植(1)
- pppoe客户端往ok6410开发板的移植
- 移植Mplayer到OK6410开发板