zoukankan      html  css  js  c++  java
  • 【转】FPGA(DE2)上uClinux的移植

    摘要:

      在FPGA上移植最新版本的uClinux,本实验主要是在DE2上进行。

      历经一个多月的时间,终于在FPGA上移植了uClinux,从开学到现在,从找中文博客(无双学长的博客),由于版本的问题,加上uClinux更新的比较快,编译内核又是一个比较复杂的问题。最终还是,寻找wiki里面寻求最新的内核,最新的编译工具,最终终于找到问题的解决办法啦!不多说,开始我们的移植工作吧!如果有不明白的,可以直接看wiki里的英文步骤。

      DE2上安装uClinux有几种方法,这里,我用的是一台PC,使用Windows操作系统,並在VMWare安裝Linux。从VMware上安装Ubuntu的步骤在这里就不详细说啦!网上一大堆,再加上没有什么难度,就不多讲啦!这里,我就从安装uClinux开始吧!

    一、安装BinaryToolchain

      1、对于Ubuntu的用户来说,在安装这些之前需要安装一些命令。 

          root进入终端或者以普通用户进入。

          sudo apt-get install git-core git-gui make gcc ncurses-dev bison flex gawk gettext ccache zlib1g-dev libx11-dev

                  texinfo liblzo2-dev pax-utils uboot-mkimage corkscrew

      这里的sudo是普通用户需要加上的,如果是root用户的话,就不需要啦!

      安装这个交叉环境,是为了将C语言翻译成嵌入式语言,有两个办法,第一个就是下载源码以及编译工具,自己来编译;第二个方法就是利用Altera公布的一个编译好的BinaryToolchain安装即可!由于我是初学者,就利用了第二种方法(简单)。

      2、通过下面的命令下载编译好的BinaryToolchain

       wget http://www.niosftp.com/pub/gnutools/nios2gcc-20080203.tar.bz2 或者

         ftp://ftp.altera.com/outgoing/nios2gcc-20080203.tar.bz2  或者

         http://sopc.et.ntust.edu.tw/pub/gnutools/nios2gcc-20080203.tar.bz2 或者

         ftp://sopc.et.ntust.edu.tw/pub/gnutools/nios2gcc-20080203.tar.bz2 或者

      在这里要重点提醒一下,由于我们是在中国的服务器,有很多的ftp,网址都是被屏蔽啦,只有个别的几个好用的。如果大家没有下载到的话,可以Email给我,我发给大家!

      3、解压下载的BinaryToolchain(nios2gcc-20080203.tar.bz2)

       可以将nios2gcc-20080203.tar.bz2放在一个单独的位置,便于系统文件干净整洁!在这里,我是用root进入Ubuntu的,所以我将nios2gcc-20080203.tar.bz2放在/usr/local/src里面。

      打开终端,下面命令进入/usr/local/src.

      cd /usr/local/src

      解压nios2gcc-20080203.tar.bz2

      tar jxvf nios2gcc-20080203.tar.bz2

      这样,就在use/local/src下生成一个opt的目录,就是解压后的结果。

      4、设置交叉gcc编译的路径

       对于Ubuntu的用户来说,开启终端是要重新加载profile这个文件,所以我们需要更改这个文件。打开profile文件,还是在use/local/src路径下

      gedit ~/.profile

      加上cross gcc的路径,在最后面加上如下语句

      export PATH=$PATH:/usr/local/src/opt/nios2/bin

      如下图所示

      当你更改profile文件之后,需要重新logout以及login,在这里,我们可以用下面一个命令,让profile文件生效。

      source ~/.profile

      5、检查cross gcc路径是否设置正确  

        echo $PATH

       出现下面的路径

       /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:use/local/src/opt/nios2/bin

      6、检查cross gcc安装成功

      nios2-linux-uclibc-gcc -v

      如果安装成功的话,就会出现下面的结果

       

       至此,你的cross gcc就安装成功啦!在这步安装的时候,基本上不会出现什么问题,如果有任何小问题的话,大家应该都能解决的。

    二、编译uClinux内核以及生成uClinux镜像

      1、下载uClinux内核源码

      这一步出现了很多的问题,由于有很多种内核源码,不知道该用哪种,首先,第一次出现的问题就是,我下载了http://www.uclinux.org/pub/uClinux/dist/里面的内核,编译了很多次都没有成功。最终,我找到了问题的根源,我仔细阅读了wiki里的说明,发现了这样一句话:The releases from uclinux.org does not apply to the procedures described here。就是说,这里的方法不适合uClinux.org里面的内核,看到这句话,我当时就崩溃了,终于明白了是什么原因啦!

      好了,我去下载适合wiki里面方法的内核啦,可是问题又出现啦,该死的中国服务器。

      下面的命令是下载nios2ftp里面的内核源码。

      wget http://www.niosftp.com/pub/linux/nios2-linux-20090929.tar

      可惜,我在执行这条命令的时候,是下载不了,经过在Altera论坛上查找相关信息之后,发现,这就是中国的服务器的问题啦,没有办法。我又仔细的找解决的办法。之后,我找到了一个网址,可以下载最新的内核,这里,要非常感谢hippo这位工程师啊!为我们解决了很多问题。

      通过下面的网址下载最新的内核。

      http://www.niosftp.com/pub/linux/nio...x-20100621.tar或者http://sopc.et.ntust.edu.tw/pub/linu...x-20100621.tar或者ftp://sopc.et.ntust.edu.tw/pub/linux...x-20100621.tar

      经过3天的下载,终于将这个nios2-linux-20100621.tar下载成功啦,这个花费我太多的时间!这里再次对hippo这位工程师表示感谢!

      2、解压nios2-linux-20100621.tar

      还是在use/local/src这个路径下,执行下面的命令解压nios2-linux-20100621.tar.

      tar -C /usr/local/src -xvf nios2-linux-20100621.tar

      这样,就use/local/src下生成一个目录为nios2-linux的目录  

      3、配置内核

      进入内核目录。

      cd nios2-linux

      cd uClinux-dist

      执行下面的命令,配置内核。

      make menuconfig

      这里不出什么问题的话,就会进入内核配置的界面,我在配置的时候出现了一个小小的问题,说是KEY_MAX没有定义,于是我就google了一下,一位好心人士给我解决了,是缺少一个命令。

      执行下面的命令就可消除以上的问题。

      apt-get install libncurses5-dev

      好了,就进入了内核配置目录啦!

      内核的配置就比较简单啦,首先选择Vendor里面,选择Altera,下面就自动选择nios2啦!接着进入下一个选项,用户库等配置,我们选择第一个Default all Setting,之后,就exit,exit,yes,就ok啦!

      在这里,特别需要提醒的是,在第一次boot成功之前,不要更改其他任何设置!(具体原因,也不知道为什么?)

      4、根据sopc生成的ptf文件设置硬件makefile

      将sopc生成的ptf文件拷贝到当前的/use/local/src目录下

      执行一下命令,设置硬件的makefile

      make vendor_hwselect SYSPTF=/use/local/src/system_0.ptf

      这里又出现一个问题了,就是说nios2-linux-gun-gcc命令找不到,咋一看,还以为是交叉环境没有安装好呢,但是仔细来看,发现,这个和nios2-linux-uclibc-gcc还是有区别,这是什么原因呢?最终在google上找到问题的解决办法!

      http://www.alteraforum.com/forum/showthread.php?t=23549

      上面是问题的解决办法,大家不明白的可以进里面慢慢看看!我这里稍微解释一下。里面说,有两种branch,一种是trunk,一种是test-nios2,而uClinux是安装在test-nios2 branch下的,所以呢,需要转到test-nios2 branch目录下,没有办法啊,执行下面的命令转到test-nios2 branch下。

      cd linux-2.6

      git checkout test-nios2

      cd uClinux-dist

      git checkout test-nios2

      如果成功的话,就会出现“Now Switching to test-nios2 branch”

      5、编译内核

      这里就没有什么可多说的啦,我在这步没有出现什么问题。执行下面的命令

      cd uClinux-dist

      make

      这步需要等待一下,有一定的时间。至此,内核就编译成功啦!

      最终在/use/local/src/nios2-linux/uClinux-dist/linux-2.6.x/arch/nios2/boot下生成镜像文件zImage

    三、下载硬件sof文件和镜像文件

      1、下载硬件到DE2

      nios2-configure-sof (--cable x) DE2_NIOS.sof

      2、下载镜像文件到DE2中

      nios2-download -g (--cable x) zImage

      3、启动uClinux

      nios2-terminal (--cable x)

      括号中选择的选项,是如果你安装了多个下载线的情况下,就指定下载线即可!

      至此,uClinux在FPGA上的移植就成功,就会出现下面的东西啦!

    Using cable "USB-Blaster [USB 2-1.2]", device 1, instance 0x00
    Pausing target processor: OK
    Initializing CPU cache (if present)
    OK
    Downloaded 1272KB in 7.7s (165.1KB/s)
    Verified OK                         
    Starting processor at address 0x00500000
    # nios2-terminal

    nios2-terminal: connected to hardware target using JTAG UART on cable
    nios2-terminal: "USB-Blaster [USB 2-1.2]", device 1, instance 0
    nios2-terminal: (Use the IDE stop button or Ctrl-C to terminate)

    Uncompressing Linux... Ok, booting the kernel.
    Linux version 2.6.26-rc6 (hippo@darkstar) (gcc version 3.4.6) #2 PREEMPT Mon Jun 16 14:30:09 CST 2008


    uClinux/Nios II
    Built 1 zonelists in Zone order, mobility grouping off.  Total pages: 8128
    Kernel command line: 
    PID hash table entries: 128 (order: 7, 512 bytes)
    Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
    Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
    Memory available: 30136k/2333k RAM, 0k/0k ROM (1552k kernel code, 781k data)
    Mount-cache hash table entries: 512
    net_namespace: 180 bytes
    NET: Registered protocol family 16
    NET: Registered protocol family 2
    IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
    TCP established hash table entries: 1024 (order: 1, 8192 bytes)
    TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
    TCP: Hash tables configured (established 1024 bind 1024)
    TCP reno registered
    NET: Registered protocol family 1
    io scheduler noop registered
    io scheduler deadline registered (default)
    ttyJ0 at MMIO 0x8009340 (irq = 8) is a Altera JTAG UART
    console [ttyJ0] enabled
    ttyS0 at MMIO 0x8008e00 (irq = 7) is a Altera UART
    dm9000 Ethernet Driver, V1.30
    TCP cubic registered
    NET: Registered protocol family 17
    RPC: Registered udp transport module.
    RPC: Registered tcp transport module.
    Freeing unused kernel memory: 572k freed (0x1b8000 - 0x246000)
    Shell invoked to run file: /etc/rc
    Command: hostname uClinux
    Command: mount -t proc proc /proc
    Command: mount -t sysfs sysfs /sys
    Command: mount -t usbfs none /proc/bus/usb
    mount: mounting none on /proc/bus/usb failed: No such file or directory
    Command: mkdir /var/tmp
    Command: mkdir /var/log
    Command: mkdir /var/run
    Command: mkdir /var/lock
    Command: mkdir /var/empty
    Command: ifconfig lo 127.0.0.1
    Command: route add -net 127.0.0.0 netmask 255.0.0.0 lo
    Command: cat /etc/motd
    Welcome to
              ____ _  _
             /  __| ||_|                 
        _   _| |  | | _ ____  _   _  _  _ 
       | | | | |  | || |  _ \| | | |\ \/ /
       | |_| | |__| || | | | | |_| |/    
       |  ___\____|_||_|_| |_|\____|\_/\_/
       | |
       |_|

    For further information check:
    http://www.uclinux.org/

    Execution Finished, Exiting

    Sash command shell (version 1.1.1)
    /> 

      看到上面的东西,说明你移植成功啦,应该来说,很开心啦吧!是啊,移植了快有一个月啦!看到成功当然开心啦,在这里,也学到了很多东西。其实也走了很多歪路,首先是没有仔细阅读wiki里面的内容,总是下载org官网的uClinux-dist源码,最终总是有各种错误!还是不够冷静沉着,从这一点看来,还是静下心来时非常重要的,一个好的学习心情,一个好的学习方法是很重要的!

      将上面的步骤写下来,纪念一下吧,也算是一个工作量吧!呵呵!

  • 相关阅读:
    Samba 4.0 RC3 发布
    SymmetricDS 3.1.7 发布,数据同步和复制
    Express.js 3.0 发布,Node.js 的高性能封装
    GIFLIB 5.0.1 发布,C语言的GIF处理库
    jQuery UI 1.9.1 发布
    SVN Access Manager 0.5.5.14 发布 SVN 管理工具
    DynamicReports 3.0.3 发布 Java 报表工具
    HttpComponents HttpClient 4.2.2 GA 发布
    AppCan 2.0 正式发布,推移动应用云服务
    Ruby 2.0 的新功能已经冻结
  • 原文地址:https://www.cnblogs.com/Neddy/p/1963374.html
Copyright © 2011-2022 走看看