LiangShuang's ...

I'm not a programmer...

Fedora 14下安装Meego开发工具

有用的网站和Wiki


Meego镜像
http://repo.meego.com/
Wiki
http://wiki.meego.com/
troubleshoot
http://wiki.meego.com/SDK/Docs/1.1/Troubleshooting
qemu运行条件检查
http://wiki.meego.com/MeeGo_SDK_Enabling_QEMU
qemu运行环境的配置和测试
http://wiki.meego.com/SDK/Docs/1.1/Configuring_QEMU_runtimes#
Configuring_access_to_an_emulated_device_in_Qt_Creator
SDK的安装和设置
http://wiki.meego.com/SDK/Docs/1.1/Getting_started_with_the_MeeGo_SDK_for_Linux

为自动下载安装工具设置代理


为wget设置代理
sudo vim /etc/wgetrc
添加http_proxy = http://${ip}:${port}
为yum设置代理
sudo vim /etc/yum.conf 更新yum sudo yum update
rpm代理设置
由于rpm不知道如何设置下载代理,只好通过浏览器将signing key 下载到本地,下载地址http://repo.meego.com/MeeGo/sdk/host/repos/fedora/13/repodata/
然后安装rpm --import repomd.xml.key

安装过程


  1. 安装meego sdk
    sudo yum install meego-sdk
    包括Hello的例程,包括项目创建,打包和发布程序,调试设备
  2. 安装工具链
    • 列出支持的工具链的类型
      [water@fc14-cool ~]$ sudo mad-admin list target
      fremantle-pr13 (installable)
      maemo412-1 (installable)
      meego-core-armv7l-1.1 (installable)
      meego-core-armv7l-1.1.2 (installable)
      meego-core-armv7l-trunk (installable)
      meego-core-ia32-1.1 (installable)
      meego-core-ia32-trunk (installable)
      meego-handset-ia32-1.1.2 (installed)
      meego-handset-ia32-1.1 (installable)
      meego-handset-ia32-w32-1.1 (installable)
      meego-handset-ia32-trunk (installable)
      meego-netbook-ia32-1.1.2 (installable)
      meego-netbook-ia32-1.1 (installed)
      meego-netbook-ia32-w32-1.1 (installable)
      meego-netbook-ia32-trunk (installable)
    • 创建IA32下的Netbook工具链
      [root@fc14-cool water]# mad-admin create -f meego-netbook-ia32-1.1
      % Total % Received % Xferd Average Speed Time Time Time Current
      Dload Upload Total Spent Left Speed
      100 267M 100 267M 0 0 15493 0 5:01:12 5:01:11 0:00:01 21389

      Working on sysroot meego-core-ia32-madde-sysroot-1.1-fs
      .....9....8....7....6....5....4....3....2....1....0
      Creating missing links... done.

      Working on toolchain meego-sdk-i586-toolchain-1.1-linux_i686
      .....9....8....7....6....5....4....3....2....1....0
      Creating missing links... done.

      Working on tools qt-tools-4.7.0-linux_i686
      .....9....8....7....6....5....4....3....2....1....0
      Creating missing links... done.

      Find toolchain binaries
      Link toolchain binaries
      Link Qt tool binaries
      Target 'meego-netbook-ia32-1.1' created.
    • 创建IA32下的Handset工具链
      [root@fc14-cool water]# mad-admin create -f meego-handset-ia32-1.1.2
      % Total % Received % Xferd Average Speed Time Time Time Current
      Dload Upload Total Spent Left Speed
      100 379M 100 379M 0 0 684k 0 0:09:27 0:09:27 --:--:-- 855k
      Working on sysroot meego-handset-ia32-madde-sysroot-1.1.20110106.1204-fs
      .....9....8....7....6....5....4....3....2....1....0
      Creating missing links... done.
      Find toolchain binaries
      Link toolchain binaries
      Link Qt tool binaries
      Target 'meego-handset-ia32-1.1.2' created.
  3. 安装meego系统的运行环境,即用qemu模拟的图形环境
    • 列出支持的运行设备
      [water@fc14-cool build]$ sudo mad-admin list runtimes
      qemu-n900-pr13 (installable)
      rx48-diablo (installable)
      meego-handset-ia32-qemu-1.1.2-runtime (installable)
      meego-handset-ia32-qemu-1.1.20101031.2201-sda-runtime (installable)
      meego-handset-ia32-w32-qemu-1.1.20101031.2201-sda-runtime (installable)
      meego-netbook-ia32-qemu-1.1.2-runtime (installable)
      meego-netbook-ia32-qemu-1.1.20101031.2037-sda-runtime (installable)
      meego-netbook-ia32-w32-qemu-1.1.20101031.2037-sda-runtime (installable)
    • 安装Netbook模拟器
      [root@fc14-cool water]# mad-admin create -f -e meego-netbook-ia32-qemu-1.1.2-runtime
      % Total % Received % Xferd Average Speed Time Time Time Current
      Dload Upload Total Spent Left Speed
      100 456M 100 456M 0 0 45907 0 2:53:37 2:53:37 --:--:-- 63746
      Extracting QEMU runtime meego-netbook-ia32-qemu-1.1.2-runtime
      .....9....8....7....6....5....4....3....2....1....0
      Creating missing links... done.
    • 安装Handset模拟器
      [water@fc14-cool ~]$ sudo mad-admin create -f -e meego-handset-ia32-qemu-1.1.2-runtime
      Extracting QEMU runtime meego-handset-ia32-qemu-1.1.2-runtime
      .....9....8....7....6....5....4....3....2....1....0
      Creating missing links... done.

Troubleshooting

  • qemu模拟器启动后没有反应
    Starting QEMU runtime meego-handset-ia32-qemu-1.1.2-runtime
    This may take some time ...
    之后就没反应了,网上说需要打开BIOS的VT支持,我重启了在BIOS的设置里enable了VT,可是执行sudo modprobe kvm-intel的时候还是
    出错了,dmesg | grep kvm的结果如下:
    kvm: disabled by bios
    但是明明是打开了VT选项,为什么启动的时候说VT没有被BIOS使能呢,原来是restart的问题,需要poweron/poweroff,这样BIOS才能
    应用更新的设置。
    KVM相关的troubleshot可以参见http://www.linux-kvm.org/page/FAQ#.22KVM:_disabled_by_BIOS.22_error
  • 如何离线安装
    关于代理的设置参考安装工具链时的代理设置,如果有问题的话也可以自己通过浏览器手动下载,下载地址可以在这个
    /usr/lib/madde/linux-i686/cache/madde.conf.d文件中看到,我的里面显示的url是http://download3.meego.com/,
    手动下载完成后把文件拷贝到cache文件夹下,重新执行上面的mad命令,就可以跳过下载直接解压安装了。

Quartus 10.0 'No JTAG Devices' on Ubtuntu 10.04

ubuntu 10.04上的quartus安装完成后检测不到USB Blaster设备,原因是jtag server默认是在/proc/bus/usb/devices下查找可用的USB设备的,但是较新的linux内核(maybe from 2.6.31.20)为了支持udev而放弃了usbfs,/proc/bus/usb是usbfs的一部分,所以较新的内核默认是没有这个目录的,网上提供的一种方法是修改jtagd默认的搜索路径,用/sys/kernel/debug/usb/devices和/dev/bus/usb/.../.../分别替换掉原来的/proc/bus/usb/devices和/proc/bus/usb/.../.../,但是由于/sys/kernel/debug/usb/devices的长度太长无法放在原来/proc/bus/usb/devices的位置,所以就建立了一个指向它的软链接来实现,具体的替换过程如下:

  • 建立软链接
ln -s /sys/kernel/debug/usb/devices /dev/bus/usb/devices 
  • 用sed替换jtagd中的查找路径
sudo sed -i.bak \	
	's/\/proc\/bus\/usb\/%03u\/%03u/\/dev\/bus\/usb\/%03u\/%03u\d0/g'\
 	<installation path>/quartus/linux/jtagd
sudo sed -i 's/\/proc\/bus\/usb\/devices/\/dev\/bus\/usb\/devices\d0/g'\n
	<installation path>/quartus/linux/jtagd

这样输入jtagconfig就能够看到USB Blaster设备了

参考:

http://fpga4u.epfl.ch/wiki/Install_Quartus_II#Install_USB_drivers_2

latex添加中文CJK支持(FC14)

     参考了好多网上的资料终于把中文搞出来了。

     准备


1. 安装Latex

sudo yum install texlive-latex

2. 安装IDE Kile

3. 安装CJK

网上的资料都是下载CJK文件,直接解压复制到/usr/share/texmf/tex/latex/下,但是里面有很多压缩包,不知道怎么弄了,就直接找了个CJK的RPM包,安装就行了。

4. 下载cyberbit.ttf和Unicode.sfd文件,放到同一个文件夹下。

5. 安装ttf2tmf和ttf2pfb

这两个工具在源里找不到,上网搜到了RPM包,在freetype-tools里面可以找到这两个工具,安装的时候依赖libttf.so.2这个动态库,这个库在 freetype1中可以找到。

6. 将cyberbit.ttf转化成*.tfm和*.enc格式的文件

输入命令 ttf2tfm cyberbit.ttf -w cyberbit@Unicode@就可以得到大量的*.tfm和*.enc文件,但是不知道为什么我的没有生成,于是就直接下载已经做好了的*.tfm*.enc压缩包。

7. 将cyberbit.ttf转化成.pfb格式

ttf2pfb cyberbit.ttf -o cyberbit.pfb

8. 下载delloye.free.fr/c70cyberbit.fd,放到/usr/share/texmf/tex/latex/cyberbit/下。

配置cyberbit


1. 将*.tfm和*.enc放到对应的目录下

*.tfm ==> /usr/share/texmf/fonts/tfm/bitstream/cyberbit

*.enc ==> /user/share/texmf/fonts/enc/pdftex/cyberbit

2. 安装cyberbit.ttf和cyberbit.pfb文件

cyberbit.ttf ==> /usr/share/texmf/fonts/truetype/

cyberbit.pfb ==> /usr/share/texmf/fonts/type1/

3. 安装cyberbit.map文件

cyberbit.map ==> /usr/share/texmf/fonts/map/pdftex/cyberbit/

4. 修改updmap.cfg文件

在/usr/share/texmf/web2c/updmap.cfg添加Map cyberbit.map /usr/share/texmf/fonts/map/pdftex/cyberbit/cyberbit.map

然后运行udpmap

最后运行sudo texhash,更新改变。

参考:

http://www.math.nus.edu.sg/aslaksen/cs/cjk.html

http://www.oiegg.com/viewthread.php?tid=735190

 

'LD_LIBRARY_PATH' Is Bad!!

前段时间想学习以下Latex编辑器,于是装了个集成开发环境Kile,但是一直运行不起来,在终端下运行时显示的错误是‘symbol lookup error: /usr/lib/libQtSvg.so.4: undefined symbol ......',到网上查了很长时间都没有找到解决办法。今天有时间又弄了以下,觉得是动态库的问题,ldd /usr/bin/kile,果然,看到结果后就可以确定问题是出在LD_LIBRARY_PATH这个环境变量上了,

    linux-gate.so.1 =>  (0x00671000)
    libkhtml.so.5 => /usr/lib/libkhtml.so.5 (0x06640000)
    libkrosscore.so.4 => /usr/lib/libkrosscore.so.4 (0x00294000)
    libkfile.so.4 => /usr/lib/libkfile.so.4 (0x06d18000)
    libktexteditor.so.4 => /usr/lib/libktexteditor.so.4 (0x042ed000)
    libkparts.so.4 => /usr/lib/libkparts.so.4 (0x04bc7000)
    libkjs.so.4 => /usr/lib/libkjs.so.4 (0x04d65000)
    libQtScript.so.4 => /usr/lib/libQtScript.so.4 (0x06392000)
    libkio.so.5 => /usr/lib/libkio.so.5 (0x060f8000)
    libQtXml.so.4 => /opt/programs/altera/10.0/quartus/linux/libQtXml.so.4 (0x001f2000)
    libnepomuk.so.4 => /usr/lib/libnepomuk.so.4 (0x007cf000)
    libsoprano.so.4 => /usr/lib/libsoprano.so.4 (0x04135000)
    libQtNetwork.so.4 => /opt/programs/altera/10.0/quartus/linux/libQtNetwork.so.4 (0x002b2000)
    libkdeui.so.5 => /usr/lib/libkdeui.so.5 (0x05ceb000)
    libQtSvg.so.4 => /usr/lib/libQtSvg.so.4 (0x006f6000)
    libkdecore.so.5 => /usr/lib/libkdecore.so.5 (0x04f80000)
    libQtCore.so.4 => /opt/programs/altera/10.0/quartus/linux/libQtCore.so.4 (0x003d8000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00c88000)
    libQtDBus.so.4 => /usr/lib/libQtDBus.so.4 (0x00110000)
    libQtGui.so.4 => /opt/programs/altera/10.0/quartus/linux/libQtGui.so.4 (0x00ca3000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x008ae000)
    libm.so.6 => /lib/libm.so.6 (0x00c5c000)
    libgcc_s.so.1 => /opt/programs/altera/10.0/quartus/linux/libgcc_s.so.1 (0x00189000)
    libc.so.6 => /lib/libc.so.6 (0x00ad0000)
    libphonon.so.4 => /usr/lib/libphonon.so.4 (0x04ea0000)
    libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x04c8b000)
    libgif.so.4 => /usr/lib/libgif.so.4 (0x0074d000)
    libpng12.so.0 => /usr/lib/libpng12.so.0 (0x00194000)
    libz.so.1 => /lib/libz.so.1 (0x001bc000)
    libSM.so.6 => /usr/lib/libSM.so.6 (0x00a9c000)
    libICE.so.6 => /usr/lib/libICE.so.6 (0x047be000)
    libX11.so.6 => /usr/lib/libX11.so.6 (0x0536e000)
    libXext.so.6 => /usr/lib/libXext.so.6 (0x001d1000)
    libXft.so.2 => /usr/lib/libXft.so.2 (0x00a64000)
    libXau.so.6 => /usr/lib/libXau.so.6 (0x001e2000)
    libXpm.so.4 => /usr/lib/libXpm.so.4 (0x0088b000)
    libsolid.so.4 => /usr/lib/libsolid.so.4 (0x0421e000)
    libXrender.so.1 => /usr/lib/libXrender.so.1 (0x001e5000)
    libpcre.so.0 => /lib/libpcre.so.0 (0x04c44000)
    libpcreposix.so.0 => /usr/lib/libpcreposix.so.0 (0x001ee000)
    libstreamanalyzer.so.0 => /usr/lib/libstreamanalyzer.so.0 (0x0099f000)
    libstreams.so.0 => /usr/lib/libstreams.so.0 (0x042b2000)
    libacl.so.1 => /lib/libacl.so.1 (0x04b4b000)
    libattr.so.1 => /lib/libattr.so.1 (0x04aff000)
    libsopranoclient.so.1 => /usr/lib/libsopranoclient.so.1 (0x006a2000)
    libdbusmenu-qt.so.2 => /usr/lib/libdbusmenu-qt.so.2 (0x00265000)
    libXtst.so.6 => /usr/lib/libXtst.so.6 (0x00a59000)
    libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0x00238000)
    libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x00242000)
    libbz2.so.1 => /lib/libbz2.so.1 (0x04a90000)
    liblzma.so.0 => /usr/lib/liblzma.so.0 (0x04b23000)
    libresolv.so.2 => /lib/libresolv.so.2 (0x00247000)
    libfam.so.0 => /usr/lib/libfam.so.0 (0x00668000)
    libdl.so.2 => /lib/libdl.so.2 (0x00672000)
    librt.so.1 => /lib/librt.so.1 (0x00677000)
    /lib/ld-linux.so.2 (0x00aaf000)
    libdbus-1.so.3 => /lib/libdbus-1.so.3 (0x00782000)
    libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x01716000)
    libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00a1c000)
    libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0x017a8000)
    libpulse.so.0 => /usr/lib/libpulse.so.0 (0x0448f000)
    libpulse-mainloop-glib.so.0 => /usr/lib/libpulse-mainloop-glib.so.0 (0x00a8e000)
    libuuid.so.1 => /lib/libuuid.so.1 (0x00680000)
    libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00756000)
    libxml2.so.2 => /usr/lib/libxml2.so.2 (0x04340000)
    libXi.so.6 => /usr/lib/libXi.so.6 (0x00685000)
    libexpat.so.1 => /lib/libexpat.so.1 (0x018b6000)
    libpulsecommon-0.9.21.so => /usr/lib/libpulsecommon-0.9.21.so (0x045b1000)
    libwrap.so.0 => /lib/libwrap.so.0 (0x00a83000)
    libsndfile.so.1 => /usr/lib/libsndfile.so.1 (0x04b55000)
    libasyncns.so.0 => /usr/lib/libasyncns.so.0 (0x00a7b000)
    libnsl.so.1 => /lib/libnsl.so.1 (0x04b06000)
    libFLAC.so.8 => /usr/lib/libFLAC.so.8 (0x04d26000)
    libvorbisenc.so.2 => /usr/lib/libvorbisenc.so.2 (0x0487b000)
    libvorbis.so.0 => /usr/lib/libvorbis.so.0 (0x04aab000)
    libogg.so.0 => /usr/lib/libogg.so.0 (0x04aa3000)

红色部分就是问题之所在,由于之前在安装quartus的时候设置了一个so的路径,还以为LD_LIBRARY_PATH和PATH一样的都是按顺序查找各个部分呢,但是LD_LIBRARY_PATH是加在系统默认的加载路径之前的,'This list is prepended to the existing list of compiled-in loader paths for a given executable, and any system default loader paths',那么这个问题就和上次的那个nautilus程序的问题一样,都是连接到了错误的so文件,导致符号找不到或版本问题。

'LD_LIBRARY_PATH is handy for development and testing, but shouldn't be modified by an installation process for normal use by normal users; see ``Why LD_LIBRARY_PATH is Bad'' at http://www.visi.com/~barr/ldpath.html for an explanation of why',原文是这么说的,这个环境变量主要用于开发和测试阶段,不适合在应用程序的安装过程中修改。。

用crosstool-NG-1.9.3构建ARM工具链

    在成功重装了两次系统之后之前的移植工作终于还是被我弄丢了,无奈只好一切重头再来了。
    首先下载u-boot源码,下载地址为ftp://ftp.denx.de/pub/u-boot/,这次将要移植的版本为2010-12。
    制作交叉工具链(Cross-Tool),还是使用crosstool-NG来制作编译工具,下载地址:http://ymorin.is-a-geek.org/download/crosstool-ng 。版本为1.9.3,这个工具的使用方法可以在文档或是http://ymorin.is-a-geek.org/projects/crosstool中找到,由于之前在弄crosstool的时候遇到一些问题,所以这次也把它的安装过程和使用方法记录下来。
    Features of This Tool

CentOS下CVS配置

由于实验室的项目需要进行版本控制,正好有台空闲的CentOS,可以拿来作服务器,于是就搞了一下,配置过程如下:

    环境:

  • OS:CentOS 5.5
  • Kernel:Linux hit-centos 2.6.18-194.32.1.el5 #1 SMP
  • CVS Version:Concurrent Versions System (CVS) 1.11.22 (client/server)

1. 首先确认CVS是否安装:

    rpm -qa | grep cvs,如果出现 cvs-1.11.22-7.el5就说明CVS已经在主机上安装了。

2. 建立CVS管理所对应的用户和组:

    在centos下这个过程有个小插曲,首先如果终端下直接输入sudo groupadd的话会提示出错,"sudo: groupadd: command not found",然后切换到root用户su,仍然是找不到命令,Google了一下centos的wiki上(http://wiki.centos.org/TipsAndTricks/BecomingRoot)讲得还是很清楚的,当我们想要change为root身份时su就足够了,但是不会获得其环境配置信息,因此当执行groupadd或ifconfig时就会提示找不到命令,正确的切换命令应该是su -,the trailing dash is the tricky. 之后就可以新建组groupadd cvs,然后添加一个新用户到工作组useradd -g cvs -G cvs -d /home/cvs-wsn hit-wsn,指定用户密码passwd hit-wsn

3. 以hit-wsn进行CVS的相关操作,初始化cvs源代码库,此操作生成目录/home/cvs-wsn/wsn-opdk/CVSROOT,其下为一些初始化文件,wsn-opdk为CVS管理的工程目录:

    su hit-wsn

    mkdir wsn-opdk

    cvs -d /home/cvs-wsn/wsn-opdk/ init,注意这里的路径为绝对路径。

4. CVS server的配置文件:

    sudo vim /etc/xinetd.d/cvspserver,内容如下:

    service cvspserver
    {
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = hit-wsn
        protocol        = tcp
        server          = /usr/bin/cvs
        server_args     = -f --allow-root=/home/cvs-wsn/wsn-opdk pserver
        log_on_failure += USERID
        disable         = no
    }

5. 检查cvsperver服务:

    cat /etc/services | grep cvspserver
    结果显示 cvspserver      2401/tcp                        # CVS client/server operations
             cvspserver      2401/udp                        # CVS client/server operations

说明服务已存在。

6. 重启xinetd服务:

    sudo /etc/init.d/xinetd restart

7. 再次检查cvspserver服务是否已经启动:

    netstat -l | grep cvspserver,结果为"tcp 0      0 *:cvspserver    *:*                         LISTEN"

8. 添加CVS登录用户:

    在刚才新建的CVS代码库的CVSROOT目录下新建一个passwd文件,htpasswd -c passwd fc14,将新建一个叫做passwd的文件并且提示输入密码,密码经过md5加密放入passwd文件.以后新加用户不用-c,其中fc14是我的CVS登录用户名,

9. 修改passwd文件,将CVS用户于系统用户对应:

    每个用户那行最后添加:cvsroot ,然后去掉每行第二个冒号以后的所有内容,并添上字符串cvsroot

    我这里的系统用户为hit-wsn,所以就在后面添加了:hit-wsn,如:fc14:qfFRYXwG3SOaQ:hit-wsn
10. 这里我把方护墙和selinux都禁用了,根据以前的经验selinux会对此进行限制:

    vim /etc/sysconfig/selinux SELINUX=enforcing change to SELINUX=disabled

11. 测试一下:

    测试是在在局域网中的一台安装有CVS client的机器上的,就是我的fedora 14上,首先设置CVSROOT环境变量,在.bashrc下添加如下内容:

    export CVSROOT=:pserver:fc14@$(server_ipaddr):2401:/home/cvs-wsn/wsn-opdk/,其中psrver为协议,fc14是我刚刚添加的登录用户名,后面是CVS服务器的IP地址和端口号,最后是仓库的路径。

    输入密码登录成功之后就可以 cvs add file,cvs commit file了,我之后把项目工程放到了wsn-opdk下了,cvs checkout top_dir成功!

做得过程中参考了如下链接:

    http://blog.donews.com/zzw45/index.php/2007/05/centos4-5-%E4%B8%8A%E9%85%8D%E7%BD%AE-cvs/

    http://wiki.centos.org/TipsAndTricks/BecomingRoot

   

 

 

MySQL 中文显示乱码~~~

    最近学习MySQL时又遇到了一个烦人的问题,中文编码,虽然在建立数据库时设置的字符编码为utf8,在MySQL的console上执行insert插入中文时没问题,可是在java代码中插入中文到mysql中就是??了,就是代码中的realName

	 /************************************************************
	 * Add resident
	 ************************************************************
	 */
	public boolean addResident(String userID,String realName,String gender,
			String birth,String addr,String tel,String email,String checkin) {
		Connection conn = this.getConnection();
		CallableStatement stmt = null;
		Date birthDate = null;
		Date checkinDate = null;
		if(birth!=null && (!birth.equals(""))) {
			birthDate = Date.valueOf(birth);
		}
		if(checkin!=null && (!checkin.equals(""))) {
			checkinDate = Date.valueOf(checkin);
		}
		try {
			stmt = conn.prepareCall("{call ICommunity.addResident(?,?,?,?,?,?,?,?,?)}");
			stmt.setString(1, userID);
			stmt.setString(2, realName);
			stmt.setString(3, gender);
			stmt.setDate(4, birthDate);
			stmt.setString(5, addr);
			stmt.setString(6, tel);
			stmt.setString(7, email);
			stmt.setDate(8, checkinDate);
			
			stmt.registerOutParameter(9, Types.BOOLEAN);
			stmt.execute();
			return stmt.getBoolean(9);
			
			
		}catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
		finally {
			try {
				conn.close();
				stmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

差了好多资料,可还是没有解决根本问题,不管在代码里怎么改变字符编码,到数据库中显示的还是乱码

String name = null;
try {
        //name = realName.getBytes("UTF-8").toString();
        name = new String(realName.getBytes("iso_8859_1"),"utf8");
    } catch (UnsupportedEncodingException e) {
	// TODO Auto-generated catch block
	System.out.println("Exception "+e.getMessage());
}

最后一篇很给力的文章解决了问题:http://developer.51cto.com/art/200906/130425.htm,需要设置一下mysql的配置文件中的client和server的默认编码。

在linux下这个配置文件在/etc/mysql/my.cnf,编辑之后的文件内容为:

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock
default-character-set=utf8
# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
#
# * Basic Settings
#

default-character-set=utf8

就是分别在[client]和[mysqld]下添加设置默认编码的语句。

然后重启mysql,sudo /etc/init.d/mysql restart

结果就正常了。。。

还有一篇介绍字符编码的文章也很给力:http://www.regexlab.com/zh/encoding.htm

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