* SUZAKU-VでTOPPERS/ASPを動かす#1 [#q6ffc018]
今回使用したSUZAKU-Vは、SZ410-U00です。また動作確認用に、LED/SWボードを使用します。~
TOPPERS/ASPはSUZAKU-S上のMicroBlaze向けにはリリースされていますが、SUZAKU-V向けにはリリースされていません。~
今回 Xilinx Virtex-4 FX 内蔵の PowerPC405コアへの移植を試みます。

#contents
----
**TOPPERS/ASPとは [#h28476c7]
- TOPPERS/ASPの情報は[[TOPPERSプロジェクト:http://www.toppers.jp/]]を見てください。
**開発環境の準備 [#bdf03a21]
+ Cygwinのインストール~
[[ここ:http://sourceware.org/cygwin/]]から「Install or update now!(using setup.exe)」をクリックしてセットアップを行います。~
~
今回はSelect Packagesで以下のパッケージをインストールしました。
 All
   Archive
     unzip           5.52-3
   Devel
     autoconf        6-1
     automake        4-1
     binutils        20080624-2
     flex            2.5.35-1
     gcc             3.4.4-999
     make            3.81-2
     ruby            1.8.7-p72-2
   Perl
     perl            5.10.0-5
   Utils
     cpio            2.9-1
     file            4.21-1
     patch           2.5.8-9
     time            1.7-2
~
+PowerPC用ビルド環境の構築~
次の手順で行いました。~
~
++ディレクトリの準備~
次のディレクトリを作成し、カレントディレクトリに変更します。
 $ mkdir /suzakuv
++binutilsのダウンロード~
[[ここ:http://ftp.gnu.org/gnu/binutils/]]からダウンロードします。~
今回はbinutils-2.19.1.tar.gzをダウンロードし、/suzakuvに格納しました。~
~
++binutilsのビルド~
PowerPC用にビルドとインストールを行います。
 $ cd /suzakuv
 $ tar xvfz binutils-2.19.1.tar.gz
 $ cd binutils-2.19.1
 $ mkdir build
 $ cd build
 $ ../configure --target=powerpc-suzakuv-elf --prefix=/suzakuv/binutils
 $ make CFLAGS="-O2"
 $ make install
シンボリックリンクを作成しておきます。
 $ mkdir /suzakuv/bin
 $ cd /suzakuv/bin
 $ ln -s /suzakuv/binutils/bin/powerpc-suzakuv-elf-addr2line.exe addr2line
 $ ln -s /suzakuv/binutils/bin/powerpc-suzakuv-elf-objcopy.exe objcopy
 $ ln -s /suzakuv/binutils/bin/powerpc-suzakuv-elf-ar.exe ar
 $ ln -s /suzakuv/binutils/bin/powerpc-suzakuv-elf-objdump.exe objdump
 $ ln -s /suzakuv/binutils/bin/powerpc-suzakuv-elf-as.exe as
 $ ln -s /suzakuv/binutils/bin/powerpc-suzakuv-elf-ranlib.exe ranlib
 $ ln -s /suzakuv/binutils/bin/powerpc-suzakuv-elf-c++filt.exe c++filt
 $ ln -s /suzakuv/binutils/bin/powerpc-suzakuv-elf-readelf.exe readelf
 $ ln -s /suzakuv/binutils/bin/powerpc-suzakuv-elf-embedspu embedspu
 $ ln -s /suzakuv/binutils/bin/powerpc-suzakuv-elf-size.exe size
 $ ln -s /suzakuv/binutils/bin/powerpc-suzakuv-elf-gprof.exe gprof
 $ ln -s /suzakuv/binutils/bin/powerpc-suzakuv-elf-strings.exe strings
 $ ln -s /suzakuv/binutils/bin/powerpc-suzakuv-elf-ld.exe ld
 $ ln -s /suzakuv/binutils/bin/powerpc-suzakuv-elf-strip.exe strip
 $ ln -s /suzakuv/binutils/bin/powerpc-suzakuv-elf-nm.exe nm
++gccと依存ファイルのダウンロード~
gccは[[ここ:http://mirror.anl.gov/pub/gnu/gcc/]]からダウンロードします。~
今回はgcc-4.4.0/gcc-4.4.0.tar.gzをダウンロードし、/suzakuvに格納しました。~
依存ファイルとして、[[ここ:ftp://gcc.gnu.org/pub/gcc/infrastructure/]]から gmp-4.2.4.tar.bz2 および mpfr-2.4.1.tar.bz2 をダウンロードし、/suzakuvに格納しました。~
さらに[[ここ:ftp://sources.redhat.com/pub/newlib/index.html]]から newlib-1.17.0.tar.gz をダウンロードし、これも/suzakuvに格納しました。~
~
++gmpのビルド~
ビルドとインストールを行います。
 $ cd /suzakuv
 $ tar jxf gmp-4.2.4.tar.bz2
 $ cd gmp-4.2.4
 $ mkdir build
 $ cd build
 $ ../configure --prefix=/suzakuv/gmp
 $ make CFLAGS="-O2"
 $ make check
 $ make install
++mpfrのビルド~
ビルドとインストールを行います。
 $ cd /suzakuv
 $ tar jxf mpfr-2.4.1.tar.bz2
 $ cd mpfr-2.4.1
 $ mkdir build
 $ cd build
 $ ../configure --with-gmp=/suzakuv/gmp --prefix=/suzakuv/mpfr
 $ make CFLAGS="-O2"
 $ make check
 $ make install
++gccとnewlibのビルド~
PowerPC用にビルドとインストールを行います。
 $ PATH=/suzakuv/binutils/bin:$PATH
 $ export PATH
 $ cd /suzakuv
 $ tar xvfz newlib-1.17.0.tar.gz
 $ tar xvfz gcc-4.4.0.tar.gz
 $ cd gcc-4.4.0
 $ ln -s ../newlib-1.17.0/newlib
 $ ln -s ../newlib-1.17.0/libgloss
 $ mkdir build
 $ cd build
 $ ../configure --target=powerpc-suzakuv-elf --enable-languages=c --prefix=/suzakuv/gcc --with-gmp=/suzakuv/gmp --with-mpfr=/suzakuv/mpfr  --disable-libssp --disable-libgcc --disable-ada --with-newlib --with-headers=/suzakuv/newlib-1.17.0/newlib/libc/include/
 $ make CFLAGS="-O2"
 $ make install
ビルド結果を確認。~
 $ cd /suzakuv/gcc/bin
 $ ./powerpc-suzakuv-elf-gcc -v
 Using built-in specs.
 Target: powerpc-suzakuv-elf
 Configured with: ../configure --target=powerpc-suzakuv-elf --enable-languages=c --prefix=/suzakuv/gcc --with-gmp=/suzakuv/gmp --with-mpfr=/suzakuv/mpfr --disable-libssp --disable-libgcc --disable-ada --with-newlib --with-headers=/suzakuv/newlib-1.17.0/newlib/libc/include/
 Thread model: single
 gcc version 4.4.0 (GCC)
シンボリックリンクを作成しておきます。
 $ cd /suzakuv/bin
 $ ln -s /suzakuv/gcc/bin/powerpc-suzakuv-elf-cpp.exe cpp
 $ ln -s /suzakuv/gcc/bin/powerpc-suzakuv-elf-gccbug gccbug
 $ ln -s /suzakuv/gcc/bin/powerpc-suzakuv-elf-gcc-4.4.0.exe gcc-4.4.0
 $ ln -s /suzakuv/gcc/bin/powerpc-suzakuv-elf-gcov.exe gcov
 $ ln -s /suzakuv/gcc/bin/powerpc-suzakuv-elf-gcc.exe gcc
~
+racc環境の構築~
TOPPERS/ASPは、TECS版を使用する予定です。~
TECSの環境変更でraccを使用しますので、ここで構築しておきます。~
次の手順で行いました。~
~
++ディレクトリの準備~
今回は先ほど作成した /suzakuv を使用します。~
~
++raccのダウンロード~
SubVersionリポジトリ http://i.loveruby.net/svn/public/racc/trunk からダウンロードします。~
今回はWindows上のTortoiseSVNでエクスポートし、/suzakuv/racc-1.4.5 に格納しました。~
~
++raccのインストール~
raccのインストールを行います。
 $ cd /suzakuv/racc-1.4.5
 $ ruby setup.rb
**動作確認 [#w9661ca6]
簡単なプログラムを作成して、SUZAKU-V上で動かしてみます。~
ビルドしてSUZAKU-V上のLinux領域に上書きします。~
~
++サンプルプログラムについて~
このサンプルプログラムは、SUZAKU-V本体のLED赤を3回点滅・消灯してリブートするものです。~
SUZAKU-VのFPGAコンフィグレーションはデフォルトである必要があります。~
~
++ディレクトリ作成~
次のようにします。
 $ cd /suzakuv
 $ mkdir sample
 $ cd sample
++ファイル作成~
次の2つのファイルを作成します。~
~
【sample.c】
 #define LED_RED     (0xF0FFA200)
 #define LED_ON      (0x00000000)
 #define LED_OFF     (0x00000001)
 #define SOFT_RESET  (0xF0FFA000)
 #define REBOOT      (0x00000001)
 
 /* binファイルが小さすぎてHermit-At Win32が落ちる対策 */
 int a[] = {0,1,2,3};
 
 void main(void)
 {
     int *led_red    = (int*)LED_RED;
     int *soft_reset = (int*)SOFT_RESET;
     int i,j;
 
     *led_red    = LED_OFF;
 
     for(i=0;i<3;i++) {
         for(j=0;j<100000;j++) {
         }
         *led_red    = LED_ON;
         for(j=0;j<100000;j++) {
         }
         *led_red    = LED_OFF;
     }
 
     *soft_reset = REBOOT;
 }
【Makefile】
 ROOTDIR = /suzakuv
 PATH   := $(ROOTDIR)/bin:$(PATH)
 
 CC      = gcc
 AS      = as
 LD      = ld
 OBJCOPY = objcopy
 
 CFLAGS  = -Wa,-m405
 LDLIBS  = $(ROOTDIR)/gcc/powerpc-suzakuv-elf/lib/libc.a
 LDFLAGS = -e main -Ttext 0x00000000
 
 TARGET = sample
 
 BIN    = $(TARGET).bin
 ELF    = $(TARGET).elf
 OBJS   = $(TARGET).o
 
 all: $(BIN)
 
 $(BIN): $(ELF)
 	$(OBJCOPY) -O binary $(ELF) $(BIN)
 
 $(ELF): $(OBJS)
 	$(LD) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)
 
 %.o: %.c
 	$(CC) -c $(CFLAGS) -o $@ $<
 
 clean:
 	-rm -f *.bin *.elf *.o *.map
++プログラムのビルド~
続いてmakeを実行します。
 $ make
 gcc -c -Wa,-m405 -o sample.o sample.c
 ld -e main -Ttext 0x00000000 -o sample.elf sample.o /suzakuv/gcc/powerpc-suzakuv-elf/lib/libc.a
 objcopy -O binary sample.elf sample.bin
++プログラムの書き込み~
PCでターミナルソフトを起動します。ターミナルソフトの設定は次の通り。
 ポート    : 任意
 ボーレート: 115200
 データ    : 8bit
 パリティ  : なし
 ストップ  : 1bit
 フロー制御: なし
SUZAKU-VのJP1のみショートさせて電源に接続すると、次のメッセージが表示されます。
 BBoot v2.6 (powerpc)
 Press 'z' or 'Z' for BBoot Menu.
 Hermit-At v1.1.21 (suzaku/powerpc) compiled at 18:40:14, Mar 25 2009
 hermit>
Harmitが起動すると、SUZAKU-VのLED赤が点灯します。~
続いて、SUZAKU-V付属のHermit-At Win32で先ほどのsample.binを書き込みます。~
そのため一旦ターミナルを切断して、Hermit-Atの設定を次のように行います。~
 Serial Port: 任意
 機能       : Download
 Image      : 上記のsample.binを選択
 Region     : Image
 ForceLocked: チェックしない
この状態で実行をクリックすると、linuxの場所にsample.binが上書きされます。~
~
++プログラムの実行~
Hermit-At Win32を終了、再びターミナルを接続してSUZAKU-Vの電源を入れ直します。~
hermitのコマンド入力待ちになるので、bootと入力します。~
うまくいけば、SUZAKU-VのLED赤が消灯し、リブートします。~
~
【実行例】
 BBoot v2.6 (powerpc)
 Press 'z' or 'Z' for BBoot Menu.
 Hermit-At v1.1.21 (suzaku/powerpc) compiled at 18:40:14, Mar 25 2009
 hermit> boot
 Copying  kernel............................done. (ここでLED赤が点滅・消灯、リブートします)
 
 
 BBoot v2.6 (powerpc)
 Press 'z' or 'Z' for BBoot Menu.
 Hermit-At v1.1.21 (suzaku/powerpc) compiled at 18:40:14, Mar 25 2009
 hermit>
~
([[SUZAKU-VでTOPPERS/ASPを動かす#2]]に続きます)
~
----

 #comment
#comment

Total:&counter(total); Today:&counter(today); Yesterday:&counter(yesterday);

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS