原创 在niosii上跑uClinux

2007-7-8 15:33 11723 16 61 分类: FPGA/CPLD

概述<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


NIOSIIaltera公司针对FPGA推出的一个CPU软核,它可以综合到任何一款alteraFPGA中。用户可以基于sopc builder搭建自己的系统。一个基于NIOSII的系统如图:点击看大图



<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


除了sopc builder提供的一些外设以外,用户可以按照avalon总线标准来实现自己的模块,而且可以很容易的集成到系统里面去。

 


niosii有三个不同的版本:niosii-eniosii-sniosii-f

 


Niosii-e针对低成本应用,内部没有流水线结构,不带指令/数据CACHE,所以实现所需要的逻辑较小(600-700 LEs)。

 


Niosii-s有五级流水结构,带指令cachesize根据用户配置),实现需要1200-1400 LEs


Niosii-f有六级流水结构,带指令和数据cache,实现需要1400-1800 LEs

 


建立niosii系统


在建立系统之前检查一下软硬件配置:


1、使用最新版本的QuartusNios软件,低版本软件可能存在bug。我之前用QuartusII 5.1试了好几次都没有完全把uClinux跑起来,在boot开始以后就挂死了,百思不得其解,后来换成QuartusII 6.1以后,重新编译了一下逻辑就把跑起来了。郁闷了我好久……


2uClinux需要在linux环境下编译(基于cygwin也可以编译,不过我说的这个过程是在linux上的),所以你必须有一个linux操作系统。有几种办法:A,装一个linux版本的QuartusII,所有的操作都在linux下完成。B,用两台计算机,一台用windows,跑quartus等软件,另一台装linuxC,在windows下装个虚拟机vmware,在虚拟机上装linux,通过虚拟机来编译uClinux,然后把image文件导入到windows下调试。我就是使用虚拟机的方法,但是要求你的PC内存比较大才行,否则系统会很慢。


3、你板子上FPGA的容量要能装的下一个系统,外部的SDRAM容量至少要<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />8M byte。我用的是一个EP1C6FPGA8M byteSDRAM。不需要FLASH


以上条件都满足了,就可以开始了。


首先,建立一个工程,然后建立一个小系统,配置如下:



点击看大图 


最小系统至少要包括:


一个niosii cpu,一个sdram控制器,cfi_flash控制器(在单板上不需要flash),全功能的timer,用于通信的jtag uartserial uart


可以根据单板的硬件资源来适当配置逻辑,比如加入一些ledkey等等。


linux里面中断0是自动识别的,所以在硬件系统里面不要使用0号中断。


 

生成好系统以后,在Quartus里面把引脚连好,包括设置好用于SDRAM PLL



 点击看大图


 

系统编译好以后,先用NIOSII IDE写个程序来测试一下SDRAM和系统是不是可以运行。如果程序能正确运行的话,就可以进入下一步了。

 


建立uClinux的交叉编译环境


要把uClinux放到niosii中运行首先必须把uClinux代码编译成niosii的指令。这个编译的过程需要相应的程序来完成。下载nios2gcc.tar.bz2软件包。

 


进入linux操作系统,打开一个shell界面,执行如下操作:


把下载的nios2gcc.tar.bz2软件包放到home下,如/home/duckfly/


然后切换到root

 



su


#输入root密码


tar jxf /home/duckfly/nios2gcc.tar.bz2 -C /
exit


niosii的交叉编译工具链就会安装到/opt/nios目录下,我们需要把这个目录加入到path变量中去,让shell能自动寻找。


打开home下载.bash_profile文件,这个文件是隐藏文件,需要用ls –a才能看见。

 



ls -a


vi .bash_profile


#PATH变量修改为:PATH=$PATH:/opt/nios2/bin:$HOME/bin


 点击看大图

 



source .bash_profile


# 让修改的环境变量生效


 


nios2-linux-gcc –v


# 查看是否安装好了,打印出版本信息




点击看大图 


编译uClinux


交叉编译环境安装好以后,就可以编译uClinux了。


首先到http://www.uclinux.org/pub/uClinux/dist/ 下载一个uClinux的代码包。


然后下载uClinux-dist-20070130-nios2-02.diff.gz 软件包,这是把uClinux移植到niosii CPU上的补丁。


linux下使用如下命令:

 



# 使用普通用户登陆
cd ~


# 解压uClinux代码
tar jxf ~/download/uClinux-dist-20070130.tar.bz2


# 进入uClinux根目录
cd uClinux-dist


# 打补丁,这一步只能做一次,否则会引起错误
zcat  ~/download/uClinux-dist-20070130-nios2-02.diff.gz | patch -p0


# 还是停在uClinux-dist目录,不要切换目录


# 配置uClinux 内核


make menuconfig


# 选择Vendor/Product Slection



 点击看大图



# 配置VendorProduct



点击看大图 



# 回到主界面,选择Kernel/Library/Default Selection


# 配置LibraryKernel参数为默认值


 点击看大图

 



# 选择


# 保存配置




点击看大图 



# 把在QuatusII下生成的系统的ptf文件拷贝到一个目录,比如/home/duckfly/sys.ptf


# 根据系统硬件配置uClinux


make vendor_hwselect SYSPTF="/home/duckfly/"sys.ptf


# 根据硬件配置选择相应的选项


# 建立romfs目录,第一次make可能会报错,忽略。必须在第一次编译内核之前运行
make romfs


# 编译内核,第一次编译内核时可能报错,如果出错,那么重新再make一次
make 


# 如果错误,重新再make一次
make


# 重新生成image文件
make linux image


# 到这里,uClinuximage文件就产生了,把它拷贝到windows下面下载并运行


 

 


下载硬件


Quatus里面把编译好的系统下载到FPGA里面去




点击看大图 


下载uClinux image文件


FPGA配置完以后,就可以下载软件了。


打开NIOSII的命令行




点击看大图 




点击看大图 



# 进入到zImage文件所在的目录,下载软件


nios2-download –g zImage


 点击看大图

 



# 下载完成以后,打开nios2-terminal,接口串口发送的信息


nios2-terminal


# JTAG串口上打印如下信息


 



Uncompressing Linux... Ok, booting the kernel.



Linux version 2.6.19-uc1 (duckfly@localhost.localdomain) (gcc version 3.4.6) #22 PREEMPT Sun Jun 17 16:22:49 CST 2007




uClinux/Nios II


Altera Nios II support (C) 2004 Microtronix Datacom Ltd.


Built 1 zonelists.  Total pages: 2032


Kernel command line: duckfly


PID hash table entries: 32 (order: 5, 128 bytes)


Dentry cache hash table entries: 1024 (order: 0, 4096 bytes)


Inode-cache hash table entries: 1024 (order: 0, 4096 bytes)


Memory available: 6892k/8192k RAM, 0k/0k ROM (871k kernel code, 336k data)


Mount-cache hash table entries: 512


io scheduler noop registered


io scheduler deadline registered (default)


NIOS serial driver version 0.0


ttyS0 (irq = 2) is a builtin NIOS UART


Freeing unused kernel memory: 260k freed (0xe2000 - 0x122000)


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 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


ifconfig: Bad command or file name


Command: route add -net 127.0.0.0 netmask 255.0.0.0 lo


route: Bad command or file name


Command: cat /etc/motd


Welcome to


           ____ _  _
         /  __| ||_|                
    _   _| |  | | _ ____  _   _  _  _
   | | | | |  | || |  _ \| | | |\ \/ /
   | |_| | |__| || | | | | |_| |/    \
   |  ___\____|_||_|_| |_|\____|\_/\_/
   | |
   |_|


 


For further information check:


http://www.uclinux.org/


Execution Finished, Exiting


Sash command shell (version 1.1.1)


/>


 


 



# 可以使用linux下的一些命令如:


/> ls


bin   dev   etc   home  lib   mnt   proc  usr   var   sys   tmp   init  sbin


/> ps


  PID  Uid     VmSize Stat Command


    1 root            SW  /init duckfly


    2 root            SWN [ksoftirqd/0]


    3 root            SW< [events/0]


    4 root            SW< [khelper]


    5 root            SW< [kthread]


    6 root            SW< [kblockd/0]


    7 root            SW  [pdflush]


    8 root            SW  [pdflush]


    9 root            SW< [kswapd0]


   10 root            SW< [aio/0]


   15 root            SW  -/bin/sh


   17 root            RW  ps


/> cd tmp


/tmp> ls


module  test


/tmp> cd test


/tmp/test> ls


led     string  led2


 

PARTNER CONTENT

文章评论48条评论)

登录后参与讨论

用户999538 2013-7-26 13:46

要使用NIOSII/f 构建内核。

用户178989 2010-4-9 13:53

博主你好,我想问一下你的硬件系统中使用的处理器是哪一种?我是使用NiosII/e处理器构建的系统,make的时候出现错误:include/net/sock.h:591: error: size of array `__pad' is too large 当我该用NiosII/s或NiosII/f处理器后,可以make,也可以生成zImage文件,但下载zImage文件的时候又出现以下错误: Downloading 00800000 ( 0%) Downloading 01401020 (93%) Downloaded 5KB in 0.1s Verifying 00800000 ( 0%) Verify failed between address 0x800000 and 0x8011F7 Leaving target processor paused 期待您的回复!

用户384849 2009-7-17 13:19

不错,值得参考

用户76594 2008-8-17 15:15

re fengliuleo: 你看看你的ptf文件是不是放在/home/leo/uClinux/uc.ptf,还要看以下这个文件的权限是不是可读写的。

用户1449065 2008-8-15 20:35

博主,我在make vendor_hwselect SYSPTF=/home/leo/uClinux/uc.ptf时候出现了下面的错误RUNNING hwselect ERROR: Could not open SYSTEM ptf file.烦请楼主帮忙

用户1449065 2008-8-15 20:25

博主,我在make vendor_hwselect SYSPTF=/home/leo/uClinux/uc.ptf时候出现了下面的错误 make[3]: Entering directory `/home/leo/uClinux/uClinux-dist/linux-2.6.x' RUNNING hwselect ERROR: Could not open SYSTEM ptf file. 烦请楼主帮忙

用户1449065 2008-8-15 20:25

博主,我在make vendor_hwselect SYSPTF=/home/leo/uClinux/uc.ptf时候出现了下面的错误” make[3]: Entering directory `/home/leo/uClinux/uClinux-dist/linux-2.6.x' RUNNING hwselect ERROR: Could not open SYSTEM ptf file. 烦请楼主帮忙

用户1449065 2008-8-15 20:24

博主,我在make vendor_hwselect SYSPTF=/home/leo/uClinux/uc.ptf时候出现了下面的错误” make[3]: Entering directory `/home/leo/uClinux/uClinux-dist/linux-2.6.x' RUNNING hwselect ERROR: Could not open SYSTEM ptf file. make[3]: Leaving directory `/home/leo/uClinux/uClinux-dist/linux-2.6.x' 烦请楼主帮忙

用户1449065 2008-8-15 20:24

博主,我在make vendor_hwselect SYSPTF=/home/leo/uClinux/uc.ptf时候出现了下面的错误” make[3]: Entering directory `/home/leo/uClinux/uClinux-dist/linux-2.6.x' RUNNING hwselect ERROR: Could not open SYSTEM ptf file. make[3]: Leaving directory `/home/leo/uClinux/uClinux-dist/linux-2.6.x' make[2]: Leaving directory `/home/leo/uClinux/uClinux-dist/vendors/Altera/nios2nommu' make[1]: Leaving directory `/home/leo/uClinux/uClinux-dist/vendors' root@leo-desktop:/home/leo/uClinux/uClinux-dist# root@leo-desktop:/home/leo/uClinux/uClinux-dist# “ 烦请楼主帮忙

用户1449065 2008-8-15 20:23

博主,我在make vendor_hwselect SYSPTF=/home/leo/uClinux/System-files/sls_neek_bsp_hw_sopc.ptf时候出现了下面的错误” make[3]: Entering directory `/home/leo/uClinux/uClinux-dist/linux-2.6.x' RUNNING hwselect ERROR: Could not open SYSTEM ptf file. make[3]: Leaving directory `/home/leo/uClinux/uClinux-dist/linux-2.6.x' make[2]: Leaving directory `/home/leo/uClinux/uClinux-dist/vendors/Altera/nios2nommu' make[1]: Leaving directory `/home/leo/uClinux/uClinux-dist/vendors' root@leo-desktop:/home/leo/uClinux/uClinux-dist# root@leo-desktop:/home/leo/uClinux/uClinux-dist# “ 烦请楼主帮忙
相关推荐阅读
用户76594 2009-07-18 22:43
受打击了。。。。
我在想是不是应该换个环境了?不能天天这样郁闷下去呀……...
用户76594 2009-06-27 00:30
在linux下调试NIOSII的软件
本来这篇心得应该在07年写的,由于懒惰,这个事情就一直delay了,最近突然又有了兴致,赶紧把一些东西记下来,以免忘记在windows下调试NIOSII的软件应该说比较方便,NIOSII IDE还是很...
用户76594 2009-06-24 23:33
估计原来串口不能传文件是因为处理器性能太差了~
原来在50M HZ NIOSII下,通过串口用9600BPS以上的速度传文件(lrzsz程序)总是失败,但是可以从板子上往PC成功发文件。把波特率降到9600能够成功。初步怀疑有两种可能:1。串口误码...
用户76594 2009-06-22 23:34
居然成功的用lrzsz传文件了!
 最近用NIOS跑uclinux,由于我的开发板配置很简单,没有网口,所以调试非常麻烦,写一个新程序,要编译到uclinux的image里面,下载才能调试,每次都需要把整个image重新生成,重新下载...
用户76594 2009-06-20 16:17
FREE-ARM7,免费的一个ARM7 IP核代码
很厉害,只有几千行代码,可以完全兼容ARM7的ARM指令集,这个包里面是在这个CORE上仿真uclinux的代码https://static.assets-stash.eet-china.com/al...
用户76594 2009-06-20 16:13
分享一个用于研发型团队管理的软件
最近同时做的项目很多,一些项目管理的繁琐事情很多,很多时候容易忘记,所以写了这样一个小软件,用来记录项目中需要记录的一些信息,分享一下 一、简介这个软件是基于MS OFFICE EXCEL 和ACCE...
EE直播间
更多
我要评论
48
16
关闭 站长推荐上一条 /3 下一条