ARMのgcc環境を構築する5

cygwingcc環境を構築する

数年ぶりにcygwin使う。
あれ? cygwinperl入っていないやん。ってことでperl追加インストール。
...cygwin環境がぶっ壊れたw
cygwin再インストール


http://www.gnuarm.com/bu-2.17_gcc-4.1.1-c-c++_nl-1.14.0_gi-6.5.exe
よりcygwin用のGNU ARM toolchainをダウンロードし、
/home/houo/tools/gnuarm_tools
にインストール。
パスはインストール時に設定するか聞いてくる。


動作確認。

$ arm-elf-gcc -v
    213 [main] ? (2500) D:\cygwin\home\houo\tools\gnuarm_tools\bin\arm-elf-gcc.e
xe: *** fatal error - D:\cygwin\home\houo\tools\gnuarm_tools\bin\arm-elf-gcc.exe
: *** system shared memory version mismatch detected - 0x8A88009C/0x75BE009C.
This problem is probably due to using incompatible versions of the cygwin DLL.
Search for cygwin1.dll using the Windows Start->Find/Search facility
and delete all but the most recent version.  The most recent version *should*
reside in x:\cygwin\bin, where 'x' is the drive on which you have
installed the cygwin distribution.  Rebooting is also suggested if you
are unable to find another cygwin DLL.
      6 [main] ? (4036) D:\cygwin\home\houo\tools\gnuarm_tools\bin\arm-elf-gcc.e
〜〜 略 〜〜


cygwin1.dllのバージョンが合わないみたいなので、今回はバージョンが古かったgnuarmのcygwin1.dllを捨てる。

$ arm-elf-gcc -v
Using built-in specs.
Target: arm-elf
Configured with: ../gcc-4.1.1/configure --target=arm-elf --prefix=/g/gnuarm-4.1.
1 --enable-interwork --enable-multilib --with-float=soft --with-newlib --with-he
aders=../newlib-1.14.0/newlib/libc/include --enable-languages=c,c++
Thread model: single
gcc version 4.1.1


問題なさそうなのでTOPPERS/JSPのAZ9360MB版sample1をコンパイルしてみる。

$ cd jsp143
$ mkdir OBJ
$ mkdir armv4_test01
$ cd armv4_test01
$ perl ../../configure -C armv4 -S az9360mb
$ make depend
$ make

〜〜 略 〜〜

                        start.o  sample1.o     timer.o serial.o logtask.o log_ou
tput.o vasyslog.o t_perror.o strerror.o  kernel_cfg.o   libkernel.a   -lgcc
arm-elf-nm jsp.exe > jsp.syms
arm-elf-objcopy -O srec -S jsp.exe jsp.srec
../../cfg/chk -m jsp.syms,jsp.srec \
                        -obj -cs jsp.chk -cpu armv4 -system az9360mb
Program failed in its process by following reason.
  [Internel error] Module loading failure [jsp.syms,jsp.srec]
make: *** [jsp.exe] Error 1


chk.exe実行で内部エラーになっている。
ROMは一応できているのかな?

ARMのgcc環境を構築する4

pizzafactory-gnu-toolsのインストール

https://sourceforge.jp/projects/pf3gnuchains/releases/30715
を教えていただいたので、arm-elfをMacOSXにインストールする。

seiryu$ arm-elf-gcc -v
dyld: Library not loaded: /usr/lib/libiconv.2.dylib
  Referenced from: /Users/seiryu/Projects/Chumby/tools/pizza/bin/arm-elf-gcc
  Reason: Incompatible library version: arm-elf-gcc requires version 7.0.0 or later, but libiconv.2.dylib provides version 5.0.0
Trace/BPT trap
seiryu$ 

gccが動かない。libiconvのバージョンが古い?

Libiconvのインストール

http://homepage.mac.com/matsuan_tamachan/software/LibIconv.html
ftp://ftp.gnu.org/gnu/libiconv
を参考にlibiconv-1.20.tar.gzをインストールしてみる。

seiryu$ ./configure --prefix=/usr
seiryu$ make
seiryu$ sudo make install

特に問題なくインストール完了。

seiryu$ make depend
rm -f Makefile.depend
arm-elf-gcc -S  -mcpu=arm9tdmi -Wa -mbig-endian     -O2   -DAZ9360MB -DGDB_STUB -I. -I../../include  -I../../config/armv4/az9360mb -I../../config/armv4  -I../../kernel ../../config/armv4/makeoffset.c
dyld: lazy symbol binding failed: Symbol not found: _getrlimit$UNIX2003
  Referenced from: /Users/seiryu/Projects/Chumby/tools/pizza/bin/../libexec/gcc/arm-elf/3.4.3/cc1
  Expected in: /usr/lib/libSystem.B.dylib

dyld: Symbol not found: _getrlimit$UNIX2003
  Referenced from: /Users/seiryu/Projects/Chumby/tools/pizza/bin/../libexec/gcc/arm-elf/3.4.3/cc1
  Expected in: /usr/lib/libSystem.B.dylib

arm-elf-gcc: Internal error: Trace/BPT trap (program cc1)
Please submit a full bug report.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
make: *** [makeoffset.s] Error 1
seiryu$ 

やはり別のエラーが出る。MacOSX10.4.11ppcを使っているのだが、toolchainの作成環境とOSのバージョン違いが原因の気がしてきた...
とりあえずここでいったんやめて別の手を考える。

gnuarmのインストール

http://www.gnuarm.com/
MacOSXCygwinLinuxgcc等が公開されているのでこれをインストールしてみる。
# MacOSX版はちょっとバージョンが古いが...

seiryu$ arm-elf-gcc -v
Reading specs from /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/specs
Configured with: ../gcc-3.3.2/configure --target=arm-elf --prefix=/fake_root/usr/local/ --enable-interwork --enable-multilib --enable-languages=c,c++ --with-newlib --with-headers=../newlib-1.12.0/newlib/libc/include
Thread model: single
gcc version 3.3.2

問題なし。

seiryu$ make depend
rm -f Makefile.depend
arm-elf-gcc -S  -mcpu=arm9tdmi -Wa -mbig-endian     -O2   -DAZ9360MB -DGDB_STUB -I. -I../../include  -I../../config/armv4/az9360mb -I../../config/armv4  -I../../kernel ../../config/armv4/makeoffset.c
cc1: error: unrecognized option `-Wa'
make: *** [makeoffset.s] Error 1

Waオプションがわからないようなので、とりあえず削除してみる。
(jsp143/config/armv4/az9360mb/Makefile.config)

seiryu$ make depend

〜〜 略 〜〜
arm-elf-gcc  -mcpu=arm9tdmi -mbig-endian     -O2   -DAZ9360MB -DGDB_STUB -I. -I../../include  -I../../config/armv4/az9360mb -I../../config/armv4 -nostdlib  -mcpu=arm9tdmi  -N -mbig-endian  -Wl,-Ttext,0x0000003c -T ../../config/armv4/az9360mb/ns9360.ld -o jsp \
                start.o  sample1.o     timer.o serial.o logtask.o log_output.o vasyslog.o t_perror.o strerror.o  kernel_cfg.o   libkernel.a   -lgcc 
/Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/../../../../arm-elf/bin/ld: /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/libgcc.a(_udivsi3.o): compiled for a little endian system and target is big endian
File in wrong format: failed to merge target specific data of file /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/libgcc.a(_udivsi3.o)
/Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/../../../../arm-elf/bin/ld: /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/libgcc.a(_umodsi3.o): compiled for a little endian system and target is big endian
File in wrong format: failed to merge target specific data of file /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/libgcc.a(_umodsi3.o)
/Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/../../../../arm-elf/bin/ld: /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/libgcc.a(_dvmd_tls.o): compiled for a little endian system and target is big endian
File in wrong format: failed to merge target specific data of file /Users/seiryu/Projects/Chumby/tools/gnuarm/bin/../lib/gcc-lib/arm-elf/3.3.2/libgcc.a(_dvmd_tls.o)
collect2: ld returned 1 exit status
make: *** [jsp] Error 1

libgcc.a等とターゲットのエンディアンが違う?
gcc環境もエンディアンごとにそろえないといけないのね...

とりあえず今日はここまで。

次の予定
・gnuarm.comのCygwin版バイナリを試してみる。
・gnuarm.comかpizzafactory-gnu-toolsの実績のあるバージョンでgcc環境をコンパイルしてみる。
Cygwinで一からgcc環境をコンパイルしてみる。

キーボード壊れる

前々からキーボードの調子がおかしかったのだが、壊れたっぽい。
escとtabを押しても反応しない。
今日買ってくればよかった。

はてなのカテゴリー分けのやり方がわかったので、文章を整理し直す。

AZ9360MBのマニュアル

http://www.ydktec.com/support/download/index.html
からAZ9360MBのマニュアルがダウンロードできる。

ハードウェアマニュアルから電源ジャックの形状を確認。
HEC-0470-01-230
http://www.hosiden.co.jp/web/frame/products_f.htm
で調べたがのっていなさそう。
半田で付け替えた方が早い。
http://akizukidenshi.com/catalog/items2.php?p=1&q=%22M-01801%22
http://akizukidenshi.com/catalog/items2.php?p=1&q=%22C-00077%22
のふたつで良さそう。
前に教材で使っていたAE-H8/3069F-LANボードの電源を流用してもいい。

ARMのgcc環境を構築する2

環境書いてなかった。
Mac OS X 10.4.11 PowerPC G5

あれ? パス間違ってる。

binutils

seiryu$ cd /Users/seiryu/Projects/Chumby/tools/ 
seiryu$ mkdir arm9_binutils
seiryu$ cd arm9_binutils
seiryu$ ../binutils-2.18/configure --prefix=/Users/seiryu/Projects/Chumby/tools --target=arm-elf
seiryu$ make
seiryu$ sudo make install

gcc

seiryu$ cd gcc-4.1.2
seiryu$ ln -s ../newlib-1.16.0/newlib .
seiryu$ cd ..
seiryu$ mkdir arm9_gcc
seiryu$ cd arm9_gcc
seiryu$ ../gcc-4.1.2/configure --target=arm-elf --prefix=/Users/seiryu/Projects/Chumby/tools --with-gnu-as --with-gnu-ld --with-newlib --with-headers=../newlib-1.16.0/newlib/libc/include/ --enable-languages=c,c++ --disable-ada --disable-libssp
seiryu$ make
seiryu$ sudo make install

ちょっと進んだが別のエラーが出た。

/bin/sh ../../gcc-4.1.2/gcc/../move-if-change tmp-macro_list macro_list
echo timestamp > s-macro_list
The directory that should contain system headers does not exist:
  /Users/seiryu/Projects/Chumby/tools/arm-elf/sys-include
make[2]: *** [stmp-fixinc] Error 1
make[1]: *** [all-gcc] Error 2
make: *** [all] Error 2

んが。