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源码,最终总是有各种错误!还是不够冷静沉着,从这一点看来,还是静下心来时非常重要的,一个好的学习心情,一个好的学习方法是很重要的!

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

  • 相关阅读:
    租户功能
    async await
    IOptions and context
    Setting Management: 用于持久化设置Setting值
    设置模块
    vs2017单元测试没反应,检测出错误,有关详细信息,请查看“测试输出”窗口
    自定义JS组件+调用restfui接口显示(SpringBoot)
    flex布局采用justify-content:space-between时,当为两个内容时中间被空出的解决方案
    CSS3 边框彩虹跑马灯
    react native 调试时,调出DEV菜单
  • 原文地址:https://www.cnblogs.com/yingfang18/p/1880079.html
Copyright © 2011-2022 走看看