分类:
2009-08-13 17:02:30
标签: 无标签
NIOSII是altera公司针对FPGA推出的一个CPU软核,它可以综合到任何一款altera的FPGA中。用户可以基于sopc builder搭建自己的系统。一个基于NIOSII的系统如图:
除了sopc builder提供的一些外设以外,用户可以按照avalon总线标准来实现自己的模块,而且可以很容易的集成到系统里面去。
niosii有三个不同的版本:niosii-e、niosii-s、niosii-f。
Niosii-e针对低成本应用,内部没有流水线结构,不带指令/数据CACHE,所以实现所需要的逻辑较小(600-700 LEs)。
Niosii-s有五级流水结构,带指令cache(size根据用户配置),实现需要1200-1400 LEs。
Niosii-f有六级流水结构,带指令和数据cache,实现需要1400-1800 LEs。
在建立系统之前检查一下软硬件配置:
1、使用最新版本的Quartus和Nios软件,低版本软件可能存在bug。我之前用QuartusII 5.1试了好几次都没有完全把uClinux跑起来,在boot开始以后就挂死了,百思不得其解,后来换成QuartusII 6.1以后,重新编译了一下逻辑就把跑起来了。郁闷了我好久……
2、uClinux需要在linux环境下编译(基于cygwin也可以编译,不过我说的这个过程是在linux上的),所以你必须有一个linux操作系统。有几种办法:A,装一个linux版本的QuartusII,所有的操作都在linux下完成。B,用两台计算机,一台用windows,跑quartus等软件,另一台装linux。C,在windows下装个虚拟机vmware,在虚拟机上装linux,通过虚拟机来编译uClinux,然后把image文件导入到windows下调试。我就是使用虚拟机的方法,但是要求你的PC内存比较大才行,否则系统会很慢。
3、你板子上FPGA的容量要能装的下一个系统,外部的SDRAM容量至少要
以上条件都满足了,就可以开始了。
首先,建立一个工程,然后建立一个小系统,配置如下:
最小系统至少要包括:
一个niosii cpu,一个sdram控制器,cfi_flash控制器(在单板上不需要flash),全功能的timer,用于通信的jtag uart或serial uart。
可以根据单板的硬件资源来适当配置逻辑,比如加入一些led和key等等。
在linux里面中断0是自动识别的,所以在硬件系统里面不要使用0号中断。
要把uClinux放到niosii中运行首先必须把uClinux代码编译成niosii的指令。这个编译的过程需要相应的程序来完成。下载软件包。
进入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的代码包。
然后下载 软件包,这是把uClinux移植到niosii CPU上的补丁。
在linux下使用如下命令:
# 使用普通用户登陆
cd ~
# 解压uClinux代码
tar jxf ~/download/uClinux-dist-20070130.tar.bz2
# 进入uClinux根目录
cd uClinux-dist
# 打补丁,这一步只能做一次,否则会引起错误
zcat ~/download/ | patch -p0
# 还是停在uClinux-dist目录,不要切换目录
# 配置uClinux 内核
make menuconfig
# 选择Vendor/Product Slection
# 配置Vendor和Product
# 回到主界面,选择Kernel/Library/Default Selection
# 配置Library和Kernel参数为默认值
# 选择
# 保存配置
# 把在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
# 到这里,uClinux的image文件就产生了,把它拷贝到windows下面下载并运行
在Quatus里面把编译好的系统下载到FPGA里面去
FPGA配置完以后,就可以下载软件了。
打开NIOSII的命令行
# 进入到zImage文件所在的目录,下载软件
nios2-download –g zImage
# 下载完成以后,打开nios2-terminal,接口串口发送的信息
nios2-terminal
# JTAG串口上打印如下信息
Uncompressing Linux... Ok, booting the kernel.
Linux version
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:
Execution Finished, Exiting
Sash command shell (version
/>
# 可以使用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
2007/7/11 21:41:41
呵呵,太幸运了,能这么早发现您的这篇文章,对我真的很有帮助,谢谢啦
2007/7/31 8:23:27
最近正好想玩玩这个,能找到你真是太幸运了
2007/7/25 22:57:25
从你的截图上来看,应该是没有安装gcc,你在Linux的安装光盘上把gcc编译器装上就可以了.
2007/7/25 9:11:26
高手,可否留个在线联系方式?按照这个步骤,出了点问题啊!
2007/7/25 9:21:08
2007/8/28 18:00:50
[root@localhost uClinux-dist]# make dep
make ARCH= CROSS_COMPILE= -C linux-2.6.x dep
make[1]: Entering directory `/mnt/hgfs/CrazyBoy/uClinux-dist/linux-2.6.x'
Makefile:493: /mnt/hgfs/CrazyBoy/uClinux-dist/linux-2.6.x/arch//Makefile: 没有那个文件或 目录
make[1]: *** 没有规则可以创建目标“/mnt/hgfs/CrazyBoy/uClinux-dist/linux-2.6.x/arch//Makefile”。 停止。
make[1]: Leaving directory `/mnt/hgfs/CrazyBoy/uClinux-dist/linux-2.6.x'
make: *** [dep] 错误 2
[root@localhost uClinux-dist]#
[root@localhost uClinux-dist]# make vendor_hwselect SYSPTF="/home/crazyboy/"sys.ptf
make ARCH= -C vendors vendor_hwselect
make[1]: Entering directory `/mnt/hgfs/CrazyBoy/uClinux-dist/vendors'
Makefile:19: “-include” 没有文件名
make
-C /mnt/hgfs/CrazyBoy/uClinux-dist/vendors///.
dir_v=/mnt/hgfs/CrazyBoy/uClinux-dist/vendors///. -f
/mnt/hgfs/CrazyBoy/uClinux-dist/vendors/vendors-common.mak
vendor_hwselect
make[2]: Entering directory `/mnt/hgfs/CrazyBoy/uClinux-dist/vendors'
/mnt/hgfs/CrazyBoy/uClinux-dist/vendors///./Makefile:19: “-include” 没有文件名
/mnt/hgfs/CrazyBoy/uClinux-dist/vendors/vendors-common.mak:9: *** 目标文件“romfs.post”含有 : 和 :: 两种条目。 停止。
make[2]: Leaving directory `/mnt/hgfs/CrazyBoy/uClinux-dist/vendors'
make[1]: *** [vendor_hwselect] 错误 2
make[1]: Leaving directory `/mnt/hgfs/CrazyBoy/uClinux-dist/vendors'
make: *** [vendor_hwselect] 错误 2
[root@localhost uClinux-dist]#
quartus 产生的ptf 在 /home/crazyboy/下,名字是sys.ptf
能不能帮我分析一下看看什么问题
2007/12/18 17:00:25
新手上路,有幸看到你的帖子,准备回去按照上面的步骤走下。。。
先谢谢啦
2007/12/27 10:18:08
我 想请教一个问题,我安装了nios2gcc.tar.bz2,修改了path,为什么在输入nios2-linux-uclibc-gcc -v,总是提示我:bash: nios2-linux-uclibc-gcc: command not found,这是什么原因?我是在windows系统下使用cygwin环境。希望高手给与指教。谢谢
2008/1/3 21:16:41
没有试过在cygwin下用这个流程,好像用于cygwin的软件必须专门针对cygwin重新编译,估计这个包就算找到了,也不一定能执行 吧.windows下有个专门的安装包好像叫nios2linux,用于在niosii ide下使用uclinux.你可以到google上查查.同一台电脑上用uclinux,最好用虚拟机编译uclinux
2008/1/24 3:18:01
按你的方法试了,但make romfs总是通不过,请高手指点
2008/1/25 22:03:07
make romfs报错没有问题阿,继续往下走就可以了。
2008/2/25 10:37:42
谢谢啦,我现在改用虚拟机了
2008/2/29 14:57:58
请问斑竹有没有用nios2linux-1.4做过?
2008/3/2 16:25:03
你说的是windows环境下的nios2linux吗?曾经试着编译过,但是没有成功
2008/3/19 15:45:09
我也出现了这种情况,不知是什么原因?请高手指点一下了?
2008/3/22 17:35:27
非常感谢!
2008/3/30 0:21:08
从你的截图来看,是没有安装gcc,你从安装光盘上把GCC装上即可。
2008/4/3 9:55:20
谢谢,装上gcc就好了
2008/4/7 16:27:28
make的时候产生了错误,如下: Can't run cmd gzip -f -9 >> boa collect2 : ld returned 4 exit status make[4] : ***[boa] Error 1 make[4] : Leaving directory "/home/lee/uClinux-dist/user/boa/src" make[3] : ***[all] Error 2 make[3] : Leaving directory "/home/lee/uClinux-dist/user/boa" make[2] : ***[boa] Error 2 make[2] : Leaving directory "/home/lee/uClinux-dist/user" make[1] : ***[all] Error 2 make[1] : Leaving directory "/home/lee/uClinux-dist/user" make : ***[subdirs] Error 1 make了好几遍,都是这个问题过不去。 在 make romfs 的时候,总是出现: cp : stat boa 失败:没有那个文件或目录 麻烦您帮我指点下。。。
2008/4/7 16:32:29
我晕,连发了3遍,windows居然提示我没有引导成功。。。
2008/4/7 16:36:19
博主,偶这个不是有意连发4遍的,被windows欺骗了。。。你自己调整下哈。。。
2008/4/15 22:43:56
那个Quartus II编译的程序有没有啊,能不能发个让我看看
我的邮箱:,谢谢
2008/4/15 22:53:50
不好意思,我也被windows欺骗了
2008/4/17 21:18:40
为什么在make romfs与make都没错,但到sopc下载zImage文件时即"nios2-download -g zImage"总是出现" verify failed between........"
2008/4/17 21:20:24
为什么在make romfs与make都没错,但到sopc下载zImage文件时即"nios2-download -g zImage"总是出现" verify failed between........"
2008/4/17 21:21:54
为什么在make romfs与make都没错,但到sopc下载zImage文件时即"nios2-download -g zImage"总是出现" verify failed between........"
2008/5/9 0:48:42
我在解压 时就是说我的文件不是gzip文件,我忽略了可在后面make的时候就一直出错,我想是我的文件坏了,可我在网上搜了好几个都不行,版主能给我发一个吗?我的邮箱是: 我的QQ是20545625
谢谢!!!~~~
2008/5/11 1:04:53
Hello,bojue 不需要用gzip解压,直接用这个命令打补丁就行了: # 打补丁,这一步只能做一次,否则会引起错误 zcat ~/download/uClinux-dist-20070130-nios2-02.diff.gz | patch -p0
2008/5/11 1:08:25
To : hqu2007lyy 我也曾遇到过这个问题,先检查一下QUARTUS软件版本是否最新,下载线不要太长,一般都是环境引起的...
2008/5/13 21:57:13
博主能不能让我看一下你用quartus编译的程序,图看不清楚啊,我的qq:393317023,谢谢了
2008/5/21 18:05:26
版主你好,我按照你的方法尝试对内核进行编译,可是在打patch那里出现了一些问题。 在开始打补丁之后总是会提示 can't find file to patch at line **(数字来的,很多处,不连续) 我在网上其它的帖子里看到的说是patch和内核版本不同,可是我是按照你给的地址下载的两个文件,难道是地址上给的文件有一个更新过了? 我是个linux新手,希望版主帮忙看下,感激不尽,^_^
2008/5/29 9:44:22
为什么下载完成后在Uncompressing Linux...的地方就挂起了
2008/5/30 23:51:23
Re sf2046: 你试一下把NIOSII和QUARTUS更新到最新版本.我以前也遇到这个问题,发现是版本太低,可能早期的版本里面有bug吧.更新以后重新编译就过了.
2008/6/2 22:52:32
quartus和nios2都是6.0的版本,还低吗?
2008/6/8 15:41:05
我按你的步骤,在MAKE时总是报错,在linux-2.6.x/scripts/mod/sumversion.c中有一个变量MAX_PATH未定 义,我把这个变量(宏)用100代替了,可以通过了,但到最后好像是链接阶段又报错,但如果忽略错误继续执行make linux image也可以产生zImage,只是在下载后在打印第一条消息时就没任何输出了.请博主指点一下.(我是在Fedora 9下编译的,用quartus II 7.2)
2008/6/14 0:28:52
re sf2046: 我用的是QUARTUS 6.1的版本,没有问题.
2008/6/14 0:30:51
Re gewanyong: 你在内核配置的时候是不是选择了一些模块?可以检查一下你选择的程序,把不需要的程序取消掉,先把最小系统跑起来.
2008/6/15 0:17:57
感谢博主的回答,我是完全按照你的步骤来的,用的是默认选项,没有选择其它的程序也没有另外配置内核,编译总是通不过,换了两三个内核版本,错误基本上都 一样。下面是make时输出的错误信息,请你帮我分析一下: queue.o read.o request.o response.o signals.o timestamp.o util.o -lcrypt request.o(.text+0x990): In function `process_header_end': /root/nios_linux/uClinux-dist/user/boa/src/request.c:560: warning: the use of `tmpnam' is dangerous, better use `mkstemp' boa.elf2flt(.text+0xd64): In function `auth_authorize': /root/nios_linux/uClinux-dist/user/boa/src/auth.c:358: undefined reference to `bzero' boa.elf2flt(.text+0x2584): In function `embedparse': /root/nios_linux/uClinux-dist/user/boa/src/config.c:325: undefined reference to `bzero' collect2: ld returned 1 exit status make[4]: *** [boa] 错误 1 make[4]: Leaving directory `/root/nios_linux/uClinux-dist/user/boa/src' make[3]: *** [all] 错误 2 make[3]: Leaving directory `/root/nios_linux/uClinux-dist/user/boa' make[2]: *** [boa] 错误 2 make[2]: Leaving directory `/root/nios_linux/uClinux-dist/user' make[1]: *** [all] 错误 2 make[1]: Leaving directory `/root/nios_linux/uClinux-dist/user' make: *** [subdirs] 错误 1
2008/6/15 15:41:34
我找到问题的原因了,是编译器找不到
2008/6/18 11:51:44
问题解决了,谢谢duckfly,我解决问题的频骤在这里写下了http://brother.abc.blog.163.com/blog /static/59394469200851811429862/
2008/7/22 10:57:37
我按你步骤做了,可是
2008/7/22 11:00:53
我按你步骤做了,可是 为什么在make romfs与make都没错,但到sopc下载zImage文件时即"nios2-download -g zImage"总是出现" verify failed between........"
2008/7/22 11:03:27
我按你步骤做了,可是 为什么在make romfs与make都没错,但到sopc下载zImage文件时即"nios2-download -g zImage"总是出现" verify failed between........"
2008/8/15 20:23:49
博主,我在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# “ 烦请楼主帮忙
2008/8/15 20:24:35
博主,我在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# “ 烦请楼主帮忙
2008/8/15 20:24:56
博主,我在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' 烦请楼主帮忙
2008/8/15 20:25:18
博主,我在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. 烦请楼主帮忙
2008/8/15 20:25:42
博主,我在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. 烦请楼主帮忙
2008/8/15 20:35:10
博主,我在make vendor_hwselect SYSPTF=/home/leo/uClinux/uc.ptf时候出现了下面的错误RUNNING hwselect ERROR: Could not open SYSTEM ptf file.烦请楼主帮忙
2008/8/17 15:15:31
re fengliuleo: 你看看你的ptf文件是不是放在/home/leo/uClinux/uc.ptf,还要看以下这个文件的权限是不是可读写的。
2009/7/17 13:19:37
不错,值得参考