SUZAKU-VでTOPPERS/ASPを動かす#1

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


TOPPERS/ASPとは

開発環境の準備

  1. 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

  2. PowerPC用ビルド環境の構築
    次の手順で行いました。

    1. ディレクトリの準備
      次のディレクトリを作成し、カレントディレクトリに変更します。
      $ mkdir /suzakuv
    2. binutilsのダウンロード
      ここからダウンロードします。
      今回はbinutils-2.19.1.tar.gzをダウンロードし、/suzakuvに格納しました。

    3. 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
    4. gccと依存ファイルのダウンロード
      gccはここからダウンロードします。
      今回はgcc-4.4.0/gcc-4.4.0.tar.gzをダウンロードし、/suzakuvに格納しました。
      依存ファイルとして、ここから gmp-4.2.4.tar.bz2 および mpfr-2.4.1.tar.bz2 をダウンロードし、/suzakuvに格納しました。
      さらにここから newlib-1.17.0.tar.gz をダウンロードし、これも/suzakuvに格納しました。

    5. 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
    6. 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
    7. 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

  3. racc環境の構築
    TOPPERS/ASPは、TECS版を使用する予定です。
    TECSの環境変更でraccを使用しますので、ここで構築しておきます。
    次の手順で行いました。

    1. ディレクトリの準備
      今回は先ほど作成した /suzakuv を使用します。

    2. raccのダウンロード
      SubVersionリポジトリ http://i.loveruby.net/svn/public/racc/trunk からダウンロードします。
      今回はWindows上のTortoiseSVNでエクスポートし、/suzakuv/racc-1.4.5 に格納しました。

    3. raccのインストール
      raccのインストールを行います。
      $ cd /suzakuv/racc-1.4.5
      $ ruby setup.rb

動作確認

簡単なプログラムを作成して、SUZAKU-V上で動かしてみます。
ビルドしてSUZAKU-V上のLinux領域に上書きします。

  1. サンプルプログラムについて
    このサンプルプログラムは、SUZAKU-V本体のLED赤を3回点滅・消灯してリブートするものです。
    SUZAKU-VのFPGAコンフィグレーションはデフォルトである必要があります。

  2. ディレクトリ作成
    次のようにします。
    $ cd /suzakuv
    $ mkdir sample
    $ cd sample
  3. ファイル作成
    次の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
  4. プログラムのビルド
    続いて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
  5. プログラムの書き込み
    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が上書きされます。

  6. プログラムの実行
    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に続きます)


Total:3133 Today:1 Yesterday:1


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-01-17 (木) 18:34:00