相关文章
北京网站设计注意:HTML文件也能格式化硬盘
网站制作计划任务
北京网页设计CSS 循序渐进(一)画个瓢
北京网页设计给网页文字加上即时提示
北京网页设计在Dreamweaver8.0.2中插入的Flash添加透明或其他参数
北京网站制作第二十四节 表单
网站制作Flash AS游戏教程:用flash制作简单拼图游戏
网页设计Flash视频教程:1.20 橡皮擦工具
北京网站设计CSS技巧:解读absolute与relative
北京网站设计用代码“写”出扫描线效果图片
品牌理念
北京网站建设最佳合作伙伴
北京网站建设专家企通互联
竭诚为您提供网站建设服务!
友好连接
文章搜索
你的位置:首页 >> 网站制作 >> 北京网站制作北京网站设计ucLinux下sqlite数据库移植全攻略(组图)
北京网站制作北京网站设计ucLinux下sqlite数据库移植全攻略(组图)
作者: 北京网站建设 日期:2008-03-27 06:03:35 来源: http://www.qt-net.com
本文讨论的是比较流行的嵌入式开发组合ARM+uclinux,即目标开发板为三星S3C4510,完成sqlite在其uclinux上的移植。北京网站建设
企通互联
本文假设你已经具备正确编译uclinux的kernel的能力,即有能力完成make menuconfig;makedep;makelib_only;make user_only;makeromfs;makeimage;make。而且还能将自己写的类似helloworld程序加到“用户自定义应用程序”中,即你能完成“uClinux-dist/Documentation/Adding-User-Apps-HOWTO”中所描述的“用户程序的订制”。北京网站设计
北京网页设计
北京网站设计
大多数需要移植sqlite到uclinux的开发者,应该已经具备上面的能力,而只是不清楚如何修改sqlite来完成其在uclinux下的编译。如果你还不能完成上面的要求,那么请先做一定的准备工作,因为本范例所涉及到的内容主要是跟sqlite在uclinux下的移植有关,其他的在这个过程中出现的问题,开发者需要自行处理。网页设计
北京网页设计
本范例使用的uclinux是uClinux-dist-20030522.tar.gz,你可以从http://www.uclinux.org得到适合你的软件包。北京网页设计
网页设计
交叉编译工具是arm-elf-tools-20030314.sh,你也可以在http://www.uclinux.org找到它。北京网站设计
网站设计
本范例使用的sqlite是sqlite-2.8.15.tar.gz,本文的方法也适合于2.8.x系列的sqlite;可能有部分内容不适用于3.0.x系列的sqlite,因为3.0.x中源代码有较大的变化。北京网站设计
企通互联
1、下载sqlite:你可以到http://www.sqlite.org/download.html,下载sqlite-2.8.15.tar.gz软件包;网站设计
北京网页设计
2、 将下载的软件包解压缩到uClinux-dist/user目录下;北京网站制作
北京网站设计
命令:北京网站设计
北京网页设计
$tar zxvf sqlite-2.8.15.tar.gz -C uClinux-dist/user/北京网站设计
网页设计
现在在uclinux的user目录下,你应该可以看到sqlite目录了。解压缩到这个user目录主要是要将sqlite编译成一个普通的用户应用程序。网站建设
北京网站建设
3、 用户应用程序的有关设置:北京网站设计
网页设计
按uClinux-dist/Documentation/Adding-User-Apps-HOWTO文档中说提到的,来添加sqlite作为一个用户应用程序,将其做成一个shell,这样就类似于uclinux自己的ps命令。北京网站制作
北京网页设计
编辑文件网页设计
网站制作
uClinux-dist/user/Makefile网站建设
北京网站制作
uClinux-dist/config/Configure.help北京网站制作
网站建设
uClinux-dist/config/config.in网站设计
北京网页设计
我是在这些文件里查找“cpu”有关的项,然后在它的下面,加上自己的sqlite项,这个过程并不复杂。网页设计
北京网站设计
通过上面的修改后,你现在就可以运行uclinux的makemenuconfig,选中“CustomizeVendor/UserSettings”,再选中“MiscellaneousApplications”,可以看到它现在出现了一个新的“sqlite(NEW)”,这个就是我们刚添加进去的sqlite项。网站建设
网页设计
在稍后的makeromfs中,uclinux会将你的sqlite编译进来,做成romfs的一部分,因为你在uClinux-dist/user/Makefile 网站制作中已经加上要编译sqlite项了。这样在移植后的uclinux的/bin中将会有sqlite命令可以让你来执行。北京网站制作
网站设计
好,现在我们就要对sqlite进行修改,来做移植工作。北京网页设计
北京网页设计
在下面的描述中,我们将对以下几个文件进行一定的添加、修改,从而来完成sqlite在uclinux下的编译:网站制作
网页设计
sqlite/main.mk 修改北京网站制作
网页设计
sqlite/Makefile 添加北京网页设计
北京网站建设
sqlite/src/os.c 修改网站制作
北京网页设计
sqlite/src/shell.c 修改网页设计
北京网页设计
对这几个文件进行修改时,请自己做好这些文件的备份,比如你可以将它们拷贝一份,改名成文件名后面带.bak。这个很重要,可以避免你在修改的过程出现问题而无法还原。网站建设
网站建设
一、修改sqlite/main.mk北京网站建设
企通互联
1、TCCX北京网站设计
北京网站设计
将北京网页设计
网站建设
TCCX = $(TCC) $(OPTS) $(THREADSAFE) $(USLEEP) -I.-I$(TOP)/src北京网站制作
北京网站制作
修改为网站建设
网页设计
TCCX = $(TCC) $(OPTS) $(THREADSAFE) $(USLEEP) -I.-I$(TOP)/src$(CFLAGS)企通互联
网页设计
即加上$(CFLAGS)标记。北京网站建设
网页设计
2、 LIBOBJ网站制作
北京网站制作
找到 # Object files for the SQLite library.北京网站设计
北京网站建设
将其中的tclsqlite.o去掉。即去掉tcl有关的东西。网站设计
网页设计
如果没有tclsqlite.o,那么不用处理它。网页设计
北京网页设计
3、 sqlite$(EXE)网站制作
企通互联
找到类似sqlite$(EXE)的一句,将:北京网站制作
网站设计
sqlite$(EXE): $(TOP)/src/shell.c libsqlite.a sqlite.h网站设计
网页设计
$(TCCX) $(READLINE_FLAGS) -o sqlite$(EXE) $(TOP)/src/shell.c\\\\\\\\\\\\\\\\北京网站制作
网站制作
libsqlite.a $(LIBREADLINE) $(THREADLIB)网站设计
北京网页设计
替换为:北京网页设计
北京网页设计
shell.o: $(TOP)/src/shell.c sqlite.h企通互联
网站制作
$(TCCX) $(READLINE_FLAGS) -c $(TOP)/src/shell.c北京网页设计
网页设计
sqlite$(EXE): shell.o libsqlite.a网站建设
北京网站制作
$(TCC) $(LDFLAGS) -o $@ shell.o \\\\\\\\\\\\\\\\北京网页设计
北京网站建设
libsqlite.a $(LIBREADLINE) $(THREADLIB) $(LDLIBS)网站制作
北京网站建设
即在sqlite$(EXE)上一行加上shell.o,及在其后加上$(LDLIBS)标记。这个是对/src/shell.c的编译方法的修改。网站建设
网页设计
4、romfs网页设计
北京网站制作
将:北京网站设计
网站设计
install: sqlite libsqlite.a sqlite.h网站制作
网站设计
mv sqlite /usr/bin北京网页设计
网站建设
mv libsqlite.a /usr/lib网站制作
北京网页设计
mv sqlite.h /usr/include网站建设
网站设计
替换为:北京网页设计
网站设计
romfs: sqlite网页设计
北京网站制作
$(ROMFSINST) /bin/sqlite网站制作
北京网站设计
即去掉make install项,加上makeromfs项。这个很重要,这将在romfs的/bin目录下生成sqlite。网站设计
网页设计
5、clean北京网页设计
企通互联
将:网站设计
网站制作
clean:北京网页设计
企通互联
rm -f *.o sqlite libsqlite.a sqlite.h opcodes.*网站制作
网页设计
rm -f lemon lempar.c parse.* sqlite*.tar.gz企通互联
北京网站设计
rm -f $(PUBLISH)北京网页设计
北京网站设计
rm -f *.da *.bb *.bbg gmon.out网站建设
网站制作
rm -rf tsrc替换为:网页设计
北京网站建设
clean:北京网页设计
北京网页设计
rm -f *.o sqlite libsqlite.a sqlite.h opcodes.* sqlite.gdb网页设计
网站制作
rm -f $(PUBLISH)网站设计
北京网页设计
rm -f *.da *.bb *.bbg gmon.out企通互联
网站制作
rm -rf tsrc网页设计
北京网站制作
distclean: clean网站制作
网页设计
rm -f lemon lempar.c parse.* sqlite*.tar.gz北京网站制作
北京网页设计
rm -f config.h北京网页设计
网站设计
即增加make distclean项。热门推荐: 谈超频的概念及方法 2004年十大热门显卡超频王网站设计
北京网站制作
1 2 3网站设计
北京网站制作
二、在sqlite下增加Makefile文件网站制作
北京网页设计
在sqlite目录下应该没有Makefile文件,而只是有一个sqlite/Makefile.linux-gcc文件。我们要移植sqlite到uclinux,那么就要自己写一个合适的Makefile。北京网站建设
北京网页设计
内容如下:网页设计
北京网站制作
===========Makefile内容开始===========北京网站设计
北京网站建设
#!/usr/make网页设计
网站设计
#北京网站设计
企通互联
# Makefile for SQLITE网站建设
北京网页设计
#网站建设
网站建设
# This is a template makefile for SQLite. Most peoplepreferto网站制作
企通互联
# use the autoconf generated configure script togeneratethe北京网页设计
网站制作
# makefile automatically. But that does not work foreverybody网站建设
网站制作
# and in every situation. If you are having problems with the北京网页设计
北京网页设计
# configure script, you might want to try this makefileasan北京网站设计
网站建设
# alternative. Create a copy of this file, edit theparameters网页设计
网站设计
# below and type make.北京网站建设
网站建设
#网站设计
北京网站建设
#### The toplevel directory of the source tree. This isthedirectory网站制作
网页设计 网站设计
# that contains this Makefile.in and theconfigure.inscript.企通互联
网站制作
#网站制作
网站建设
TOP = .北京网站设计
北京网站制作
#### C Compiler and options for use in buildingexecutablesthat网站建设
北京网站制作
# will run on the platform that is doing the build.北京网站设计
网页设计
#北京网站建设
网站制作
BCC = gcc -g -O2北京网站建设
网站设计
#BCC = /opt/ancic/bin/c89 -0企通互联
网站建设
#### If the target operating system supports theusleep()system网页设计
北京网页设计
# call, then define the HAVE_USLEEP macro for all C modules.网站建设
网站设计
#北京网站制作
北京网站建设
#USLEEP =北京网站建设
网站建设
USLEEP = -DHAVE_USLEEP=1网站设计
网站设计
#### If you want the SQLite library to be safe for usewithina北京网站制作
网站建设
# multi-threaded program, then define the following macro网站制作
北京网站设计
# appropriately:北京网站建设
北京网站设计
#北京网页设计
北京网站制作
#THREADSAFE = -DTHREADSAFE=1北京网站建设
企通互联
THREADSAFE = -DTHREADSAFE=0北京网页设计
北京网站建设
#### Specify any extra linker options needed to makethelibrary网站建设
网站制作
# thread safe北京网站制作
网站设计
#网站建设
网页设计
#THREADLIB = -lpthread北京网页设计
网站建设
THREADLIB =北京网站制作
企通互联
#### Leave MEMORY_DEBUG undefined for maximum speed.UseMEMORY_DEBUG=1网站建设
北京网页设计
# to check for memory leaks. Use MEMORY_DEBUG=2 to print a logofall网站建设
北京网站设计
# malloc()s and free()s in order to track down memory leaks.北京网站建设
网站设计
#北京网页设计
网页设计
# SQLite uses some expensive assert() statements in theinnerloop.北京网站设计
北京网站制作
# You can make the library go almost twice as fast ifyoucompile北京网页设计
北京网站建设
# with -DNDEBUG=1网站设计
网站设计
#企通互联
北京网站制作
#OPTS = -DMEMORY_DEBUG=2北京网页设计
北京网站建设
#OPTS = -DMEMORY_DEBUG=1网站设计
网站建设
#OPTS = -DNDEBUG=1网页设计
网站建设
OPTS = -DMEMORY_DEBUG=1网站设计
北京网站制作
#### The suffix to add to executable files. .exeforwindows.网站制作
网站建设
# Nothing for unix.网站设计
网站设计
#网页设计
网站设计
#EXE = .exe企通互联
北京网页设计
EXE =企通互联
网站制作
#### C Compile and options for use in buildingexecutablesthat企通互联
企通互联
# will run on the target platform. This is usually the same网站制作
北京网站建设
# as BCC, unless you are cross-compiling.北京网页设计
网站制作
#网页设计 北京网页设计
企通互联
TCC = $(CROSS)gcc网页设计
北京网页设计
FLTFLAGS += -s 12000北京网站设计
北京网站建设
#TCC = gcc -g -O0 -Wall网页设计
网页设计
#TCC = gcc -g -O0 -Wall -fprofile-arcs -ftest-coverage企通互联
网页设计
#TCC = /opt/mingw/bin/i386-mingw32-gcc -O6网站建设
网站制作
#TCC = /opt/ansic/bin/c89 -O +z -Wl,-a,archive北京网站制作
北京网站制作
#### Tools used to build a static library.网站建设
北京网站制作
#网站建设
北京网站建设
AR = $(CROSS)ar cr北京网页设计
北京网页设计
#AR = /opt/mingw/bin/i386-mingw32-ar cr网站设计
北京网站建设
RANLIB = $(CROSS)ranlib北京网站设计
网站制作
#RANLIB = /opt/mingw/bin/i386-mingw32-ranlib北京网页设计
北京网页设计
#### Extra compiler options needed for programs that use theTCLlibrary.北京网站建设
网站设计
#北京网站设计
企通互联
#TCL_FLAGS =企通互联
网站设计
#TCL_FLAGS = -DSTATIC_BUILD=1网站制作
北京网站设计
#TCL_FLAGS = -I/home/drh/tcltk/8.4linux网站制作
网站设计
#TCL_FLAGS = -I/home/drh/tcltk/8.4win -DSTATIC_BUILD=1北京网站建设
北京网站建设
北京网站设计 #TCL_FLAGS = -I/home/drh/tcltk/8.3hpux网页设计
北京网站建设
#### Linker options needed to link against the TCL library.北京网站建设
北京网站建设
#北京网站建设
网站设计
#LIBTCL = -ltcl -lm -ldl企通互联
北京网站建设
#LIBTCL = /home/drh/tcltk/8.4linux/libtcl8.4g.a -lm -ldl网页设计
网页设计
#LIBTCL = /home/drh/tcltk/8.4win/libtcl84s.a -lmsvcrt北京网站制作
北京网页设计
#LIBTCL = /home/drh/tcltk/8.3hpux/libtcl8.3.a -ldld -lm -lc网站制作
网站建设
#### Compiler options needed for programs that use thereadline()library.网站设计
企通互联
#北京网站建设
北京网站设计
READLINE_FLAGS =企通互联
网站设计
#READLINE_FLAGS = -DHAVE_READLINE=1 -I/usr/include/readline网站设计
北京网站设计
#### Linker options needed by programs using readline() mustlinkagainst.北京网页设计
网站制作
#网站建设
北京网页设计
#LIBREADLINE =北京网页设计
北京网站建设
#LIBREADLINE = -static -lreadline -ltermcap北京网站建设
北京网站建设
#### Should the database engine assume text is coded as UTF-8oriso8859?网站建设
企通互联
#企通互联
网站建设
# ENCODING = UTF8网站制作
网站建设
ENCODING = ISO8859网页设计
北京网站制作
# You should not have to change anything below this line网站设计
网站设计
###############################################################################网站建设
网站设计
include $(TOP)/main.mk网页设计
网站设计
===========Makefile内容结束===========网站设计
企通互联
注:北京网站设计
网站建设
1、 在uclinux下的sqlite的Makefile将不去用到TCL相关的库。北京网站设计
北京网站制作
2、 在uclinux下的sqlite的Makefile将不去用到readline()。网页设计
北京网站设计
在sqlite/README中有关于Makefile的一段描述:北京网站建设
网站制作
The configure script uses autoconf 2.50 and libtool. Iftheconfigure script does not work out for you, there is agenericmakefile named Makefile.linux-gcc in the top directory ofthesource tree that you can copy and edit to suite yourneeds.Comments on the generic makefile show what changes areneeded.网站建设
北京网页设计
你可以用sqlite/Makefile.linux-gcc作为蓝本来修改适合你自己的Makefile。北京网站设计
网站制作
你如果有兴趣的话,可以把上面的Makefile的内容和sqlite/Makefile.linux-gcc内容diff对比一下,看看uclinux下的sqlite编译有哪些不同的地方。北京网站设计
北京网站建设
三、修改sqlite/src/os.c企通互联
网站建设
如果你的sqlite包中包括os.c文件那么就对其进行修改,没有os.c文件可能是你的sqlite版本比较新,那么无须修改。北京网站制作
北京网站设计
将所有你找到的:北京网站制作
企通互联
用:企通互联
网站制作 www.qt-net.com
替换。热门推荐: 谈超频的概念及方法 2004年十大热门显卡超频王网站设计
网站设计
1 2 3北京网站设计
网站设计
四、修改sqlite/src/shell.c网站设计
北京网页设计
1、struct previous_mode_data 结构定义项:网站设计
北京网站建设
将 int colWidth100;北京网站制作
网站制作
用 int colWidth20;企通互联
北京网站制作
替换。网站制作
网站制作
2、struct callback_data 结构定义项北京网站设计
网站建设
将:网站设计
北京网站设计
int colWidth100;网站建设
网站制作
int actualWidth100;网站制作
企通互联
char outfileFILENAME_MAX;企通互联
北京网页设计
用:企通互联
北京网站设计
int colWidth20;网站制作
网站建设
int actualWidth20;北京网站制作
北京网站制作
char *outfilep;网页设计
网站制作
对应替换。北京网站建设
企通互联
再在结构下面增加:网页设计
北京网站设计
#ifndef FILENAME_MAX网站设计
网站制作
#define FILENAME_MAX 4095北京网站设计
网站制作
#endif北京网站设计
网站制作
char outfilenameFILENAME_MAX; /* Filename for *out */北京网站制作
北京网站制作
即企通互联
北京网站设计
struct callback_data北京网页设计
北京网页设计
...网站建设
北京网站建设
;北京网页设计
网站建设
#ifndef FILENAME_MAX企通互联
网站建设
#define FILENAME_MAX 4095企通互联
网页设计
#endif网站建设
网页设计
char outfilenameFILENAME_MAX; /* Filename for *out */企通互联
网页设计
3、函数do_meta_command(...)北京网站建设
网站设计
找到类似这样的一句:企通互联
网站设计
sqlite_exec(p->db, PRAGMA database_list; ,callback,&data, &zErrMsg);网站制作
北京网页设计
在它的前面有一句北京网站设计
网页设计
memcpy(&data, p, sizeof(data));网站制作
北京网页设计
现在在memcpy下面增加一行企通互联
网站设计
data.cnt = 0;北京网站建设
网页设计
即将结构中cnt的值赋为0 ;网站设计
北京网页设计
现在代码会被修改成类似:企通互联
北京网站建设
open_db(p);网页设计
网页设计
memcpy(&data, p, sizeof(data));网站建设
网站设计
data.cnt = 0;北京网站建设
北京网站制作
再继续。北京网站设计
网页设计
找到类似这样的一句:网站建设
北京网站建设
strcmp(azArg1,stdout)==0网页设计
北京网站建设
在它的下面的括号中:网页设计
网页设计
将 strcpy(p->outfile,stdout);网页设计
企通互联
用 p->outfilep = stdout;北京网站建设
网站设计
网站建设 来替换。网站建设
网页设计
再在它下面的5-6行处北京网页设计
网页设计
将:北京网站制作
网站制作
strcpy(p->outfile,azArg1);企通互联
网站建设
用:企通互联
网站建设
strcpy(outfilename,azArg1);网站设计
网页设计
p->outfilep = outfilename;网页设计
北京网站建设
替换。企通互联
企通互联
再继续,找到类似这样的一句:网站设计
北京网站建设
fprintf(p->out,%9.9s: %s\\\\\\\\\\\\\\\\ ,output,网站设计
网站建设
将:北京网站建设
网站制作
fprintf(p->out,%9.9s: %s\\\\\\\\\\\\\\\\ ,output, strlen(p->outfile)?p->outfile : stdout);北京网站制作
北京网站制作
用:网站制作
北京网站设计
fprintf(p->out,%9.9s: %s\\\\\\\\\\\\\\\\ ,output,p->outfilep&& strlen(p->outfilep) ? p->outfilep :stdout);北京网站设计
网站制作
替换。北京网站建设
企通互联
完成修改。网站设计
网页设计
上面的所有的对sqlite的修改完成后,你就可以make dep;make lib_only;makeuser_only;makeromfs;make image了。企通互联
网站制作
如果你对sqlite的修改,在make user_only过程中出现错误的话,你可以忽略makedep;makelib_only命令,直接再次进行make user_only;makeromfs;makeimage;就可以了,而不用重复make dep;make lib_only。北京网页设计
网站设计
makeimage会帮你生成romfs文件系统。现在在uClinux-dist/images下面就有编译生成的romfs文件系统了。这个就是我们需要的包含有sqlite的romfs了。网站建设
北京网站制作
在上面的过程中,你可以不用在“makeimage”后再去“make”生成kernel内核,因为你只需要生成romfs就可以了,它里面已经有sqlite了。企通互联
北京网站制作
现在你就可以把你生成的含有sqlite应用程序的romfs下载到开发板上运行一下。网站制作
企通互联
Welcome to北京网站建设
网站制作
____ _ _北京网站设计
网页设计
/ ___北京网页设计
北京网站制作
_ __ ____ _ _ _ _网站制作
企通互联
_ \\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\/ /北京网站设计 北京网站建设
网站设计
_ __ _ / \\\\\\\\\\\\\\\\企通互联
网页设计
___\\\\\\\\\\\\\\\\____ __ _ _ \\\\\\\\\\\\\\\\____ \\\\\\\\\\\\\\\\_/\\\\\\\\\\\\\\\\_/北京网站建设
北京网站建设
_北京网站建设
北京网站建设
GDB/ARMulator support by网站制作
北京网站建设
For further information check:北京网页设计
企通互联
http://www.uclinux.org/北京网站建设
网站制作
Command: /bin/ifconfig eth0 up 10.0.0.2网站设计
网站建设
Execution Finished, Exiting北京网站制作
北京网站建设
init: Booting to single user mode网站设计
北京网站设计
Sash command shell (version 1.1.1)企通互联
网站制作
/> cd bin网页设计
网页设计
/bin> ls -l sqlite北京网站制作
网站建设
-rwxr-xr-x 1 0 0 327072 Jan 01 00:00 sqlite 企通互联网页设计
北京网页设计
/bin >cd /tmp企通互联
网页设计
/tmp>sqlite test.sqlite企通互联
北京网页设计
sqlite> create table my(name varchar(80), num smallint);北京网站制作
北京网站设计
sqlite> insert into my values(yutao, 100);北京网站建设
北京网站制作
sqlite> insert into my values(uclinux, 99);北京网站制作
北京网页设计
sqlite> select * from my;网站建设
网页设计
yutao 100网站设计
网页设计
uclinux 99网站设计
北京网站制作
sqlite> .tables北京网站建设
北京网站制作
my网页设计
网页设计
sqlite> .schema网站建设
北京网站建设
create table my(name varchar(80), num smallint);北京网站设计
网站建设
sqlite> .q网站建设
北京网页设计
/tmp>ls Cl test.sqlite网页设计
北京网站建设
你要保证你的/tmp是可写的目录。北京网页设计
企通互联
好,现在你的sqlite就已经在uclinux运行起来了,感觉如何呀,在uclinux也可以玩玩“select*from”,感觉很爽吧。热门推荐: 谈超频的概念及方法 2004年十大热门显卡超频王网页设计
网站建设
北京网站设计
企通互联
本文假设你已经具备正确编译uclinux的kernel的能力,即有能力完成make menuconfig;makedep;makelib_only;make user_only;makeromfs;makeimage;make。而且还能将自己写的类似helloworld程序加到“用户自定义应用程序”中,即你能完成“uClinux-dist/Documentation/Adding-User-Apps-HOWTO”中所描述的“用户程序的订制”。北京网站设计
北京网页设计
北京网站设计
大多数需要移植sqlite到uclinux的开发者,应该已经具备上面的能力,而只是不清楚如何修改sqlite来完成其在uclinux下的编译。如果你还不能完成上面的要求,那么请先做一定的准备工作,因为本范例所涉及到的内容主要是跟sqlite在uclinux下的移植有关,其他的在这个过程中出现的问题,开发者需要自行处理。网页设计
北京网页设计
本范例使用的uclinux是uClinux-dist-20030522.tar.gz,你可以从http://www.uclinux.org得到适合你的软件包。北京网页设计
网页设计
交叉编译工具是arm-elf-tools-20030314.sh,你也可以在http://www.uclinux.org找到它。北京网站设计
网站设计
本范例使用的sqlite是sqlite-2.8.15.tar.gz,本文的方法也适合于2.8.x系列的sqlite;可能有部分内容不适用于3.0.x系列的sqlite,因为3.0.x中源代码有较大的变化。北京网站设计
企通互联
1、下载sqlite:你可以到http://www.sqlite.org/download.html,下载sqlite-2.8.15.tar.gz软件包;网站设计
北京网页设计
2、 将下载的软件包解压缩到uClinux-dist/user目录下;北京网站制作
北京网站设计
命令:北京网站设计
北京网页设计
$tar zxvf sqlite-2.8.15.tar.gz -C uClinux-dist/user/北京网站设计
网页设计
现在在uclinux的user目录下,你应该可以看到sqlite目录了。解压缩到这个user目录主要是要将sqlite编译成一个普通的用户应用程序。网站建设
北京网站建设
3、 用户应用程序的有关设置:北京网站设计
网页设计
按uClinux-dist/Documentation/Adding-User-Apps-HOWTO文档中说提到的,来添加sqlite作为一个用户应用程序,将其做成一个shell,这样就类似于uclinux自己的ps命令。北京网站制作
北京网页设计
编辑文件网页设计
网站制作
uClinux-dist/user/Makefile网站建设
北京网站制作
uClinux-dist/config/Configure.help北京网站制作
网站建设
uClinux-dist/config/config.in网站设计
北京网页设计
我是在这些文件里查找“cpu”有关的项,然后在它的下面,加上自己的sqlite项,这个过程并不复杂。网页设计
北京网站设计
通过上面的修改后,你现在就可以运行uclinux的makemenuconfig,选中“CustomizeVendor/UserSettings”,再选中“MiscellaneousApplications”,可以看到它现在出现了一个新的“sqlite(NEW)”,这个就是我们刚添加进去的sqlite项。网站建设
网页设计
在稍后的makeromfs中,uclinux会将你的sqlite编译进来,做成romfs的一部分,因为你在uClinux-dist/user/Makefile 网站制作中已经加上要编译sqlite项了。这样在移植后的uclinux的/bin中将会有sqlite命令可以让你来执行。北京网站制作
网站设计
好,现在我们就要对sqlite进行修改,来做移植工作。北京网页设计
北京网页设计
在下面的描述中,我们将对以下几个文件进行一定的添加、修改,从而来完成sqlite在uclinux下的编译:网站制作
网页设计
sqlite/main.mk 修改北京网站制作
网页设计
sqlite/Makefile 添加北京网页设计
北京网站建设
sqlite/src/os.c 修改网站制作
北京网页设计
sqlite/src/shell.c 修改网页设计
北京网页设计
对这几个文件进行修改时,请自己做好这些文件的备份,比如你可以将它们拷贝一份,改名成文件名后面带.bak。这个很重要,可以避免你在修改的过程出现问题而无法还原。网站建设
网站建设
一、修改sqlite/main.mk北京网站建设
企通互联
1、TCCX北京网站设计
北京网站设计
将北京网页设计
网站建设
TCCX = $(TCC) $(OPTS) $(THREADSAFE) $(USLEEP) -I.-I$(TOP)/src北京网站制作
北京网站制作
修改为网站建设
网页设计
TCCX = $(TCC) $(OPTS) $(THREADSAFE) $(USLEEP) -I.-I$(TOP)/src$(CFLAGS)企通互联
网页设计
即加上$(CFLAGS)标记。北京网站建设
网页设计
2、 LIBOBJ网站制作
北京网站制作
找到 # Object files for the SQLite library.北京网站设计
北京网站建设
将其中的tclsqlite.o去掉。即去掉tcl有关的东西。网站设计
网页设计
如果没有tclsqlite.o,那么不用处理它。网页设计
北京网页设计
3、 sqlite$(EXE)网站制作
企通互联
找到类似sqlite$(EXE)的一句,将:北京网站制作
网站设计
sqlite$(EXE): $(TOP)/src/shell.c libsqlite.a sqlite.h网站设计
网页设计
$(TCCX) $(READLINE_FLAGS) -o sqlite$(EXE) $(TOP)/src/shell.c\\\\\\\\\\\\\\\\北京网站制作
网站制作
libsqlite.a $(LIBREADLINE) $(THREADLIB)网站设计
北京网页设计
替换为:北京网页设计
北京网页设计
shell.o: $(TOP)/src/shell.c sqlite.h企通互联
网站制作
$(TCCX) $(READLINE_FLAGS) -c $(TOP)/src/shell.c北京网页设计
网页设计
sqlite$(EXE): shell.o libsqlite.a网站建设
北京网站制作
$(TCC) $(LDFLAGS) -o $@ shell.o \\\\\\\\\\\\\\\\北京网页设计
北京网站建设
libsqlite.a $(LIBREADLINE) $(THREADLIB) $(LDLIBS)网站制作
北京网站建设
即在sqlite$(EXE)上一行加上shell.o,及在其后加上$(LDLIBS)标记。这个是对/src/shell.c的编译方法的修改。网站建设
网页设计
4、romfs网页设计
北京网站制作
将:北京网站设计
网站设计
install: sqlite libsqlite.a sqlite.h网站制作
网站设计
mv sqlite /usr/bin北京网页设计
网站建设
mv libsqlite.a /usr/lib网站制作
北京网页设计
mv sqlite.h /usr/include网站建设
网站设计
替换为:北京网页设计
网站设计
romfs: sqlite网页设计
北京网站制作
$(ROMFSINST) /bin/sqlite网站制作
北京网站设计
即去掉make install项,加上makeromfs项。这个很重要,这将在romfs的/bin目录下生成sqlite。网站设计
网页设计
5、clean北京网页设计
企通互联
将:网站设计
网站制作
clean:北京网页设计
企通互联
rm -f *.o sqlite libsqlite.a sqlite.h opcodes.*网站制作
网页设计
rm -f lemon lempar.c parse.* sqlite*.tar.gz企通互联
北京网站设计
rm -f $(PUBLISH)北京网页设计
北京网站设计
rm -f *.da *.bb *.bbg gmon.out网站建设
网站制作
rm -rf tsrc替换为:网页设计
北京网站建设
clean:北京网页设计
北京网页设计
rm -f *.o sqlite libsqlite.a sqlite.h opcodes.* sqlite.gdb网页设计
网站制作
rm -f $(PUBLISH)网站设计
北京网页设计
rm -f *.da *.bb *.bbg gmon.out企通互联
网站制作
rm -rf tsrc网页设计
北京网站制作
distclean: clean网站制作
网页设计
rm -f lemon lempar.c parse.* sqlite*.tar.gz北京网站制作
北京网页设计
rm -f config.h北京网页设计
网站设计
即增加make distclean项。热门推荐: 谈超频的概念及方法 2004年十大热门显卡超频王网站设计
北京网站制作
1 2 3网站设计
北京网站制作
北京网页设计
在sqlite目录下应该没有Makefile文件,而只是有一个sqlite/Makefile.linux-gcc文件。我们要移植sqlite到uclinux,那么就要自己写一个合适的Makefile。北京网站建设
北京网页设计
内容如下:网页设计
北京网站制作
===========Makefile内容开始===========北京网站设计
北京网站建设
#!/usr/make网页设计
网站设计
#北京网站设计
企通互联
# Makefile for SQLITE网站建设
北京网页设计
#网站建设
网站建设
# This is a template makefile for SQLite. Most peoplepreferto网站制作
企通互联
# use the autoconf generated configure script togeneratethe北京网页设计
网站制作
# makefile automatically. But that does not work foreverybody网站建设
网站制作
# and in every situation. If you are having problems with the北京网页设计
北京网页设计
# configure script, you might want to try this makefileasan北京网站设计
网站建设
# alternative. Create a copy of this file, edit theparameters网页设计
网站设计
# below and type make.北京网站建设
网站建设
#网站设计
北京网站建设
#### The toplevel directory of the source tree. This isthedirectory网站制作
网页设计 网站设计
# that contains this Makefile.in and theconfigure.inscript.企通互联
网站制作
#网站制作
网站建设
TOP = .北京网站设计
北京网站制作
#### C Compiler and options for use in buildingexecutablesthat网站建设
北京网站制作
# will run on the platform that is doing the build.北京网站设计
网页设计
#北京网站建设
网站制作
BCC = gcc -g -O2北京网站建设
网站设计
#BCC = /opt/ancic/bin/c89 -0企通互联
网站建设
#### If the target operating system supports theusleep()system网页设计
北京网页设计
# call, then define the HAVE_USLEEP macro for all C modules.网站建设
网站设计
#北京网站制作
北京网站建设
#USLEEP =北京网站建设
网站建设
USLEEP = -DHAVE_USLEEP=1网站设计
网站设计
#### If you want the SQLite library to be safe for usewithina北京网站制作
网站建设
# multi-threaded program, then define the following macro网站制作
北京网站设计
# appropriately:北京网站建设
北京网站设计
#北京网页设计
北京网站制作
#THREADSAFE = -DTHREADSAFE=1北京网站建设
企通互联
THREADSAFE = -DTHREADSAFE=0北京网页设计
北京网站建设
#### Specify any extra linker options needed to makethelibrary网站建设
网站制作
# thread safe北京网站制作
网站设计
#网站建设
网页设计
#THREADLIB = -lpthread北京网页设计
网站建设
THREADLIB =北京网站制作
企通互联
#### Leave MEMORY_DEBUG undefined for maximum speed.UseMEMORY_DEBUG=1网站建设
北京网页设计
# to check for memory leaks. Use MEMORY_DEBUG=2 to print a logofall网站建设
北京网站设计
# malloc()s and free()s in order to track down memory leaks.北京网站建设
网站设计
#北京网页设计
网页设计
# SQLite uses some expensive assert() statements in theinnerloop.北京网站设计
北京网站制作
# You can make the library go almost twice as fast ifyoucompile北京网页设计
北京网站建设
# with -DNDEBUG=1网站设计
网站设计
#企通互联
北京网站制作
#OPTS = -DMEMORY_DEBUG=2北京网页设计
北京网站建设
#OPTS = -DMEMORY_DEBUG=1网站设计
网站建设
#OPTS = -DNDEBUG=1网页设计
网站建设
OPTS = -DMEMORY_DEBUG=1网站设计
北京网站制作
#### The suffix to add to executable files. .exeforwindows.网站制作
网站建设
# Nothing for unix.网站设计
网站设计
#网页设计
网站设计
#EXE = .exe企通互联
北京网页设计
EXE =企通互联
网站制作
#### C Compile and options for use in buildingexecutablesthat企通互联
企通互联
# will run on the target platform. This is usually the same网站制作
北京网站建设
# as BCC, unless you are cross-compiling.北京网页设计
网站制作
#网页设计 北京网页设计
企通互联
TCC = $(CROSS)gcc网页设计
北京网页设计
FLTFLAGS += -s 12000北京网站设计
北京网站建设
#TCC = gcc -g -O0 -Wall网页设计
网页设计
#TCC = gcc -g -O0 -Wall -fprofile-arcs -ftest-coverage企通互联
网页设计
#TCC = /opt/mingw/bin/i386-mingw32-gcc -O6网站建设
网站制作
#TCC = /opt/ansic/bin/c89 -O +z -Wl,-a,archive北京网站制作
北京网站制作
#### Tools used to build a static library.网站建设
北京网站制作
#网站建设
北京网站建设
AR = $(CROSS)ar cr北京网页设计
北京网页设计
#AR = /opt/mingw/bin/i386-mingw32-ar cr网站设计
北京网站建设
RANLIB = $(CROSS)ranlib北京网站设计
网站制作
#RANLIB = /opt/mingw/bin/i386-mingw32-ranlib北京网页设计
北京网页设计
#### Extra compiler options needed for programs that use theTCLlibrary.北京网站建设
网站设计
#北京网站设计
企通互联
#TCL_FLAGS =企通互联
网站设计
#TCL_FLAGS = -DSTATIC_BUILD=1网站制作
北京网站设计
#TCL_FLAGS = -I/home/drh/tcltk/8.4linux网站制作
网站设计
#TCL_FLAGS = -I/home/drh/tcltk/8.4win -DSTATIC_BUILD=1北京网站建设
北京网站建设
北京网站设计 #TCL_FLAGS = -I/home/drh/tcltk/8.3hpux网页设计
北京网站建设
#### Linker options needed to link against the TCL library.北京网站建设
北京网站建设
#北京网站建设
网站设计
#LIBTCL = -ltcl -lm -ldl企通互联
北京网站建设
#LIBTCL = /home/drh/tcltk/8.4linux/libtcl8.4g.a -lm -ldl网页设计
网页设计
#LIBTCL = /home/drh/tcltk/8.4win/libtcl84s.a -lmsvcrt北京网站制作
北京网页设计
#LIBTCL = /home/drh/tcltk/8.3hpux/libtcl8.3.a -ldld -lm -lc网站制作
网站建设
#### Compiler options needed for programs that use thereadline()library.网站设计
企通互联
#北京网站建设
北京网站设计
READLINE_FLAGS =企通互联
网站设计
#READLINE_FLAGS = -DHAVE_READLINE=1 -I/usr/include/readline网站设计
北京网站设计
#### Linker options needed by programs using readline() mustlinkagainst.北京网页设计
网站制作
#网站建设
北京网页设计
#LIBREADLINE =北京网页设计
北京网站建设
#LIBREADLINE = -static -lreadline -ltermcap北京网站建设
北京网站建设
#### Should the database engine assume text is coded as UTF-8oriso8859?网站建设
企通互联
#企通互联
网站建设
# ENCODING = UTF8网站制作
网站建设
ENCODING = ISO8859网页设计
北京网站制作
# You should not have to change anything below this line网站设计
网站设计
###############################################################################网站建设
网站设计
include $(TOP)/main.mk网页设计
网站设计
===========Makefile内容结束===========网站设计
企通互联
注:北京网站设计
网站建设
1、 在uclinux下的sqlite的Makefile将不去用到TCL相关的库。北京网站设计
北京网站制作
2、 在uclinux下的sqlite的Makefile将不去用到readline()。网页设计
北京网站设计
在sqlite/README中有关于Makefile的一段描述:北京网站建设
网站制作
The configure script uses autoconf 2.50 and libtool. Iftheconfigure script does not work out for you, there is agenericmakefile named Makefile.linux-gcc in the top directory ofthesource tree that you can copy and edit to suite yourneeds.Comments on the generic makefile show what changes areneeded.网站建设
北京网页设计
你可以用sqlite/Makefile.linux-gcc作为蓝本来修改适合你自己的Makefile。北京网站设计
网站制作
你如果有兴趣的话,可以把上面的Makefile的内容和sqlite/Makefile.linux-gcc内容diff对比一下,看看uclinux下的sqlite编译有哪些不同的地方。北京网站设计
北京网站建设
三、修改sqlite/src/os.c企通互联
网站建设
如果你的sqlite包中包括os.c文件那么就对其进行修改,没有os.c文件可能是你的sqlite版本比较新,那么无须修改。北京网站制作
北京网站设计
将所有你找到的:北京网站制作
企通互联
用:企通互联
网站制作 www.qt-net.com
替换。热门推荐: 谈超频的概念及方法 2004年十大热门显卡超频王网站设计
网站设计
1 2 3北京网站设计
网站设计
北京网页设计
1、struct previous_mode_data 结构定义项:网站设计
北京网站建设
将 int colWidth100;北京网站制作
网站制作
用 int colWidth20;企通互联
北京网站制作
替换。网站制作
网站制作
2、struct callback_data 结构定义项北京网站设计
网站建设
将:网站设计
北京网站设计
int colWidth100;网站建设
网站制作
int actualWidth100;网站制作
企通互联
char outfileFILENAME_MAX;企通互联
北京网页设计
用:企通互联
北京网站设计
int colWidth20;网站制作
网站建设
int actualWidth20;北京网站制作
北京网站制作
char *outfilep;网页设计
网站制作
对应替换。北京网站建设
企通互联
再在结构下面增加:网页设计
北京网站设计
#ifndef FILENAME_MAX网站设计
网站制作
#define FILENAME_MAX 4095北京网站设计
网站制作
#endif北京网站设计
网站制作
char outfilenameFILENAME_MAX; /* Filename for *out */北京网站制作
北京网站制作
即企通互联
北京网站设计
struct callback_data北京网页设计
北京网页设计
...网站建设
北京网站建设
;北京网页设计
网站建设
#ifndef FILENAME_MAX企通互联
网站建设
#define FILENAME_MAX 4095企通互联
网页设计
#endif网站建设
网页设计
char outfilenameFILENAME_MAX; /* Filename for *out */企通互联
网页设计
3、函数do_meta_command(...)北京网站建设
网站设计
找到类似这样的一句:企通互联
网站设计
sqlite_exec(p->db, PRAGMA database_list; ,callback,&data, &zErrMsg);网站制作
北京网页设计
在它的前面有一句北京网站设计
网页设计
memcpy(&data, p, sizeof(data));网站制作
北京网页设计
现在在memcpy下面增加一行企通互联
网站设计
data.cnt = 0;北京网站建设
网页设计
即将结构中cnt的值赋为0 ;网站设计
北京网页设计
现在代码会被修改成类似:企通互联
北京网站建设
open_db(p);网页设计
网页设计
memcpy(&data, p, sizeof(data));网站建设
网站设计
data.cnt = 0;北京网站建设
北京网站制作
再继续。北京网站设计
网页设计
找到类似这样的一句:网站建设
北京网站建设
strcmp(azArg1,stdout)==0网页设计
北京网站建设
在它的下面的括号中:网页设计
网页设计
将 strcpy(p->outfile,stdout);网页设计
企通互联
用 p->outfilep = stdout;北京网站建设
网站设计
网站建设 来替换。网站建设
网页设计
再在它下面的5-6行处北京网页设计
网页设计
将:北京网站制作
网站制作
strcpy(p->outfile,azArg1);企通互联
网站建设
用:企通互联
网站建设
strcpy(outfilename,azArg1);网站设计
网页设计
p->outfilep = outfilename;网页设计
北京网站建设
替换。企通互联
企通互联
再继续,找到类似这样的一句:网站设计
北京网站建设
fprintf(p->out,%9.9s: %s\\\\\\\\\\\\\\\\ ,output,网站设计
网站建设
将:北京网站建设
网站制作
fprintf(p->out,%9.9s: %s\\\\\\\\\\\\\\\\ ,output, strlen(p->outfile)?p->outfile : stdout);北京网站制作
北京网站制作
用:网站制作
北京网站设计
fprintf(p->out,%9.9s: %s\\\\\\\\\\\\\\\\ ,output,p->outfilep&& strlen(p->outfilep) ? p->outfilep :stdout);北京网站设计
网站制作
替换。北京网站建设
企通互联
完成修改。网站设计
网页设计
上面的所有的对sqlite的修改完成后,你就可以make dep;make lib_only;makeuser_only;makeromfs;make image了。企通互联
网站制作
如果你对sqlite的修改,在make user_only过程中出现错误的话,你可以忽略makedep;makelib_only命令,直接再次进行make user_only;makeromfs;makeimage;就可以了,而不用重复make dep;make lib_only。北京网页设计
网站设计
makeimage会帮你生成romfs文件系统。现在在uClinux-dist/images下面就有编译生成的romfs文件系统了。这个就是我们需要的包含有sqlite的romfs了。网站建设
北京网站制作
在上面的过程中,你可以不用在“makeimage”后再去“make”生成kernel内核,因为你只需要生成romfs就可以了,它里面已经有sqlite了。企通互联
北京网站制作
现在你就可以把你生成的含有sqlite应用程序的romfs下载到开发板上运行一下。网站制作
企通互联
Welcome to北京网站建设
网站制作
____ _ _北京网站设计
网页设计
/ ___北京网页设计
北京网站制作
_ __ ____ _ _ _ _网站制作
企通互联
_ \\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\/ /北京网站设计 北京网站建设
网站设计
_ __ _ / \\\\\\\\\\\\\\\\企通互联
网页设计
___\\\\\\\\\\\\\\\\____ __ _ _ \\\\\\\\\\\\\\\\____ \\\\\\\\\\\\\\\\_/\\\\\\\\\\\\\\\\_/北京网站建设
北京网站建设
_北京网站建设
北京网站建设
GDB/ARMulator support by网站制作
北京网站建设
For further information check:北京网页设计
企通互联
http://www.uclinux.org/北京网站建设
网站制作
Command: /bin/ifconfig eth0 up 10.0.0.2网站设计
网站建设
Execution Finished, Exiting北京网站制作
北京网站建设
init: Booting to single user mode网站设计
北京网站设计
Sash command shell (version 1.1.1)企通互联
网站制作
/> cd bin网页设计
网页设计
/bin> ls -l sqlite北京网站制作
网站建设
-rwxr-xr-x 1 0 0 327072 Jan 01 00:00 sqlite 企通互联网页设计
北京网页设计
/bin >cd /tmp企通互联
网页设计
/tmp>sqlite test.sqlite企通互联
北京网页设计
sqlite> create table my(name varchar(80), num smallint);北京网站制作
北京网站设计
sqlite> insert into my values(yutao, 100);北京网站建设
北京网站制作
sqlite> insert into my values(uclinux, 99);北京网站制作
北京网页设计
sqlite> select * from my;网站建设
网页设计
yutao 100网站设计
网页设计
uclinux 99网站设计
北京网站制作
sqlite> .tables北京网站建设
北京网站制作
my网页设计
网页设计
sqlite> .schema网站建设
北京网站建设
create table my(name varchar(80), num smallint);北京网站设计
网站建设
sqlite> .q网站建设
北京网页设计
/tmp>ls Cl test.sqlite网页设计
北京网站建设
你要保证你的/tmp是可写的目录。北京网页设计
企通互联
好,现在你的sqlite就已经在uclinux运行起来了,感觉如何呀,在uclinux也可以玩玩“select*from”,感觉很爽吧。热门推荐: 谈超频的概念及方法 2004年十大热门显卡超频王网页设计
网站建设