LiangShuang's ...

I'm not a programmer...

quartus libstdc++.so.6 conflicts with nautilus!

    今天安装完一些更新之后突然发现位置菜单下浏览文件失效了,而且桌面上的快捷方式图标什么的全都消失,但是终端还能启动,总算还有一点希望。然后到网上搜了好长时间,最后找到了关键字 “Desktop icons invisible and File Browser doesn't work",仔细阅读了以下国外fedora用户的解决办法,最后定位到应该是nautilus出了问题,就在终端下运行nautilus,结果很明显:

nautilus

可以看出是quartus安装的so的版本出了问题,导致nautilus在动态链接时链接的是quartus下这个错误的so,最终导致了nautilus无法正常启动。本来想去掉LD_LIBRARY_PATH中quartus的这个路径的,但是grmon 的jtag选项必须用到这个路径下的其他的so文件,所以后来想了个办法mv libstdc++.so.6 libstdc++.so.6.bak,这样nautilus就不会链接quartus下的libstdc++.so.6了,logout之后果然一切如初了。。。

关于fedora下使用usb blaster

    Altera的USB blaster默认情况下是需要root权限才能使用的,怎么才能使用普通用户的身份访问呢?之前看到北大bbs上写的方法在fstab里直接加上一行usbfs /proc/bus/usb usbfs devmode=0666 0 0,这样从新挂载/proc/bus/usb就可以修改设备的权限了,第二种方法是给altera的usb设备增加一个规则文件在/etc/udev/rule.d/目录下,这个也是在Altera的官方网站上说到的,网址如下:http://www.altera.com/download/drivers/dri-usb_b-lnx.html#rhel5,然后再将quartus安装路径下的.../linux/pgm_parts.txt拷贝到.../etc/jtagd/jtagd.pgm_parts下,mkdir /etc/jtagd; cp .../linux/pgm_parts.txt .../etc/jtagd/jtagd.pgm_parts,之后的echo 356 40000 32 32000 > /proc/sys/kernel/sem不知道是什么意思了,虽然这样处理过之后可以使用usb blaster了,但是下次重启之后又不能用了。按照Altera官网上的驱动安装方法试过之后尽管在programmer里能够检测到usb设备,但是会出现异常:

Error: Unexpected error in JTAG server -- error code 89
Error: Operation failed

在网上查过之后应该是权限问题,网上的一种解决办法是http://www.alteraforums.com/forum/showthread.php?p=70742,看了太复杂了,之后找到个简单的http://www.alteraforum.com/forum/showthread.php?t=23238,大体的思想就是在系统初始化之后启动jtagd进程,

mkdir /etc/jtagd
cp /opt/altera9.1sp1/quartus/linux/pgm_parts.txt /etc/jtagd/jtagd.pgm_parts

Add these lines to /etc/rc.local to start jtagd server. As root or via sudo.

/opt/altera9.1sp1/quartus/bin/jtagd

按照这种做法重启之后果然好用了。

quartus10.0在fc14上的安装

    因为要在Altera的De2-70的板子上跑leon3的平台了,所以在fedora下装个quartus玩玩。下载quartus10.0 for linux的过程也相当的搞笑,从altera的官网上下了2天没下下来,由于是教育网用了代理之后也只有几十k的速度,随后又叫同学在电驴上找了个资源,7.1G,好不容易下下来了,可是更悲剧的是居然下的是windos的版本,还以为这么大的安装文件会同时含有两个系统的呢。就在走投无路时想起了工大的最大的软件分享ftp,于是到上面去看看,结果就在Engineering.General/EDA/这个目录下居然有Altera公司的软件,进去一看果然有Quartus II.V10,下载速度最快达到8M,这下可High了!

    很快就下完了,于是挂载到fedora下,./setup,结果没有出现安装界面,只是几行错误提示

“Starting GUI. If nothing shows up, or you don't have an X display, run:
   ./setup --help
for commandline usage.
NOTE: All output has been redirected to /tmp/altera_setup.log,在网上查了以下是libX11.so.6的依赖问题,我们需要让quartus调用我们系统下的/usr/lib下的libX11.so.6文件,而不是.../altera_installer/bin下的那个,mv .../altera_installer/bin/libX11.so.6 .../altera_installer/bin/libX11.so.6.bak,然后再执行./setup就可以一路安装下去了。

    安装完成后更新PATH,echo "export PATH=$PATH:/opt/Programs/altera/10.0/quartus/bin/" >> ~/.bashrc,source ~/.bashrc,然后就可以执行quartus了,问题又出现了“quartus: error while loading shared libraries: libsys_cpt.so: cannot enable executable stack as shared object requires: Permission denied“,还以为是没有破解的原因所以没法运行,就去CSDN上下了个破解文件,替换掉.../linux/下的libsys_cpt.so,可是还是同样的错误,看了网上的破解方法说需要改libsys_cpt.so来完成破解,需要一个hex编辑器,网上查过之后说配置以下vim就能直接打开hex类型的文件了,在vim下输入:help hex就可以找到.vimrc的配置说明,

" vim -b : edit binary using xxd-format!
        augroup Binary
          au!
          au BufReadPre  *.bin let &bin=1 
          au BufReadPost *.bin if &bin | %!xxd 
          au BufReadPost *.bin set ft=xxd | endif
          au BufWritePre *.bin if &bin | %!xxd -r
          au BufWritePre *.bin endif 
          au BufWritePost *.bin if &bin | %!xxd
          au BufWritePost *.bin set nomod | endif
        augroup END

只需要把这段添加到.vimrc中,然后将bin全部替换成所要编辑的二进制文件的扩展名即可,":%s/bin/so/g",然后容vim就可以直接打开.so文件修改了,修改的地址可以通过两种方法获得,其实就是找到函数l_pubkey_verify相对于文件的位置,Quartus验证license的key就是调用libsys_cpt.so中的这个函数,返回0则认为合法,所以就在函数的入口点直接改成

xor %eax, %eax 

ret

即可,也就是16进制的0x31 0xc0 0xc3,那么怎么获得函数的入口地址呢?两种方法,其一利用gdb,执行

gdb> file libsys_cpt.so
gdb> info function l_pubkey_verify

还有一种方法就是利用nm工具,nm libsys_cpt.so | grep l_pubkey_verify,这样就可以找到入口地址进行修改了,我的返回结果是

000a7783 W l_pubkey_verify,改完了之后就应该没问题了,可是还是提示“cannot enable executable stack as shared object requires: Permission denied“这才意识到是权限问题,上网查了以下fedora对于运行.so文件的相关问题,在Fedora及RedHat下,Selinux太过严格。可以将Selinux置为“禁止”,这里我没有禁止,只是打开了一个控制开关

#setsebool -P allow_execstack 1

然后执行quartus就OK了。

    接下来就是license的问题了,网上说直接找个windows下的license.dat文件替换网卡物理地址就行了。

    听说linux下的USB-Blaster很难弄,正好在安装过程中发现一篇文章讲如何设置的,特挂载此,以后在研究以下

    http://bbs.pku.edu.cn/bbs/bbstcon.php?board=Admin1_lobby&threadid=2026459

sparc-leon3交叉工具链的制作

 

首先下载工具链bcc+simulator+grmon,下载地址为http://www.gaisler.com/,我下的版本为sparc-elf-4.4.2-1.0.36b,tsim-eval-2.0.18,grmon-eval-1.1.44,分别为leon3的编译器、仿真器和debug工具,把他们解压到/opt/leon3/目录下,然后为了方便我把他们在/opt/leon3/bin下一次建立了软链接,为此写了一个简单的脚本,内容如下:

#!/bin/sh 
# Estiblish softlink for all the file in DIR 
DIR=$1 
objdir=/opt/or1200/tools/bin/ 
files=`dir $DIR` 
echo $files 
for file in $files 
	do 
		ln -s "$DIR"/"$file" ./"$file"		 
	done 
exit 0

 

之后把/opt/leon3/bin目录添加到PATH环境变量下,echo “PATH=$PATH:/opt/leon3/bin”>> ~/.bashrc,source ~/.bashrc,测试一下在终端中输入sparc-elf-gcc –version

 

得到如上结果,说明配置成功。

    然后就可以下载并编译ecos了,同样在leon的网站上下载了ecos-rep-1.0.9,这个是打过leon补丁的ecos,所以就拿来直接用了,下载后解压到~/workspace/leon3/下,配置和编译的过程功能可以参考gaisler网站上的指导,http://www.gaisler.com/cms/index.php?option=com_content&task=view&id=149&Itemid=224

按照上面的说明,我下了ecos图形配置工具,ecostools-1.0,解压到/opt/leon3下,用同样的方法建立软链接,export ECOS_REPOSITORY, ecosconfig new sparc_leon3,一切都进行的很顺利,但是当运行configtool ecos.ecc时,意外悲剧发生了,

error while loading shared libraries: libwx_gtk-2.4.so: cannot open shared object file: No such file or directory,分析一下是缺少动态链接库,google了一下,在网上下了个rpm包,心想这下该好用了吧,不过程序又接连提示了缺少另外几个动态链接库,我急了,怎么会缺少这么多呢,于是就ldd了一下,

    linux-gate.so.1 =>  (0x005f3000)

    libtcl.so => /usr/lib/libtcl.so (0x00cfa000)

    libwx_gtk-2.4.so => not found

    libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x00110000)

    libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x00c26000)

    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00373000)

    libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x001ca000)

    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x001e3000)

    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00548000)

    /lib/ld-linux.so.2 (0x00cbb000)

开始只是缺少libwx_gtk-2.4,可是后面又缺少libglib1.2等低版本的链接库,只好一个一个都给找到了,最后什么都不缺了,又提示段错误,无奈之下只好看一下有没有更高版本的crosstool,这个版本是在是太低了,很多已经废弃的链接库在我的ubuntu下都没有,果然找到了2010-03-05的版本的,下载地址见http://www.ecoscentric.com/devzone/configtool.shtml,

解压之后果然好用,虽然运行时还是会在终端下出现warning,但是已经能看到配置界面了

 

为了安装动态链接库,我把系统差点搞蹦了,原因就是我把缺少的.so文件直接复制到/usr/lib下了,这样系统就乱了,分不清连接低版本的还是高版本的了,网上的说法是把兼容库单独放到一个路径下,设置一下LD_LIBRARY_PATH,这样的话就不会和当前系统的一些功能发生冲突了。。。