至此,你的cross gcc就安装成功啦!在这步安装的时候,基本上不会出现什么问题,如果有任何小问题的话,大家应该都能解决的。
二、编译uClinux内核以及生成uClinux镜像 1、下载uClinux内核源码 这一步出现了很多的问题,由于有很多种内核源码,不知道该用哪种,首先,第一次出现的问题就是,我下载了http://www.uclinux.org/pub/uClinux/dist/里面的内核,编译了很多次都没有成功。最终,我找到了问题的根源,我仔细阅读了wiki里的说明,发现了这样一句话:The releases from uclinux.org does not apply to the procedures described here。就是说,这里的方法不适合uClinux.org里面的内核,看到这句话,我当时就崩溃了,终于明白了是什么原因啦!
好了,我去下载适合wiki里面方法的内核啦,可是问题又出现啦,该死的中国服务器。
下面的命令是下载nios2ftp里面的内核源码。
wget http://www.niosftp.com/pub/linux/nios2-linux-20090929.tar
可惜,我在执行这条命令的时候,是下载不了,经过在Altera论坛上查找相关信息之后,发现,这就是中国的服务器的问题啦,没有办法。我又仔细的找解决的办法。之后,我找到了一个网址,可以下载最新的内核,这里,要非常感谢hippo这位工程师啊!为我们解决了很多问题。
通过下面的网址下载最新的内核。
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
经过3天的下载,终于将这个nios2-linux-20100621.tar下载成功啦,这个花费我太多的时间!这里再次对hippo这位工程师表示感谢!
2、解压nios2-linux-20100621.tar 还是在use/local/src这个路径下,执行下面的命令解压nios2-linux-20100621.tar.
tar -C /usr/local/src -xvf nios2-linux-20100621.tar
这样,就use/local/src下生成一个目录为nios2-linux的目录
3、配置内核 进入内核目录。
cd nios2-linux
cd uClinux-dist
执行下面的命令,配置内核。
make menuconfig
这里不出什么问题的话,就会进入内核配置的界面,我在配置的时候出现了一个小小的问题,说是KEY_MAX没有定义,于是我就google了一下,一位好心人士给我解决了,是缺少一个命令。
执行下面的命令就可消除以上的问题。
apt-get install libncurses5-dev
好了,就进入了内核配置目录啦!
内核的配置就比较简单啦,首先选择Vendor里面,选择Altera,下面就自动选择nios2啦!接着进入下一个选项,用户库等配置,我们选择第一个Default all Setting,之后,就exit,exit,yes,就ok啦!
在这里,特别需要提醒的是,在第一次boot成功之前,不要更改其他任何设置!(具体原因,也不知道为什么?)
4、根据sopc生成的ptf文件设置硬件makefile 将sopc生成的ptf文件拷贝到当前的/use/local/src目录下
执行一下命令,设置硬件的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下。
cd linux-2.6
git checkout test-nios2
cd uClinux-dist
git checkout test-nios2
如果成功的话,就会出现“Now Switching to test-nios2 branch”
5、编译内核 这里就没有什么可多说的啦,我在这步没有出现什么问题。执行下面的命令
cd uClinux-dist
make
这步需要等待一下,有一定的时间。至此,内核就编译成功啦!
最终在/use/local/src/nios2-linux/uClinux-dist/linux-2.6.x/arch/nios2/boot下生成镜像文件zImage
三、下载硬件sof文件和镜像文件 1、下载硬件到DE2 nios2-configure-sof (--cable x) DE2_NIOS.sof
2、下载镜像文件到DE2中 nios2-download -g (--cable x) zImage
3、启动uClinux nios2-terminal (--cable x)
括号中选择的选项,是如果你安装了多个下载线的情况下,就指定下载线即可!
至此,uClinux在FPGA上的移植就成功,就会出现下面的东西啦!
Using cable "USB-Blaster [USB 2-1.2]", device 1, instance 0x00
Pausing target processor: OK
Initializing CPU cache (if present)
OK
Downloaded 1272KB in 7.7s (165.1KB/s)
Verified OK
Starting processor at address 0x00500000
# nios2-terminal
nios2-terminal: connected to hardware target using JTAG UART on cable
nios2-terminal: "USB-Blaster [USB 2-1.2]", device 1, instance 0
nios2-terminal: (Use the IDE stop button or Ctrl-C to terminate)
Uncompressing Linux... Ok, booting the kernel.
Linux version 2.6.26-rc6 (hippo@darkstar) (gcc version 3.4.6) #2 PREEMPT Mon Jun 16 14:30:09 CST 2008
uClinux/Nios II
Built 1 zonelists in Zone order, mobility grouping off. Total pages: 8128
Kernel command line:
PID hash table entries: 128 (order: 7, 512 bytes)
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory available: 30136k/2333k RAM, 0k/0k ROM (1552k kernel code, 781k data)
Mount-cache hash table entries: 512
net_namespace: 180 bytes
NET: Registered protocol family 16
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
TCP reno registered
NET: Registered protocol family 1
io scheduler noop registered
io scheduler deadline registered (default)
ttyJ0 at MMIO 0x8009340 (irq = 8) is a Altera JTAG UART
console [ttyJ0] enabled
ttyS0 at MMIO 0x8008e00 (irq = 7) is a Altera UART
dm9000 Ethernet Driver, V1.30
TCP cubic registered
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
Freeing unused kernel memory: 572k freed (0x1b8000 - 0x246000)
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 u***fs none /proc/bus/u***
mount: mounting none on /proc/bus/u*** 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
Command: route add -net 127.0.0.0 netmask 255.0.0.0 lo
Command: cat /etc/motd
Welcome to
____ _ _
/ __| ||_|
_ _| | | | _ ____ _ _ _ _
| | | | | | || | _ | | | | / /
| |_| | |__| || | | | | |_| |/
| _______|_||_|_| |_|____|_/_/
| |
|_|
For further information check:
http://www.uclinux.org/
Execution Finished, Exiting
Sash command shell (version 1.1.1)
/>
看到上面的东西,说明你移植成功啦,应该来说,很开心啦吧!是啊,移植了快有一个月啦!看到成功当然开心啦,在这里,也学到了很多东西。其实也走了很多歪路,首先是没有仔细阅读wiki里面的内容,总是下载org官网的uClinux-dist源码,最终总是有各种错误!还是不够冷静沉着,从这一点看来,还是静下心来时非常重要的,一个好的学习心情,一个好的学习方法是很重要的!
将上面的步骤写下来,纪念一下吧,也算是一个工作量吧!呵呵!