Short Break
この環境で、H8のToolchain(32bit)を使ってみました。
なんか行けそうです。
簡単にいうと
http://www.laksmido.com/dev/AKI-H8_3069F/eCos/2006062301.html
を参考にしてCygwin 64bitの環境で使用します。
https://www.cygwin.com/setup-x86_64.exe
### お世話になります。###
H8MAX download center (?http://strawberry-linux.com/h8max/download.php?)から
h8300-elf-tools.cygwin.tar.bz2をダウンロードし/srcに置く。展開して/gnutoolsに置く。
$ mkdir /src
$ cd /src
$ wget http://strawberry-linux.com/h8max/down/h8300-elf-tools.cygwin.tar.bz2
$ tar xjf h8300-elf-tools.cygwin.tar.bz2
$ mkdir /gnutools
$ cp -r /src/usr/local/* /gnutools
$ rm -fr /src/usr
### ここまで ###
です。
の様だ!
実は、御呪いがある様で、Toolchainがなんとか動作するためには、Cygwinの32bitが、Drive C上にないといけない様です。
すなわち、
C:\cygwin\gnutools\bin
C:\cygwin\opt\ecos\ecos
以上がもともとの32bitの構成
C:\cygwin64\gnutools\bin
C:\cygwin64\opt\ecos\ecos
が、64bitの構成
それぞれのディレクトリの下にH8用のToolchainが置かれているということ
それぞれのディレクトリの下にopt\ecos\ecos置かれているということです。
恐らくなんらかの理屈があってそうなっているのだと思いますが。。。
64bit環境の.bash_profileの記載は、
ECOS_REPOSITORY=/opt/ecos/ecos/packages
export PATH=/opt/ecos/ecos-3.0/tools/bin:/gnutools/bin:$PATH
としてありますが、eCosのコンフィギュレーションツールは使えない。従ってライブラリも構築出来ない状態のままです。
また、eCos3.0が世に出た当時は、Cygwinは32bitが前提になっていたので、 /cyg と /cyg64を想定していなかったことが理由かな?
私の環境の場合Tera Termは、
C:\teraterm\cygterm+-x86_64
にあるcygterm.exeを
C:\teraterm
の直下に置きました。既存のものの上書きです。
あいかわらずな感じですが。。。
user@Esprimo-9518OJB ~/ecos/embedded_proto
$ rm e_p.o
user@Esprimo-9518OJB ~/ecos/embedded_proto
$ SRCS=e_p.c DST=e_p ./build_Makefile ../httpd_kernel
user@Esprimo-9518OJB ~/ecos/embedded_proto
$ make
h8300-elf-gcc -c -finline-limit=7000 -Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -g -O2 -mh -mint32 -fsigned-char -fdata-sections -fno-exceptions -I/home/user/ecos/httpd_kernel/install/include e_p.c
In file included from e_p.c:90:
lcd_printf.h: In function `printf':
lcd_printf.h:213: warning: dereferencing type-punned pointer will break strict-aliasing rules
lcd_printf.h: In function `sprintf':
lcd_printf.h:219: warning: dereferencing type-punned pointer will break strict-aliasing rules
h8300-elf-gcc -g -nostdlib -Wl,--gc-sections -Wl,-static -mrelax -mh -mint32 -L/home/user/ecos/httpd_kernel/install/lib -Ttarget.ld e_p.o -o e_p
2 [main] h8300-elf-gcc (9368) C:\cygwin64\gnutools\bin\h8300-elf-gcc.exe: *** fatal error in forked process - couldn't allocate heap, Win32 error 487, base 0xF50000, top 0xFD0000, reserve_size 520192, allocsize 524288, page_const 4096
484 [main] h8300-elf-gcc (9368) cygwin_exception::open_stackdumpfile: Dumping stack trace to h8300-elf-gcc.exe.stackdump
0 [main] h8300-elf-gcc 1487 dofork: child -1 - forked process 9368 died unexpectedly, retry 0, exit code 0xC0000142, errno 11
user@Esprimo-9518OJB ~/ecos/embedded_proto
$ h8300-elf-objcopy -O srec e_p e_p.srec
user@Esprimo-9518OJB ~/ecos/embedded_proto
$
もちろん上記エラーメッセージ(イタリック)が出力されず、綺麗に終わる時もあります。
以上から想定されることですが、
Toolchainは、C:\cygwin64\gnutools\bin\h8300-elf-gcc.exe が参照される。
ビルドの対象となるプログラムは、C:\cygwin64\home\user に置かれているもの。
ビルドの際に必要となるeCosのコンテンツは、C:\cygwin\opt\ecos\ecos にあるもの。(Cygwin 32bit環境のもの)
例:$ SRCS=e_p.c DST=e_p ./build_Makefile ../httpd_kernel のhttpd_kernelですが、Cygwin 32bit環境に置かれたものが、参照されています。pathの指定は、
C:\cygwin64\home\user\ecos\httpd_kernel
のハズなのですが。。。不思議(迷走気味です。)
なぜそんな複雑なままにするか?ですが、64bit環境の方がeCosアプリをビルドする際の成功率が高いです。
ということで、今後はCygwin 64bitの環境で作業を進めてみます。
【参考】
https://ameblo.jp/kissam59/entry-12550736331.html
https://www.atmarkit.co.jp/ait/articles/1007/01/news131.html