一、摘要
在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
另外,需要注意,各個命令中的空格。