網頁

2014年10月20日 星期一

OpenRISC with DE0-Nano - kevinmehall version

Last Update: 2014/10/17 01:11+08
Type: Note



---Intro---


把 OpenRISC 燒進 DE0-Nano 執行嵌入式的 Linux 系統

Environment & Requirement:
VMWare
Ubuntu 12.04.2 Desktop i386
FPGA板 - DE0-Nano
USB to UART (FTDI接腳)

個人建議 看 這篇 官方版本的



---Content---


基本上是看 這篇 完成的
但中間有遇到不少問題, 所以記錄一下
安裝相依lib
sudo apt-get install libmpc-dev libgmp3-dev libmpfr-dev lzop libsdl1.2-dev xterm automake libtool

有些東西是他電腦本來就有安裝的, 但剛裝好的Ubuntu沒有, 如下
sudo apt-get install git
sudo apt-get install screen
sudo apt-get install libftdi-dev

接著 他把需要的東西都打包好了
在 $HOME 執行下述代碼
mkdir openrisc; cd openrisc/
git clone https://github.com/kevinmehall/openrisc-tools-build.git toolchain
cd toolchain
git submodule update --init
make PARALLEL=6 PREFIX=$PWD/../root

然後, 開個新檔案 openrisc_env.sh
內容如下, 之後還滿容易用到的, 就乖乖用一個吧
export OPENRISC=$HOME/openrisc
export ALTERA_PATH=/opt/altera
export ARCH=openrisc
export CROSS_COMPILE=or32-linux-
export PATH=$PATH:$OPENRISC/root/bin
export PATH=$PATH:$ALTERA_PATH/12.0sp2/quartus/bin
目的在設置 OpenRISC toolchain 和 Altera Quartus 的路徑
記得要修改成你的安裝路徑
Quartus 請自行安裝 ( 作者提供的連結 或到 官網 去載 free - web edition )
上面的 PATH 要指到Quartus目錄下的bin

進到 剛 git 下來的 linux 目錄
Configure the kernel and compile it
cd linux
make defconfig
make -j6 vmlinux



Running in Simulation


修改 arch/openrisc/or1ksim.cfg 裡的設定
將 channel = "tcp:10084" 改成 channel = "xterm:"
所以你需要有xterm, 我是裝 Ubuntu Desktop 版的
執行下述代碼, or1ksim 在 剛設置的 path 底下
or1ksim -f arch/openrisc/or1ksim.cfg vmlinux
OK 你得到了一個模擬的 linux 系統
打 poweroff 可以關掉



Running on Hardware


你得先安裝 Quartus
tar -xzvf 12.0sp2_263_quartus_free_linux.tar.gz
sudo 12.0sp2_263_quartus_free_linux/setup
記得把壓縮檔改成 你下載的檔名
然後安裝路徑要跟PATH設定的一樣
如果你 PATH 設定跟我的一樣 就把安裝路徑設在 /opt/altera

下載 ORPSoC RTL
git clone git://openrisc.net/stefan/orpsoc
放哪都可, 我把它放到 ~/openrisc 裡
你可以在這個目錄下 找到 DE0-Nano 專用的資料夾 boards/altera/de0_nano
所以先到這個目錄底下吧
cd orpsoc ; cd boards/altera/de0_nano

再來是修正 pin 腳, 方便接線
vim syn/quartus/tcl/UART0_pin_assignments.tcl

作者用了下面這個patch
說明修改方式
diff --git a/boards/altera/de0_nano/syn/quartus/tcl/UART0_pin_assignments.tcl b/boards/altera/de0_nano/syn/quartus/tcl/UART0_pin_assignments.tcl
index 0b3ae0c..72f6904 100644
--- a/boards/altera/de0_nano/syn/quartus/tcl/UART0_pin_assignments.tcl
+++ b/boards/altera/de0_nano/syn/quartus/tcl/UART0_pin_assignments.tcl
@@ -1,4 +1,4 @@
-set_location_assignment PIN_C16 -to uart0_srx_pad_i
+set_location_assignment PIN_D12 -to uart0_srx_pad_i
 set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to uart0_srx_pad_i
-set_location_assignment PIN_D15 -to uart0_stx_pad_o
+set_location_assignment PIN_B12 -to uart0_stx_pad_o
 set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to uart0_stx_pad_o
反正就是把 PIN_C16 改成 PIN_D12
PIN_D15 改成 PIN_B12
對腳位有興趣的可以下載 官方使用手冊
再來就是請
run the synthesis
rm syn/quartus/run/orpsoc.tcl
cd syn/quartus/run
make OR32_TOOL_PREFIX=or32-linux- all
如果你已經 run 過會出現 第一行 rm 欲刪除的檔案
刪除它以確保重新生成
等它一下吧~
完成後 你會看到 .sof file 和 一些有的沒的



設定Linux
作者提供了一個 .dts設定檔 把它放到 最開始 載下來的 linux 裡
cd $HOME/openrisc/toolchain/linux/arch/openrisc/boot/dts/
wget http://kevinmehall.net/openrisc/guide/de0_nano.dts.txt
mv de0_nano.dts.txt de0_nano.dts

回到 linux 目錄, 修改一下設定
cd $HOME/openrisc/toolchain/linux
make menuconfig
你會看到一個藍底的畫面
> [Processor type and Features]
> [Builtin DTB]
> 輸入 de0_nano
> [Ok]
> [Exit]

重新 compile linux
make vmlinux



接上你的 UBS to FTDI 傳輸線
我這邊是買了 UB-391 傳輸線, 作者有推薦 改造 Nokia CA-42 cable
反正能把 USB 轉 Serial Port 就好了



Start & Hello OpenRISC with DE0-Nano
回到 de0-nano 的專屬目錄
把 .sof 寫進 FPGA 裡
cd $HOME/openrisc/orpsoc/boards/altera/de0_nano/syn/quartus/run
make pgm
有出現 JTAG 錯誤的 請參考 下面的 ---Problem---
執行下述代碼後, 重新 make pgm
sudo killall jtagd
which jtagd
sudo `which jtagd`

最後 跟 Serial Port 通訊
screen /dev/ttyUSB0 115200
[ctrl-a \] 可以離開 screen



---Troubleshooting---


Error (213019): Can't scan JTAG chain. Error code 89

poweroff 結束模擬

"make PARALLEL=6 PREFIX=$PWD/../root" 失敗, 可以 參考 這篇, 試著安裝官方 toolchain 以確保必要的元件都已經安裝好了



---Reference---


Getting Started with OpenRISC
DE0-nano上でopenriscを使ってlinux起動のメモ
DE0-Nano官方使用手冊



沒有留言:

張貼留言