⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uclinux-sqlite.txt

📁 ucLinux下sqlite数据库移植全攻略 嵌入式下使用数据库的说明
💻 TXT
📖 第 1 页 / 共 2 页
字号:
  RANLIB = $(CROSS)ranlib

  #RANLIB = /opt/mingw/bin/i386-mingw32-ranlib

  #### Extra compiler options needed for programs that use the TCL library.

  #

  #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 the readline() library.

  #

  READLINE_FLAGS =

  #READLINE_FLAGS = -DHAVE_READLINE=1 -I/usr/include/readline

  #### Linker options needed by programs using readline() must link against.

  #

  #LIBREADLINE =

  #LIBREADLINE = -static -lreadline -ltermcap

  #### Should the database engine assume text is coded as UTF-8 or iso8859?

  #

  # 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. If the configure script does not work out for you, there is a generic makefile named "Makefile.linux-gcc" in the top directory of the source tree that you can copy and edit to suite your needs. Comments on the generic makefile show what changes are needed.
你可以用sqlite/Makefile.linux-gcc作为蓝本来修改适合你自己的Makefile。

  你如果有兴趣的话,可以把上面的Makefile的内容和sqlite/Makefile.linux-gcc内容diff对比一下,看看uclinux下的sqlite编译有哪些不同的地方。

  三、修改sqlite/src/os.c

  如果你的sqlite包中包括os.c文件那么就对其进行修改,没有os.c文件可能是你的sqlite版本比较新,那么无须修改。

  将所有你找到的:

  if( s!=0 )

  用:

  if( s!=0 && errno != ENOSYS )

  替换。

  四、修改sqlite/src/shell.c

  1、struct previous_mode_data 结构定义项:

  将 int colWidth[100];

  用 int colWidth[20];

  替换。

  2、struct callback_data 结构定义项

  将:

  int colWidth[100];

  int actualWidth[100];

  char outfile[FILENAME_MAX];

  用:

  int colWidth[20];

  int actualWidth[20];

  char *outfilep;

  对应替换。

  再在结构下面增加:

  #ifndef FILENAME_MAX

  #define FILENAME_MAX 4095

  #endif

  char outfilename[FILENAME_MAX]; /* Filename for *out */

  即

  struct callback_data

  {

  ...

  };

  #ifndef FILENAME_MAX

  #define FILENAME_MAX 4095

  #endif

  char outfilename[FILENAME_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(azArg[1],"stdout")==0

  在它的下面的括号中:

  将 strcpy(p->outfile,"stdout");

  用 p->outfilep = "stdout";

  来替换。

  再在它下面的5-6行处

  将:

  strcpy(p->outfile,azArg[1]);

  用:

  strcpy(outfilename,azArg[1]);

  p->outfilep = outfilename;

  替换。

  再继续,找到类似这样的一句:

  fprintf(p->out,"%9.9s: %s\n","output",

  将:

  fprintf(p->out,"%9.9s: %s\n","output", strlen(p->outfile) ? p->outfile : "stdout");

  用:

  fprintf(p->out,"%9.9s: %s\n","output", p->outfilep && strlen(p->outfilep) ? p->outfilep : "stdout");

   替换。

  完成修改。

  上面的所有的对sqlite的修改完成后,你就可以make dep;make lib_only;make user_only;make romfs;make image了。

  如果你对sqlite 的修改,在make user_only过程中出现错误的话,你可以忽略make dep;make lib_only命令,直接再次进行make user_only;make romfs;make image;就可以了,而不用重复make dep;make lib_only。

  make image会帮你生成romfs文件系统。现在在uClinux-dist/images下面就有编译生成的romfs文件系统了。这个就是我们需要的包含有sqlite的romfs了。

  在上面的过程中,你可以不用在“make image”后再去“make”生成kernel内核,因为你只需要生成romfs就可以了,它里面已经有sqlite了。

  现在你就可以把你生成的含有sqlite应用程序的romfs下载到开发板上运行一下。

  Welcome to

  ____ _ _

  / __| ||_|

  _ _| | | | _ ____ _ _ _ _

  | | | | | | || | _ \| | | |\ \/ /

  | |_| | |__| || | | | | |_| |/ \

  | ___\____|_||_|_| |_|\____|\_/\_/

  | |

  |_|

  GDB/ARMulator support by 

  For further information check:

   

  Command:>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 –l test.sqlite

  你要保证你的/tmp是可写的目录。

  好,现在你的sqlite就已经在uclinux运行起来了,感觉怎么样呀,在uclinux也可以玩玩“select * from”,感觉很爽吧。

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -