今回使用したSUZAKU-Vは、SZ410-U00です。また動作確認用に、LED/SWボードを使用します。
TOPPERS/ASPはSUZAKU-S上のMicroBlaze向けにはリリースされていますが、SUZAKU-V向けにはリリースされていません。
今回 Xilinx Virtex-4 FX 内蔵の PowerPC405コアへの移植を試みます。
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
$ mkdir /suzakuv
$ 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
$ 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
$ 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
$ 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
$ cd /suzakuv/racc-1.4.5 $ ruby setup.rb
簡単なプログラムを作成して、SUZAKU-V上で動かしてみます。
ビルドしてSUZAKU-V上のLinux領域に上書きします。
$ cd /suzakuv $ mkdir sample $ cd sample
#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 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
ポート : 任意 ボーレート: 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赤が点灯します。
Serial Port: 任意 機能 : Download Image : 上記のsample.binを選択 Region : Image ForceLocked: チェックしないこの状態で実行をクリックすると、linuxの場所にsample.binが上書きされます。
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>
Total:3133 Today:1 Yesterday:1