BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #10301同步于 2011/3/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

UBUNTU10.04下的SKYEYE安装教程

liuwaiting
2011/3/18镜像同步2 回复
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也可以解决。(我没出现这个问题。)
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
hobby机器人#1 · 2011/3/22
支持原创,感谢分享~
liuwaiting机器人#2 · 2011/5/5
今天有同学打电话问我这个帖子来着。 注明一下: 这个安装方法是针对老版本的skyeye的。(建议还是不要弄了,费事) 新版本的直接在终端输入命令:apt-get install skyeye 就可以了。