【原创】如何将uClinux移植到DE0开发板上

 

硬件条件:友晶DE0开发板

软件条件:WIN XP,quartus11.0,VMware6.0.2,红帽企业版5,uClinux-dist-20070130.tar(2.6.0内核源文件),uClinux-dist-20070130-nios2-02.diff(内核补丁),nios2gcc.tar(交叉编译器)。

交叉编译环境的建立

首先安装虚拟机软件VMware,选择红帽企业版5作为操作系统。安装完成后,选中虚拟计算机,点击VM->settings,如图:

 

在弹出窗里选择CD-ROM

 

选择Use ISO image,然后选择红帽企业版5所在的目录,然后点击ok。然后给虚拟计算机上电,安装红帽系统。

重新启动虚拟机后,对操作系统进行简单的配置。在配置后,运行VM->Install VM Tools,然后鼠标就可以随意在Linux和Windows之间切换了。

利用U盘在Windows 和虚拟机Linux之间传递数据,具体做法如下:在linux界面上点击鼠标激活linux,然后插入U盘,这时候linux系统识别U盘,就可以进行操作了。然后直接拔下U盘,回到windows界面点击鼠标激活窗口,再插入U盘,就可以读取刚才linux系统写入的数据了。

从windows下通过U盘复制nios2gcc.tar.bz2至linux的/usr/local/src文件夹下,并解压缩。然后复制uClinux-dist-20070130.tar(2.6.0内核源文件),uClinux-dist-20070130-nios2-02.diff(内核补丁)到这个文件夹,把内核源文件解压缩,把补丁放到解压缩后得到的文件夹里。这些过程都在图形界面下操作。然后按住ctrl+alt+F1,进入字符操作界面,如要从字符界面返回,按住ctrl+alt+F7。进入界面后,用root用户登录,然后转到src文件夹:cd  /usr/local/src/

输入命令:vi ~/.bash_profile

看到界面如下:

# .bash_profile

 

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

        . ~/.bashrc

fi

 

# User specific environment and startup programs

 

PATH=$PATH:$HOME/bin:/opt/nios2/bin

 

export PATH

unset USERNAME

我们按下i键,或者用insert键,进行修改,在最后第二行改为:

 

然后按esc键退出编辑状态,再输入冒号:进入命令状态,输入wq,保存退出。

重新执行bash_profile script,让所设定的路径马上生效,不必再重新登出登入

命令为: source ~/.bash_profile

然后测试交叉编译器是否安装成功

命令为:nios2-linux-uclibc-gcc –v

如果看到如下界面,说明安装成功:

 

至此交叉编译环境已经建立起来。

建立硬件环境

用quartus11.0(或者其他版本)随便建立一个SOPC工程,我建立的系统为:timer的中断号为0(也有文章说SOPC不能有任何外设占用中断号0,搞不清楚,但是0号中断最好不要给timer以外的外设),UART中断和jtag UART中断随便分配,PIO有8个,连到LED上,systemid,SDRAM,Flash。这里要注意,SDRAM和Flash的容量一定要与实际容量匹配,不然uClinux系统不能正常运行。DE0光盘里的SDRAM部分原理图有错误,A12是不用的引脚,不能再SOPC里出现A12,否则uClinux会以为系统的RAM是16M!所以在SDRAM的配置页里,ROW一定是12!编译后通过U盘将system.ptf文件复制到linux的src文件夹下。

进入到uClinux-dist文件夹:cd uClinux-dist

给内核打补丁(只可操作一次):

gunzip -c uClinux-dist-20070130-nios2-02.diff.gz | patch -p0

成功后可见:

patching file vendors/Altera/nios2nommu/config.arch

patching file vendors/Altera/nios2nommu/config.linux-2.6.x

patching file lib/libpng/Makefile

patching file linux-2.6.x/include/asm-nios2nommu/ide.h

patching file linux-2.6.x/include/linux/elf-em.h

patching file linux-2.6.x/usr/Makefile

patching file linux-2.6.x/arch/nios2nommu/kernel/vmlinux.lds.S

patching file linux-2.6.x/arch/nios2nommu/drivers/Kconfig

patching file linux-2.6.x/arch/nios2nommu/drivers/altcf.c

patching file linux-2.6.x/arch/nios2nommu/drivers/pci/Kconfig

patching file linux-2.6.x/arch/nios2nommu/drivers/pci/pci-auto.c

patching file linux-2.6.x/arch/nios2nommu/drivers/pci/pci.c

patching file linux-2.6.x/arch/nios2nommu/drivers/pci/Makefile

patching file linux-2.6.x/arch/nios2nommu/drivers/spi.c

patching file linux-2.6.x/arch/nios2nommu/drivers/Makefile

patching file linux-2.6.x/drivers/mtd/maps/altera.c

patching file linux-2.6.x/drivers/mtd/maps/Kconfig

patching file linux-2.6.x/drivers/net/Kconfig

patching file linux-2.6.x/drivers/net/Makefile

patching file linux-2.6.x/drivers/net/dm9ks.c

patching file linux-2.6.x/drivers/net/open_eth.c

patching file linux-2.6.x/drivers/net/dm9000.c

patching file linux-2.6.x/drivers/net/Space.c

patching file linux-2.6.x/drivers/net/smc91x.c

patching file linux-2.6.x/drivers/net/smc911x.c

patching file linux-2.6.x/drivers/net/mtip1000.c

patching file linux-2.6.x/drivers/usb/Kconfig

patching file linux-2.6.x/drivers/usb/host/Kconfig

patching file linux-2.6.x/drivers/usb/host/isp1362-hcd.c

patching file linux-2.6.x/drivers/usb/host/Makefile

patching file linux-2.6.x/drivers/usb/host/isp1362.h

patching file linux-2.6.x/drivers/usb/Makefile

patching file linux-2.6.x/drivers/ide/ide.c

patching file user/microwin/src/fonts/X6x13.c

patching file user/microwin/src/demos/nxroach/Makefile

patching file user/microwin/src/demos/nanox/nxterm.c

patching file user/microwin/src/demos/nanox/nterm.c

patching file user/microwin/src/demos/nxkbd/keynum.c

patching file user/microwin/src/demos/nxkbd/keyctrl.c

patching file user/microwin/src/demos/nxkbd/keyshft.c

patching file user/microwin/src/Makefile.rules

patching file user/microwin/src/drivers/kbd_ttyscan.c

patching file user/microwin/src/drivers/scr_fb.c

patching file user/microwin/src/drivers/mou_ser.c

patching file user/ftpd/ftpcmd.c

patching file user/ftpd/Makefile

没有任何错误的话,可以开始下一步,配置内核。输入命令:make menuconfig

可以看到如下界面,上下方向键移动光标,回车键进入子菜单,空格键选中,S键选择,E键离开。

 

Vendor/Product Selection下如下设定:

 

在Kernel/Library/Defaults Selection如下设置

 

注意确保:第二行表示选择的库,默认是uClibc,这个需要修改,回车进入,空格选择None。并用空格选中第三行“Default all settings”。

至此配置完成,按E退出,按Y保存。出现如下提示:

 

意思是下面我们必须执行make dep命令。那么我们执行这个命令:make dep

 

提示说make dep指令不是必须的,这是因为我之前已经执行过了,如果没执行过就不会有这一行了。

下面根据系统硬件配置uClinux。输入命令:make vendor_hwselect SYSPTF=/usr/local/src/system.ptf

后面会有选择动作,根据DE0板的配置,都选1.最后配置结束后如下:

 

建立romfs文件夹,网上文章说:此操作可能报错,不过此处可以忽略,继续进行下面步骤。而实际上我开始时报错,然后生成zImage时也报错,后来运行了make dep命令后,make romfs就不再报错了。

然后,编译uClinux核心,运行命令:make

然后,生成zImage文件,运行命令:make linux image

然后回到图形操作界面,/usr/local/src/uClinux-dist/linux-2.6.x/arch/nios2nommu/boot/下找到zImage(大小为1.2M,如果不是这个大小,说明操作过程有错误),用U盘将其复制到windows的某一文件夹下,比如:D:/FPGA-PROJECT下。

然后开始->所有程序->Altera->NIOS II EDS 11.0->Nios II 11.0 Command Shell,如下:

 

这程序可以运行shell命令,我们先转到工作目录下:cd D:/FPGA-PROJECT

然后运行:nios2-configure-sof DE2_NIOS.sof

这一步不是必须的,你也可以在编译完成后就用quartus下载sof文件到FPGA里。

然后,下载zImage到SDRAM,运行:nios2-download –g zImage

 

然后运行uClinux系统,输入命令:nios2-terminal

看到这个漂亮的界面,说明移植成功,uClinux已经在DE0上运行了:

 

参考文献:真oo无双博客

清华大学step by step 教程

 

 

 

 

posted @ 2012-07-24 23:04  lamapig  阅读(847)  评论(1编辑  收藏  举报