DIY_DE2移植uClinux
一、摘要
在DIY_DE2开发板上移植uClinux。
二、实验平台
1、虚拟机:VMWare
2、Linux系统:ubuntu10.04
3、Quartus II 6.0 + Nios II 6.0
三、软件准备
1、下载nios2gcc-20080203
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
2、下载nios2-linux-20100621
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
网上有人说在window操作系统下下载上述文件的时候可能会损坏软件,我这里就是在window下下载的,倒也没出什么问题。
下载完毕,将nios2gcc-20080203tar.bz2和nios2-linux-20100621.tar放在共享文件夹LinuxShare下,即上篇博文中建立的共享文件夹。
四、配置交叉编译环境
1、获取root权限
为了后面的方便,这里使用root权限,打开终端,输入指令
sudo su
输入登陆时候的密码,便获得了root权限。
2、将nios2gcc-20080203tar.bz2放在/usr/local/src目录下
在ubuntu下,将nios2gcc-20080203.tar.bz2从共享文件夹copy到/usr/local/src目录下,在终端下输入如下命令:
cp /mnt/hgfs/LinuxShare/nios2gcc-20080203.tar.bz2 /usr/local/src/nios2gcc-20080203.tar.bz2
3、解压nios2gcc-20080203.tar.bz2
进入/usr/local/src目录
cd /usr/local/src
解压nios2gcc-20080203.tar.bz2
tar jxvf nios2gcc-20080203.tar.bz2
这样,就在usr/local/src下生成一个opt的目录,就是解压后的结果。
4、设置交叉gcc编译的路径
对于Ubuntu的用户来说,开启终端是要重新加载profile这个文件,所以我们需要更改这个文件。打开profile文件,还是在usr/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
当出现下面的路径
则说明cross gcc路径设置正确。
6、检查cross gcc安装成功
输入指令:
nios2-linux-uclibc-gcc -v
如果安装成功的话,就会出现下面的结果
至此,cross gcc就安装成功啦!在这步安装的时候,基本上不会出现什么问题,如果有任何小问题的话,大家应该都能解决的。
五、配置及编译linux内核
这一步出现一些问题,也耽误了一些时间,因为实验室的电脑没有联网,因此在安装一些指令的时候总是出现错误,后来用自己的电脑在联网情况下成功安装这些指令,所用到的指令下面将详述。
1、将nios2-linux-20100621.tar放在/usr/local/src目录下
在ubuntu下,将nios2-linux-20100621.tar从共享文件夹copy到/usr/local/src目录下,在终端下输入如下命令:
cp /mnt/hgfs/LinuxShare/nios2-linux-20100621.tar /usr/local/src/nios2-linux-20100621.tar
2、解压nios2-linux-20100621.tar
还是在usr/local/src这个路径下,执行下面的命令解压nios2-linux-20100621.tar
tar -C /usr/local/src -xvf nios2-linux-20100621.tar
这样,就usr/local/src下生成一个名为nios2-linux的目录
3、配置内核
进入内核目录。
cd /nios2-linux/uClinux-dist
执行下面的命令,配置内核。
make menuconfig
做到这一步的时候连续出现2个错误。
(1)第一个错误
"make: *** No rule to make target `menuconfig'. Stop."
后来查找资料发现缺少指令,用checkout检查缺少什么指令。
进入目录 /usr/local/src/nios2-linux
cd /usr/local/src/nios2-linux
输入 checkout
./checkout
如下图所示
这一步说明git指令没有安装,继续google,得到解决方法,安装git-core,在终端输入命令:
apt-get install git-core
ubuntu便从源下载所需数据包,之后自动安装,中间有个选择,输入Y即可。
Do you want to continue [Y/n]? Y <—— 这里输入Y
再在目录/usr/local/src/nios2-linux下用checkout检查,其结果如下:
这说明所需指令安装完成。
然后在上一步的基础上进入内核目录。
cd uClinux-dist
执行下面的命令,配置内核。
make menuconfig
又遇到第二个错误。
(2)KEY_MAX没有定义
执行下面命令,解决上述问题。
apt-get install libncurses5-dev
如下图所示:
之后再次回到内核目录。
cd uClinux-dist
执行下面的命令,配置内核。
make menuconfig
则成功进入内核配置界面,如下图所示:
第一项Venddor/Product Selection 设置,如下图所示:
按照上图设置,之后按E退回到前一界面,对Kernel/Library/Defaults Selection设置,如下图所示:
选择第一个Default all Setting(按键盘Y键选择),之后,就exit,exit,yes,就ok啦!
4、根据sopc生成的ptf文件设置硬件makefile
将sopc生成的ptf文件拷贝到当前的/usr/local/src目录下
cp /mnt/hgfs/LinuxShare/system_0.ptf /usr/local/src/system_0.ptf
执行一下命令,设置硬件的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下。当前目录为/usr/local/src。
cd linux-2.6
git checkout test-nios2
cd uClinux-dist
git checkout test-nios2
如果成功的话,就会出现“Switching to test-nios2 branch”,如下图所示。
再次执行一下命令,设置硬件的makefile
make vendor_hwselect SYSPTF=/usr/local/src/system_0.ptf
之后会有2个选择,一个选择cpu,另外一个选择SDRAM,如下图所示。
5、编译内核
内核目录为/usr/local/src/nios2-linux/uClinux-dist,输入指令,编译内核。
make
这里我遇到过2种错误:
(1)"nasys_clock_freq" is not defined
Google之后找到原因
就是用SOPC定制的时候缺少了一个 full-featured 定时器。
(2)yacc:command not found
google找到原因,安装
解决完这2个问题之后,再做编译内核。
输入指令:
make
这步需要等待一下,有一定的时间。至此,内核就编译成功啦!
最终在/usr/local/src/nios2-linux/uClinux-dist/linux-2.6.x/arch/nios2/boot下生成镜像文件zImage。
有时候编译出错的话,可以使用命令:
make clean
进行清除之前的编译结果,之后再重新编译即可。
六、下载
1、第一步
将zImage文件复制到windows下的 D:\altera\kits\nios2_60\examples下面,如果安装了VMWare Tools,则可以直接用复制粘贴功能在windows和ubuntu下。
2、第二步
将配置文件.sof复制到windows下的 D:\altera\kits\nios2_60\examples下面。
3、第三步
启动“开始——>所有程序——>Altera——>Nios II EDS6.0——>Nios II Command Shell”
4、第四步
下载.sof文件到FPGA,输入指令:
nios2-configure-sof DE2_NIOS.sof
如下图所示。
5、第五步
下载镜像文件zImage到SDRAM,输入指令:
nios2-download -g zImage
如下图所示。
6、第六步
启动linux,输入指令:
nios2-terminal
如下图所示。
至此,uClinux在FPGA上的移植成功完成。
PS:
有时候重新启动系统,运行
make vendor_hwselect SYSPTF=/usr/local/src/cpu.ptf
的时候会出现nios2-linux-uclibc-gcc找不到的错误,这个时候需重新调用指令:
source ~/.profile
另外,需要注意,各个命令中的空格。