ARMのgcc環境を構築する5
cygwinでgcc環境を構築する
数年ぶりにcygwin使う。
あれ? cygwinにperl入っていないやん。ってことで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/
でMacOSX、Cygwin、Linuxのgcc等が公開されているのでこれをインストールしてみる。
# 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環境をコンパイルしてみる。
ARMのgcc環境を構築する3
まぁ、最悪gccコンパイルがうまくいかなくても、
http://www.gnuarm.com/
からダウンロードするという手がある。
TOPPERS/ASPもここのツールチェーン使っているみたいだし。
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
んが。