uCLinux在NiosII平台上的移植基于Nios II的SOPC软硬件系统DE2.docx

上传人:b****5 文档编号:7544519 上传时间:2023-01-24 格式:DOCX 页数:32 大小:28.11KB
下载 相关 举报
uCLinux在NiosII平台上的移植基于Nios II的SOPC软硬件系统DE2.docx_第1页
第1页 / 共32页
uCLinux在NiosII平台上的移植基于Nios II的SOPC软硬件系统DE2.docx_第2页
第2页 / 共32页
uCLinux在NiosII平台上的移植基于Nios II的SOPC软硬件系统DE2.docx_第3页
第3页 / 共32页
uCLinux在NiosII平台上的移植基于Nios II的SOPC软硬件系统DE2.docx_第4页
第4页 / 共32页
uCLinux在NiosII平台上的移植基于Nios II的SOPC软硬件系统DE2.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

uCLinux在NiosII平台上的移植基于Nios II的SOPC软硬件系统DE2.docx

《uCLinux在NiosII平台上的移植基于Nios II的SOPC软硬件系统DE2.docx》由会员分享,可在线阅读,更多相关《uCLinux在NiosII平台上的移植基于Nios II的SOPC软硬件系统DE2.docx(32页珍藏版)》请在冰豆网上搜索。

uCLinux在NiosII平台上的移植基于Nios II的SOPC软硬件系统DE2.docx

uCLinux在NiosII平台上的移植基于NiosII的SOPC软硬件系统DE2

窗体顶端

uCLinux在NiosII平台上的移植

一、编译环境搭建

VMware上安装Ubuntu9.04*1

配置一些比较快的源

默认情况下,Ubuntu中的vi编辑器并不好用,左右键不正常,需先安装vim-full,但ubuntu-9.04-desktop-i386.iso中的默认的源无法访问了。

sudoapt-getinstall 命令全都是“failedtofetch”的错误。

需要修改/etc/apt/sources.list源文件。

可用gedit命令。

输入用户密码。

但若把源地址一项一项添加很费事,易出错,从windows环境下又无法向VMware中粘贴。

sshd,vsftpd没有安装,share-folder在Ubuntu环境下无法使用。

现在,还有一种方法,可在VMware环境下,从外部的ftp服务器上把事先已传上去的sources.list文件下载下来。

 

先配置网络

sudovi/etc/network/interfaces

配置域名服务器

sudovi/etc/resolv.conf

sudo/etc/init.d/networkingrestart

从ftp上下载source.list文件,然后执行sudomvsources.list/etc/apt 命令

之后, 

sudoapt-getupdate    //升级安装的软件包。

sudoapt-getinstallvim-full  //安装vim-full,便于以后的编辑

sudoapt-getinstallopenssh-server //安装sshd,便于远程登录

sudoapt-getinstallvsftpd  //安装vsftpd,便于以后与物理机间传送文件

sudoapt-getinstallchkconfig  //安装chkconfig,便于服务器的管理

 

接下来就参照上所讲继续安装了。

二、TryOutLinux

在进行移植工作之前,可以先下载现成的配置文件和内核映像文件,下载到板子上看看效果。

从nioswiki网站上下载DE2平台上已经编译好的DE2_NIOS_HOST_MOUSE_VGA.sof,DE2_NIOS_HOST_MOUSE_VGA.ptf以及zImage_DE2_NIOS_HOST_MOUSE_VGA_v1.6文件。

ConfiguretheFPGA

[NiosIIEDS]$ nios2-configure-sof  DE2_NIOS_HOST_MOUSE_VGA.sof

Downloadandrunthekernelimage,

[NiosIIEDS]$ nios2-download-g zImage_DE2_NIOS_HOST_MOUSE_VGA_v1.6

Opennios2terminal

[NiosIIEDS]$nios2-terminal

 

三、InstallNios2Linux

安装或下载源码和编译工具。

在编译工具链之前,先安装以上这些工具。

如若不安装完全,在后面的编译工具链和编制内核的时候可能出现错, Ncurses是一个能提供基于文本终端窗口功能的动态库。

在Ubuntu安装的时候应注意,安装ncurses-dev库时可能会显示 “ncurses-devhasnoinstallationcandidate”,如下图所示:

此时,可以安装libncurses5-dev。

$ sudoapt-getinstalllibncurses5-dev

在完成了上述库的安装后,可按下一条命令检查是否安装完全。

检查默认的shell是否是bash

如若不是,需改成bash

$ sudorm/bin/sh

$ sudoln-sbash/bin/sh

注销重新登录,检查’cc’是否链接向了’gcc’

如若不是,则需修改:

$ cd/usr/bin

$ ln-sgcccc

20090703 需要gcc4.2或者更高版本*2。

从ftp上下载nios2-linux-20090730.tar

sha1sum校验

把nios2-linux-20090730.tar解压到指定的目录:

$sudotarnios2-linux-20090730.tar –C/media/sdb1/

切换到nios2-linux 目录,checkoutthesource

nios2-linux中各个目录的作用。

Nios2uClinux 的源文件和gnu工具链。

以下这些命令是编译nios2-gcc工具链的整个过程

Ubuntu中编译需要注意的是:

Ubuntu中并没有root用户,需用sudo的方式执行管理员操作,但是即使用sudomake仍会产生’permissiondenied’的错误。

可能是sudo的有效区域的问题。

可用以下方式解决:

出现的错误:

在安装好上文中所说的那些库后,在make的过程中仍有各种错误,便切换到nios2-linux目录update了一下。

再进行上述操作,会出现以下错误

cp:

cannotstat`doc/gcc.1':

Nosuchfileordirectory

在google上寻找解决方法如下,需修改gcc3目录下的Make-lang.in中的一句代码。

至此,在编译就没有错误了,toolschain的编译时间比较长,大概用了1个小时10分钟左右的时间。

toolchain终于编译成功了。

 

也可以用编译好的BinaryToolchain,

然后设一下PATH变量

$ vi~/.bashrc

本文中,把编译好的BinaryToolchain放到/opt/nios2/bin目录下,把自行编译的tools-chain设在/media/sdb1/nios2-linux/toolchain-build/build/nios2/bin目录下。

重新登录后,查看nios2-linux-uclibc-gcc 是否可用

$ nios2-linux-uclibc-gcc-v

现在把编译环境完全在nios2-linux-20090929上来做。

我在Ubuntu虚拟机上新加了一块8G的硬盘,在tarxf,./checkout,maketoolchain之后居然空间不够了,还得把nios2-linux-20090929.tar的包删掉才行。

由于nios2-linux项目使用git来管理的,所以在用的时候需要注意查看分支。

如若不是在test-nios2分支上,切换过来吧。

依次检查每一个目录。

其它与7月30的版本相同,而且不会出现编译工具链时的错误。

 

编一个测试程序:

helloworld

编译与检测

接下来,就可以配置和编译内核了。

切换到uClinux-dist目录下,执行

$ makemenuconfig

回车进入Vendor/ProductSelection,Vendor选择Altera,Product选择AlteraProducts(nios2)。

Exit。

选择Kernel/Library/DefaultsSelection,单击回车进入。

选择Defaultallsettings(losechanges),Exit,Exit。

显示 Doyouwishtosaveyournewkernelconfiguration?

 选择 Yes

 

可先从nioswiki网站上下载一个已配置好的系统DE2_NIOS_HOST_MOUSE_VGA.ptf和

DE2_NIOS_HOST_MOUSE_VGA.sof先做一下实验。

 

运行vendor_hwselect

$ makevendor_hwselectSYSPTF=/home/lunix/uclinux/DE2_NIOS_HOST_MOUSE_VGA.ptf

选择要使用的cpu,设置程序运行的存储器。

编译内核和程序

$ make

把生成的zImage文件cp到vftpd配置的目录,在Windows环境中从虚拟机上下载。

启动nios2commandshell

$ nios2-configure-sofDE2_NIOS_HOST_MOUSE_VGA.sof

$ nios2-download–gzImage

-g 选项代表着是 下载后立即运行。

$ nios2-terminal

 

四、配置SOPC硬件系统平台

下面将配置一个SOPC系统,并自行裁剪linux内核

 

后记:

没有认真阅读

 

它的基本的硬件要求或建议是

∙NiosIIf型core,带Hardwaremultipler

∙sdram(最小8M)

∙一个fullfeature的定时器timer

∙一个jtag或者serial的UART

除了定时器timer不要把中断号0(irq0)分配给任何器件

 

硬件设计

建立一个工程,名字为DE2_uClinux。

器件设置如下。

加入一个VerilogHDL文件,文件名为DE2_uClinux.v,SetasTop-LevelEntity。

此时可先不管DE2_uClinux.v中的内容,先建立一个SOPC系统。

 

调用SopcBuilder  建立一个nios系统。

起名字为DE2_lab1

添加OnchipMemory,在MemorieandMemoryControllers->On-Chip->On-ChipMemory(RAMorROM)。

添加cpu,选择NiosII/e型,设置 复位和异常 向量。

更正:

此处应选NiosII/f型

 

加入定时器timer,选择full-featured,在Peripherals->MicrocontrollerPeripherals->IntervalTimer

加入JTAG_UART和UART,在InterfaceProtocols->Serial中

加入sdram控制器,在MemoriesandMemoryController->SDRAM->SDRAMController

 

加入sram,此处需注意

 

将DE2光盘中找到demo工程的SRAM_16Bits_512Kcopy到DE2-uClinux工程目录下,执行file->refreshsystem,可看到左侧systemcontent栏中多了一个TerasicTechnologiesInc组,组中的SRAM_16Bits_512K就是要加入的DE2上的sram控制器。

 

将DM9000A和SRAM_16Bit_512K加入

后记:

SOPCComponentforDM9000

把dm9000a_hw.tcl文件存放到工程目录,打开SOPCBuilder,可看到一个新的“dm9000a”组件。

添加一个新的Avalon-MMtristatebridge,添加”dm9000a”组件,重命名为”dm9000”,连接到Avalontristatebridgemaster,不需要Verilog或者VHDL文件,因为SOPCBuilder会自动生成。

不要把中断号0(irq0)分配给dm9000。

 

DM9000A模块加入后,应命名为dm9000,并通过tristate-bridge与连接到系统上,且中断号不能为0。

以下图的中未作修改,所有的dm9000a都应为dm9000。

 

加入flashcontroller,MemoriesandMemoryController->Flash->FlashMemeoryInterface(CFI)

CFIflash通过tristate-bridge与AvalonMM总线连接,它是个速度较慢的器件。

 

 

配些开关和灯。

开关和红灯18个,绿灯8个,按钮4个。

 

绿灯和按钮类似

 

先选这么多吧,最后结果

执行一些地址对齐,中断号分配的工作。

注意中断号0。

点击next,generate。

把新生成的系统加到DE2_uCLinux工程中。

配置引脚

Assignments->ImportAssignments, 选中DE2光盘中的DE2_pin_assignments.csv文件,导入。

Assignment->Device->DeviceandPinOptions->Unusedpin 设为 Asinputtri-stated。

Dual-purposepin->nCEO 设置为UseasregularI/O

 

修改顶层文件DE2_uClinux。

打开DE2光盘中的一个比较齐全的的Demo,此处用\DE2\DE2_demonstrations\DE2_NET。

把里面的DE2_NET.v文件的内容考出,把内容copy到DE2_uClinux.v中,把顶层module名改为DE2_uClinux。

把不需要的部分进行裁剪。

本文中裁剪如下。

               ////////////////////    Clock Input         ////////////////////     

        CLOCK_27,                        //    On Board 27 MHz

        CLOCK_50,                        //    On Board 50 MHz

        ////////////////////    Push Button        ////////////////////

        KEY,                            //    Pushbutton[3:

0]

        ////////////////////    DPDT Switch        ////////////////////

        SW,                                //    Toggle Switch[17:

0]

        ////////////////////////    LED        ////////////////////////

        LEDG,                            //    LED Green[8:

0]

        LEDR,                            //    LED Red[17:

0]

        ////////////////////////    UART    ////////////////////////

        UART_TXD,                        //    UART Transmitter

        UART_RXD,                        //    UART Receiver

        /////////////////////    SDRAM Interface        ////////////////

        DRAM_DQ,                        //    SDRAM Data bus 16 Bits

        DRAM_ADDR,                        //    SDRAM Address bus 12 Bits

        DRAM_LDQM,                        //    SDRAM Low-byte Data Mask 

        DRAM_UDQM,                        //    SDRAM High-byte Data Mask

        DRAM_WE_N,                        //    SDRAM Write Enable

        DRAM_CAS_N,                        //    SDRAM Column Address Strobe

        DRAM_RAS_N,                        //    SDRAM Row Address Strobe

        DRAM_CS_N,                        //    SDRAM Chip Select

        DRAM_BA_0,                        //    SDRAM Bank Address 0

        DRAM_BA_1,                        //    SDRAM Bank Address 1

        DRAM_CLK,                        //    SDRAM Clock

        DRAM_CKE,                        //    SDRAM Clock Enable

        ////////////////////    Flash Interface        ////////////////

        FL_DQ,                            //    FLASH Data bus 8 Bits

        FL_ADDR,                        //    FLASH Address bus 20 Bits

        FL_WE_N,                        //    FLASH Write Enable

        FL_RST_N,                        //    FLASH Reset

        FL_OE_N,                        //    FLASH Output Enable

        FL_CE_N,                        //    FLASH Chip Enable

        ////////////////////    SRAM Interface        ////////////////

        SRAM_DQ,                        //    SRAM Data bus 16 Bits

        SRAM_ADDR,                        //    SRAM Address bus 18 Bits

        SRAM_UB_N,                        //    SRAM High-byte Data Mask

        SRAM_LB_N,                        //    SRAM Low-byte Data Mask  

        SRAM_WE_N,                        //    SRAM Write Enable

        SRAM_CE_N,                        //    SRAM Chip Enable

        SRAM_OE_N,                        //    SRAM Output Enable

        ////////////////////    USB JTAG link    ////////////////////

        TDI,                              //    CPLD -> FPGA (Data in)

        TCK,                              //    CPLD -> FPGA (Clock)

        TCS,                              //    CPLD -> FPGA (CS)

        TDO,                              //    FPGA -> CPLD (Data out)

        ////////////    Ethernet Interface    ////////////////////////

        ENET_DATA,                        //    DM9000A DATA bus 16Bits

        ENET_CMD,                        //    DM9000A Command/Data Select, 0 = Command, 1 = Data

        ENET_CS_N,                        //    DM9000A Chip Select

        ENET_WR_N,                        //    DM9000A Write

        ENET_RD_N,                        //    DM9000A Read

        ENET_RST_N,                        //    DM9000A Reset

        ENET_INT,                        //    DM9000A Interrupt

        ENET_CLK//,                        //    DM9000A Clock 25 MHz

文件中其它的部分与上些部分无关的代码去掉。

在生成的DE2_lab.v文件中把,把顶层模块DE2_lab复制到DE2_uClinux.v中修改如下

DE2_lab1 de2(

                  // 1) global signals:

                   .clk(CPU_CLK),

                   .reset_n(CPU_RESET),

 

                  // the_button_pio

                   .in_port_to_the_button_pio(KEY),

 

                  // the_dm9000a

        .cmd_to_the_dm9000(cmd_dm9000),

        .cs_n_to_the_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 >

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1