[问题]skyeye下运行sqlite3错误,Illegal instruction

内核编译和嵌入式产品的设计与开发
回复
asdfbbs
帖子: 13
注册时间: 2008-05-07 17:22

[问题]skyeye下运行sqlite3错误,Illegal instruction

#1

帖子 asdfbbs »

如题,我用的交叉编译工具是arm-linux-gcc-3.4.1
移植了内核linux-2.6.14,编译了skyeye-1.2.4_Rel,交叉编译了sqlite-3.6.1, 3.6.0, 3.5.9等诸多版本,
在skyeye下运行sqlite3,然后在sqlite的命令行下运行任何SQL语句均报错:Illegal instruction。跳出了sqlite命令行,跳出到skyeye的arm-linux的shell下。
我不知道是sqlite的问题,还是skyeye的问题。
无法在arm-linux下成功运行sqlite,我的项目就无法继续进行了,请大家帮忙啊。

skyeye下运行sqlite3的结果

/tmp/work/4.1.1-2.3.2/sqlite3/bin $ ./sqlite3
SQLite version 3.6.1
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
Illegal instruction
/tmp/work/4.1.1-2.3.2/sqlite3/bin $
上次由 asdfbbs 在 2008-08-12 8:40,总共编辑 2 次。
asdfbbs
帖子: 13
注册时间: 2008-05-07 17:22

#2

帖子 asdfbbs »

怎么没有人回答呢,我忙活了一天,用crosstool-0.43构建了一个交叉编译工具,gcc-4.1.1-glibc-2.3.2,重新交叉编译了sqlite3,还是不行,交叉编译工具、sqlite、skyeye全都换过了,都不行,该怎么办啊。
asdfbbs
帖子: 13
注册时间: 2008-05-07 17:22

#3

帖子 asdfbbs »

还是没有人回答啊,我在想,会不会是移植的linux内核的问题,我移植的是2.6.14,我是参照http://blog.chinaunix.net/u/25764/showart_620897.html中移植linux内核的部分移植的。我猜想是不是内核缺少什么东西呢?俺是新手,搞不清楚”Illegal instruction“这个提示会因为什么出现。用gdb调试skyeye下的sqlite3对我来说也是不可能的事,还是请高人帮忙啊。
asdfbbs
帖子: 13
注册时间: 2008-05-07 17:22

#4

帖子 asdfbbs »

没办法,我开始尝试gdb调试sqlite3,由于本人刚刚接触linux及其编程,还是搞不定,现将调试记录写出来,希望有人能指点一下。
调试sqlite3过程:
shell.c 1523行,执行.tables命令会直到这里
shell.c 1527行 opendb 到跳 955 行
shell.c 1529行 sqlite3_get_table 跳到 table.c 121行 gdb提示“Cannot find bounds of current function”无法单步调试
将断点设置在 shell.c:1551行后,错误出现,说明错误就是在1529行调用函数sqlite3_get_table过程中出现的。
sqlite3_get_table函数中142行调用了sqlite3_malloc,148行调用了sqlite3_exec,对这两个函数设置断点后,程序未停在断点处,而是直接出错,因此怀疑是否在142行调用sqlite3_malloc之前就出了错,但在这之前只有一些简单的赋值语句,不知为何会出错。由于这里不能单步,所以不知道具体在哪句出错了。
设置 sqlite3_exec 函数为断点时,运行.tables命令未到断点处就出错,运行“select * from sqlite_master;”语句则运行到断点处,再继续时才出错。
注:在gdb里只能看到shell.c代码,table.c及其它源码看不到,编译sqlite3的makefile文件中gcc是有参数-g的。
回复