SQLite移植手记1
SQLite实现了大部分SQL92标准的SQL语句,同时支持ACID。还有其它许多特性这里不做深究,因为这在嵌入式领域来说应该是够用了。
下载:
下载页面:http://www.sqlite.org/download.html
我使用的还是当前最新版本:sqlite-3.3.7.tar.gz
(写完的时候已经更新出3.3.8版本了,真快啊……)
安装:
时间不多,简单介绍安装过程:
解压sqlite到uclinux-dist/user/sqlite/
============ 对uClinux的修改 ============
1. 下载sqlite,解压到uclinux-dist/user/下
2. 编辑uclinux-dist/user/下的Makefile,增加:
dir_$(CONFIG_USER_SQLITE_SQLITE) += sqlite
3. uclinux-dist/config/Configure.help中增加:
CONFIG_USER_SQLITE_SQLITE SQLite Database.
4. uclinux-dist/config/config.in最后增加:
mainmenu_option next_comment comment 'Database' bool 'sqlite' CONFIG_USER_SQLITE_SQLITE endmenu
============ 对SQLite的修改 ============
1. uclinux-dist/user/sqlite/main.mk中:
TCCX修改为:
TCCX = $(TCC) $(OPTS) $(THREADSAFE) $(USLEEP) -I. -I$(TOP)/src $(CFLAGS)
LIBOBJ修改为(一些模块不需要,比如tcl):
LIBOBJ+= alter.o analyze.o attach.o auth.o btree.o build.o callback.o complete.o date.o delete.o expr.o func.o hash.o insert.o loadext.o main.o opcodes.o os.o os_unix.o pager.o parse.o pragma.o prepare.o printf.o random.o select.o table.o tokenize.o trigger.o update.o util.o vacuum.o vdbe.o vdbeapi.o vdbeaux.o vdbefifo.o vdbemem.o where.o utf.o legacy.o vtab.o
sqlite3$(EXE)规则部分修改为:
shell.o: $(TOP)/src/shell.c sqlite3.h $(TCCX) $(READLINE_FLAGS) -c $(TOP)/src/shell.c sqlite3$(EXE): shell.o libsqlite3.a $(TCC) $(LDFLAGS) -o $@ shell.o libsqlite3.a $(LIBREADLINE) $(THREADLIB) $(LDLIBS)
去掉install,增加:
distclean: clean rm -f config.h
2. 拷贝Makefile.linux-gcc为Makefile,修改如下:
TCC = $(CROSS)gcc AR = $(CROSS)ar cr RANLIB = $(CROSS)ranlib #TCL_FLAGS = -I/home/drh/tcltk/8.4linux #LIBTCL = /home/drh/tcltk/8.4linux/libtcl8.4g.a -lm -ldl
编译:
在make menuconfig的user application部分可以看到刚添加的Database –>菜单,进入并选择SQLite,保存退出后按原先的步骤重新编译内核即可。如果只需要sqlite的库,那么make user_only就可以了。
编译完成后会在user/sqlite目录下生成库libsqlite3.a。
测试一下:
编写一个测试程序sqlitetest.c,代码如下(来自官方quick start):
#include #include static int callback(void *NotUsed, int argc, char **argv, char **azColName){ int i; for(i=0; i 然后为它写一个Makefile,大致如下: UCLINUX_PATH = /home/uClinux-dist SQLITE_PATH = $(UCLINUX_PATH)/user/sqlite CROSS = arm-elf- CPU_CFLAGS = -O3 -Wall -mapcs-32 -mtune=arm7tdmi -fno-builtin -msoft-float -Os -D__uClinux__ -D__ARM_CPU__ -I$(UCLINUX_PATH)/lib/uClibc/include -I$(UCLINUX_PATH)/linux-2.4.x/include -I$(SQLITE_PATH) -D_DEBUG_ CPU_LDFLAGS = -nostartfiles -Wl, -elf2flt -L$(UCLINUX_PATH)/lib/uClibc/lib CPU_ARFLAGS = r CPU_LDLIBS = $(UCLINUX_PATH)/lib/uClibc/lib/crt0.o $(UCLINUX_PATH)/lib/uClibc/lib/crti.o $(UCLINUX_PATH)/lib/uClibc/lib/crtn.o -lc MY_LDFLAGS = -L$(SQLITE_PATH) MY_LDLIBS = -lsqlite3 CFLAGS = $(CPU_CFLAGS) LDFLAGS = $(CPU_LDFLAGS) $(MY_LDFLAGS) LDLIBS = $(CPU_LDLIBS) $(MY_LDLIBS) TOPDIR = ./ CC = $(CROSS)gcc EXEC = sqlitetest CSRC = sqlitetest.c OBJS = $(patsubst %.c,%.o, $(CSRC)) all: $(EXEC) $(OBJS): %.o : %.c $(CC) $(CFLAGS) -c $ 运行make编译测试程序,生成的程序大小约300KB: linux:/home/work/sqlite # ll 总用量 688 drwxr-xr-x 2 root root 264 2006-10-09 11:25 . drwxr-xr-x 4 root root 160 2006-10-09 11:21 .. -rw------- 1 root root 982 2006-10-09 11:25 Makefile -rwxr--r-- 1 root root 315584 2006-10-09 11:25 sqlitetest -rw------- 1 root root 788 2006-10-09 11:21 sqlitetest.c -rwxr-xr-x 1 root root 396538 2006-10-09 11:25 sqlitetest.gdb -rw-r--r-- 1 root root 1600 2006-10-09 11:25 sqlitetest.o
接着将测试程序下载到目标板,测试运行结果如下:
# /home/sqlitetest /home/testdb.db "CREATE TABLE my_table(id int, name varchar(20))" # /home/sqlitetest /home/testdb.db "INSERT INTO my_table values(1, 'jianglj')" # /home/sqlitetest /home/testdb.db "INSERT INTO my_table values(2, 'Hily Jiang')" # /home/sqlitetest /home/testdb.db "SELECT * FROM my_table" id = 1 name = jianglj id = 2 name = Hily Jiang
SQLite移植手记1相关推荐
- 嵌入式数据库Sqlite移植教程-转
嵌入式数据库Sqlite移植教程 sqlite-3.3.6编译安装与交叉编译全过程详细记录 本文介绍的内容都是基于 Linux RedHat 9.0 平台的. 一.PC机编译安装 请阅读在安装包里的 ...
- 【嵌入式实验】《嵌入式数据库 sqlite 移植及使用》
嵌入式数据库 sqlite 移植及使用 一.实验目的 二.实验内容 三.预备知识 四.实验设备及工具(包括软件调试工具) 五.实验步骤 实验一:移植嵌入式数据库 sqlite 1~5:安装 sqlit ...
- 南京邮电大学嵌入式系统开发实验3:嵌入式数据库sqlite移植及使用
实验3 嵌入式数据库sqlite移植及使用 一.实验目的 理解嵌入式软件移植的基本方法,掌握sqlite数据库软件移植的步骤,掌握sqlite开发的两种方式-命令模式和C代码开发模式的使用方法,并编 ...
- SQLite使用手记
http://blog.bossma.cn/database/sqlite_use_record/ SQLite是一个轻量级数据库引擎,具备独立.可嵌入及零配置等特性,可以作为Access或Mysql ...
- 【ARM-Linux开发】嵌入式操作系统上的小型数据库移植SQLite
近段时间在学数据库,因为自身需求,所以注重研究了点嵌入式sqlite数据库,SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品 ...
- sqlite 交叉编译-转
近段时间在学数据库,因为自身需求,所以注重研究了点嵌入式sqlite数据库, SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产 ...
- 嵌入式linux下sqlite应用
<一.嵌入式sqlite库的移植> FM001 Sqlite3动态库移植模块设计 功能描述 SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库 ...
- linux系统移植与开发
文章目录 前言 1 .第一次拿到开发板需要做什么 1.1 . 开发板启动方式,接线方法 1.2 . 开发板驱动安装 2.U-BOOT的修改和完善 2.1.简单的源码修改 2.1.1.串口输出欢迎图案和 ...
- Electron中使用sql.js操作SQLite数据库
推荐sql.js--一款纯js的sqlite工具. 一.关于sql.js sql.js(https://github.com/kripken/sql.js)通过使用Emscripten编译SQLite ...
最新文章
- 客快物流大数据项目(二十五):初始化业务数据
- MySQL数值扩大一百倍_Mysql优化----一条SQL百倍提升之旅
- 医学图像分割--Stacked fully convolutional networks with multi-channel learning
- hibernate笔记
- python创建学生类和教师类_创建StudentServices类
- ddmmyy日期格式是多少_如何在Excel 2013/2016/2019中将mmddyyyy文本转换为普通日期格式...
- MachineLearning:UFLDL学习笔记 ---- 主成分分析与白化
- word 产生很多temp 不显示_word表格中文字显示到最下面的时候不自动换页-解决办法...
- 测试团队月报怎么写?
- 计算机系统导论与计算机导论,计算机系统导论之学习心得
- AndroidStudio中的NDK开发初探
- 计算机教程打字方法,技巧:打字指法和关键位置教程_IT /计算机_信息
- Author Agreement
- 华为鸿蒙2.0系统HarmonyOS 2.0安装谷 歌 商 店 G o o g l e P l a y
- 因违反《竞业协议》,三年白忙活了!赔偿 97.6 万元,返还 15.8 万元
- 这108道 JavaOOP 面试题 你是不是都会了?
- ELF与BIN文件的生成和转换
- oracle采购操作手册,oracle-ebs采购功能点操作手册.doc
- bootstrap 表单验证
- 亚像素卷积网络(ESPCN)学习与Pytorch复现
热门文章
- 团队开发——冲刺1.d
- 【随笔】Win7下GVIM的安装与配置
- 如何备份linux系统(转)
- arcgis js 4.x 地图中加入图片
- Go学习笔记—多线程
- 安卓APP_ Fragment(4)—— Fragment + ViewPager2 模拟微信首页 (1)两者联动实现翻页
- java的class和object_Java中Class/Object/T的关系
- 为什么生产环境都是linux,关于生产环境linux系统中的wheel用户组
- 线程NEW状态和RUNNABLE状态
- cesium米转换经纬度_cesium 常见坐标系及坐标转换(工具篇)