返回信息流UBUNTU10.04下的SKYEYE安装教程
注:这是我在进行操作系统实验的模拟软件skyeye安装时候遇到的问题,写了一篇总结,希望对同学以及后来的学弟学妹们有所帮助。
今天尝试做操作系统的实验,遇到诸多问题,做如下总结。
建议:
1.下载最新版本的skyeye,这样子会减少很多麻烦。
2.如果没装linux的话,最好直接装redhat,因为软件原作者的安装说明就是在redhat下安装的。
我安装的系统版本是:Ubuntu10.04
我安装的skyeye版本是古老的skyeye-0.1.1.src.tar.bz2
安装skyeye在老师给的操作手册里面有写:
(1)下载SkyEye的软件包
(2)解压源码包(例如解到“/embed”目录下),执行如下命令:
# cd /embed
# tar –xjvf skyeye-x.x.x.src.tar.bz2
(3)进入解压SkyEye目录,配置SkyEye
# cd skyeye
# ./configure –target=arm-elf –prefix=/usr/local
(4)编译和安装
# make
# make install
正确执行完上面的指令且命令正常结束后,系统中的/usr/local/bin/skyeye执行程序就是安装好的SkyEye软件。
但是安装过程中,可能会出现说找不到GTK的问题。
先到/usr/local/bin下面看看有没有gtk-config
如果有的话:
在/usr/bin目录下执行:ln -s /usr/local/bin/gtk-config gtk-config
如果没有的话
原因是系统的GTK太新了,skyeye要求的是gtk+-1.2版本的。
所以先去下个老版本的gtk吧。
地址如下:
ftp://ftp.gtk.org/pub/gtk/v1.2/glib-1.2.10.tar.gz
ftp://ftp.gtk.org/pub/gtk/v1.2/gtk+-1.2.10.tar.gz
先安装glib
步骤如下:
1.解压 gzip -cd glib-1.2.10.tar.gz | tar xvf 或者 你右键选解压也行
2../configure
3.make
4.rm -rf /install-prefix/include/glib.h /install-prefix/include/gmodule.h
5.make install
我在第三步又遇到了问题,错误提示如下:
gcc -DHAVE_CONFIG_H -I. -I. -I. -DG_LOG_DOMAIN=g_log_domain_glib -g
-O2 -Wall -D_REENTRANT -c gstrfuncs.c -fPIC -DPIC -o
.libs/gstrfuncs.lo
gstrfuncs.c: In function `g_printf_string_upper_bound':
gstrfuncs.c:870: error: syntax error before string constant
gstrfuncs.c:1037: error: syntax error before string constant
gstrfuncs.c:1080: error: syntax error before string constant
gstrfuncs.c:1111: error: syntax error before string constant
make[2]: *** [gstrfuncs.lo] 错误 1
make[2]: Leaving directory `/root/glib-1.2.10'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/root/glib-1.2.10'
make: *** [all-recursive-am] 错误 2
解决目录如下:
在安装目录下,找到gstrfuncs.c这个文件,去870行看看,会发现g_warning()这个函数,里面有一个常量G_GNUC_PRETTY_FUNCTION
,去glib.h查一下,这个常量代表的本体是“”,不知道干嘛的。把所有提示错误行的常量删掉(我是这样做的)。
然后再make一次,问题解决了。
然后安装gtk:
1.解压 gzip -cd glib-1.2.10.tar.gz | tar xvf 或者 你右键选解压也行
2../configure
3.make
4.rm -rf /install-prefix/include/glib.h /install-prefix/include/gmodule.h
5.make install
这次在第一步遇到问题了:它说找不到glib
仔细看错误信息,它会提示你是否打开了ldconfig
执行命令:ldconfig
然后在./configure,出现另一个问题:
X11/Intrinsic.h: No such file or directory 找不到这个东东哦
又是“臭名昭著”的包依赖问题。
命令:apt-get install xorg-dev
或者在新立得里面查找xorg-dev这个包,对应的description应该是the
X.Org X Window System development libraries
还是找不到/usr/bin/gtk-config 其实这时候gtk-config已经出现在/usr/local/bin里面了
ln -s /usr/local/bin/gtk-config gtk-config
又是无法运行GLIB
执行ldconfig
然后
./configure –target=arm-elf –prefix=/usr/local通过了
然后make出现了问题:
eval:1:-s:not found
libbfd.la 错误 127
再继续make,这个错误会跳过,我不知道详细原因
下一个问题:
/gdb/gdbtypes.c 2771 lvalue required as increment operand
(这个问题的解决方法,我是在网上找到的)
在gdb目录下找到gdbtypes.c这个文件,在2771行可以看到这个函数,其实它并不是什么函数,而是一个宏来的,可以在include目录下的obstack.h这个文件下看到它的原型如下
# define obstack_ptr_grow(OBSTACK,datum) \
__extension__ \
({ struct obstack *__o = (OBSTACK); \
if (__o->next_free + sizeof (void *) > __o->chunk_limit) \
_obstack_newchunk (__o, sizeof (void *)); \
*((void **)__o->next_free)++ = ((void *)datum); \
(void)0 )
真是很烦,错误不断,经过不断的尝试,解决办法如下:
# define obstack_ptr_grow(OBSTACK,datum) \
__extension__ \
({ struct obstack *__o = (OBSTACK); \
if (__o->next_free + sizeof (void *) > __o->chunk_limit) \
_obstack_newchunk (__o, sizeof (void *)); \
void **__tmp = (void**)__o->next_free; \
*__tmp++ = ((void *)datum); \
__o->next_free = (char*)__tmp; \
/* *((void **)__o->next_free)++ = ((void *)datum); */ \
(void) 0; })
重新make,然后出现下一个问题:
/usr/local/uclinux/gdb-5.0/gdb/rdi-share/unixcomm.c:389: undefined reference to `__ctype_tolower'
对于很多undefined reference的错误,一般两个根源:
1.缺少某一个库文件,因为在你安装系统时linux不能预先知道你需要哪些库文件。所以需要从光盘或者网上找一些库来安装, 运气好的话有现成的二进制包和rpm包,直接下载下来用就可以了,运气不好的话要下载代码编译一下.
2.安装了这个库文件,但是这个库文件中并没有包含你要的那个reference,你可以用nm来看这个库中的符号表,重新编译这个库,加入你需要的功能。因为有些库很大,比如说C库,它默认编译的时候不可能把所有的功能全部编译进去。它只编译了一些常用的功能,比如字符串,数学运算等等。
我的解决方法是:在/skyeye/gdb/rdi-share/unixcomm.c
加入全局变量:
__const unsigned short int *__ctype_b;
__const __int32_t *__ctype_tolower;
__const __int32_t *__ctype_toupper;
然后到389行,找到对应的函数体:
Unix_IsValidParallelDevice();
在函数变量定义部分的后面加入:
__ctype_b = *(__ctype_b_loc());
__ctype_toupper = *(__ctype_toupper_loc());
__ctype_tolower = *(__ctype_tolower_loc());
然后顺利通过make
最后一步root@mscl skyeye]# make install
4. root@mscl skyeye]# cd /usr/local/bin
可以看到有skyeye这个文件了
[root@mscl skyeye]# skyeye
终于完了,这是不是很烦琐呢?其实这也是一个学习的过程。
最后注:
如果在make过程中出现
libtool: link: only absolute run-paths are allowed
听说可以把skyeye拷贝到/usr/bin下面去编译。原因是绝对路径与相对路径问题,通过修改makefile也可以解决。(我没出现这个问题。)
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #10301同步于 2011/3/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
UBUNTU10.04下的SKYEYE安装教程
liuwaiting
2011/3/18镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
今天有同学打电话问我这个帖子来着。
注明一下:
这个安装方法是针对老版本的skyeye的。(建议还是不要弄了,费事)
新版本的直接在终端输入命令:apt-get install skyeye 就可以了。