移植的环境:
ubuntu12.10
quartus11.0sp1,NIOSII 11.0IDE sp1(win7)
fpga开发板采用的是黑金开发板cyclone四代
首先硬件配置
如果只是跑来玩玩可以不需要flash芯片,但这个ip core必须要有以后会用到;
图中的eth_cs可以不用添加,我是参考http://hi.baidu.com/xuxin_813/item/4cc6c6505017402b32e0a9cf的方法加入来控制网络芯片,结果根本用不到。
spi设置
timer设置
eth_irq中断设置
编译
下载到板子
先用IDE写个hello world跑一下 看看不能正常运行 呵呵。
ubuntu编译内核:
参考alterawiki,我在当时没仔细看浪费了不少时间。。。
http://www.alterawiki.com/wiki/Install_Nios_II_Linux
很多地方都有说,不过我再来重复一下
sudo apt-get update sudo apt-get install git-core git-gui make gcc ncurses-dev bison flex gawk \ gettext ccache zlib1g-dev libx11-dev texinfo liblzo2-dev pax-utils uboot-mkimage corkscrew
选择bash
通过以下方式可以使 shell 切换回 bash:
$sudo dpkg-reconfigure dash
然后选择 no 或者 否 ,并确认。
这样做将重新配置 dash,并使其不作为默认的 shell 工具
确保gcc和cc一致,我使用gcc version 4.7.2
下载uclinux相关工具和内核
wget ftp://ftp.altera.com/outgoing/nios2-linux/20120802/*
wget ftp://ftp.altera.com/outgoing/nios2-linux/nios2gcc-20080203.tar.bz2
解压
for i in $(ls nios2-linux-*.tgz); do tar -xzvf $i;done
tar -xvf nios2gcc-20080203.tar.bz2
设置环境变量(这里必须到root下操作,不然会有错)
我直接修改 /etc/profile文件 加入
export PATH="$PATH:/XXX/nios2-linux/toolchain-build/build/nios2/bin"(xxx是你解压nios2gcc-20080203的目录)
然后运行
source /etc/profile
解压文件后必须转换工作平台
cd nios2-linux/linux-2.6 git fetch origin git branch test-nios2 origin/test-nios2 git checkout -f test-nios2
成功后运行make menuconfig 就不会出现有关nios2-linux-uclibc-gcc 的警告
进行如下操作
make menuconfig(先选择default all settings 确保能正常编译和运行)
make (报错忽略)
make vendor_hwselect SYSPTF=/xxx/yourptf.ptf
make
我遇到报错:
undefined reference to bzero
undefined reference to index
undefined reference to rindex
我手动修改了几个调用这几个函数的源文件,用相同功能的函数memset,strchr,strrchr代替,重新 make就不再提示错误了
再次make成功
make linux image
生成zImage(在uClinux-dist/linux-2.6.x/arch/nios2/boot目录下,需要复制到windows下altera的安装目录下的examples中 这是我的目录D:\altera\11.0\nios2eds\examples )通过nios2-download -g zImage 直接下载到sdram运行,成功后结果如下
修改enc28j60驱动:
修改linux2.6/arch/inos2/kernel/config.c
添加平台设备信息
在static struct spi_board_info nios2_spi_devices[] = {中添加有关enc28j60的spi设备
在drivers/net/enc28j60.c修改
重新make menuconfig(选择customize kernel settings 自定义内核)
device drivers--->
[*] spi_support --->
[*] altera spi controller
device drivers--->
[*]network device support --->
[*]ethernet (10 or 100mbit) --->
[*] enc28j60 support
[*]networking support --->
netowrking options---->
[*] packet socket
[*] unix domain sockets
[*]tcp/ip networking
还可以选择添加nfs功能
编译成功
下载
我的运行结果如下:
程序的固化可以使用如下命令
(b).xx.flash是这条命令输出的文件,
(c).--base和--end分别对应flash芯片的基地址和结束地址.--reset是CPU复位地址,和--base相同.
(d).xxxx.src是bootloader,可以从安装目录下的ip/altera_nios2下拷贝,名字是:boot_loader_cfi.srec
2.nios2-flash-programmer -g -c usb-blaster --base=0x... --program xx.flash
目前还不能加入使用udhcpc这个命令发现busybox不能修改。