(toppers-users 4085) Re: TOPPERS/ASP RX62N Configuration

Hiroaki TAKADA hiro @ ertl.jp
2013年 5月 24日 (金) 11:00:33 JST


星野様

お送りしたコードで動作したということで了解です。報告ありがとうございま
した。

ご指摘の通り、シンボル名がターゲット依存なので、あのまま kernel_chk.tf
に入れるわけにはいきません。kernel_chk.tf には、汎用的なコードを入れて、
シンボル名は target_chk.tf で定義してもらう対応をしたいと思います。

ちなみに、HRP2 の kernel/kernel_mem.tf にはすでにこのような対応を入れて
ありますので、それを ASP にバックポーティングする形になります。

高田広章
名古屋大学

(13/05/23 18:13), starfieldtrue wrote:
> 高田先生
> 
> ありがとうございました。(2)についてはご指摘の実装でエラーは無くなりました。
> 未だ動作確認はしていませんが。
> SYMBOL名がターゲット依存なので、標準のコードとして実装するのは難しそうですねぇ。
> SYMBOL名を固定化すればなんとかなるのか。
> 
> 2013年5月23日 11:20 Hiroaki TAKADA <hiro @ ertl.jp>:
>> 星野様
>>
>> メールを読ませていただいて、すぐにわかることをお知らせします。
>>
>> (2)ですが、ASPカーネルでは、cfg のパス3はエラーチェックのためのパ
>> スですので、省いても動作するはずです。パス2で生成されたバイナリで、
>> プログラムの動作確認されると良いと思います。
>>
>> その上で、(2)のエラーですが、おそらく、定数データの配置場所が変わっ
>> たことにより、cfg が定数データを取り出せなくなっているのが原因だと
>> 思われます。target_chk.tf の先頭に、データセクションをLMAからVMAに
>> コピーするコードを入れると、解決すると思われます。具体的には、
>>
>> $
>> $  データセクションのLMAからVMAへのコピー
>> $
>> $start_data = SYMBOL("__data_start")$
>> $end_data = SYMBOL("__data_end")$
>> $start_idata = SYMBOL("__idata_start")$
>> $BCOPY(start_idata, start_data, end_data - start_data)$
>>
>> を入れれば良いと思うのですが、やってみたわけではないので、確信はあ
>> りません。
>>
>> もしこれが原因であれば、ASPカーネルの次のリリースで上のコードを
>> kernel_chk.tf に入れるなどの対策を取りたいと思います。
>>
>> (4)は
>>
>>> /usr/local/rx-elf/lib/gcc/rx-elf/4.7.1/../../../../rx-elf/bin/ld:
>>> tinet_cfg1_out.elf: Not enough room for program headers, try linking
>>> with -N
>>
>> というエラーになっていますので、メモリ配置が重なっているように思いま
>> す。
>>
>> (3)の原因はすぐにはわからないです。
>>
>> 高田広章
>> 名古屋大学
>>
>> (13/05/22 17:40), starfieldtrue wrote:
>>> 星野と申します。
>>>
>>> 現在RX62N+TOPPERS/ASP+TINETで実験しています。
>>> TOPPERS動作中にCPU内蔵FLASHへの書き込みをしたいので
>>> sta_ker以後は全て内蔵RAM上で動作させたいと思っています。
>>> 内蔵FLASH書き込み中には、それ以外の内蔵FLASHへのアクセスは
>>> 許容されないため、割り込みが発生しても
>>> FLASHへのアクセスを避けたいのです。
>>>
>>> そこで、リンカスクリプトの記載を変えて試しているのですが、
>>> 思うようにいきません。もし何かご存知の方がいましたら
>>> アドバイスを頂けると嬉しいです。
>>>
>>> 4タイプの状況を下記に記載します。
>>> (1)はmake depend; makeは通るが、定数セクション(C)が
>>> FLASH上に配置されるので上記の要望を満たせない。
>>> (2)はmake dependは通るがmakeのcfg -pass 3でエラーになる。
>>> (3)はmake dependのcfg -pass 2でエラーになる。
>>> (4)はmake dependでリンクエラーになる。
>>>
>>> 以下リンカスクリプトについて
>>> (1),(2),(3),(4)で差異の部分だけ抜粋してあります。
>>>
>>> (1)
>>> MEMORY {
>>> ram(rwx) : o = 0x00000000, l = 0x00019000
>>> }
>>> SECTIONS {
>>> .text :
>>> {
>>> *(.start1) ... start.Sのコードを配置
>>> *(.start2) ... hardware_init_hookのコードを配置
>>> *(C) ... 定数データを配置(RX特有のセクション?)
>>> } >rom
>>>
>>> (2)
>>> MEMORY {
>>> ram(rwx) : o = 0x00001054, l = 0x00019000
>>> ... RAM開始アドレスがこれ以上ならば同じ状況になる。
>>> }
>>> SECTIONS {
>>> .text :
>>> {
>>> *(.start1)
>>> *(.start2)
>>> } >rom
>>> __idata_start = . ;
>>> .data   :  AT(__idata_start)
>>> {
>>> __data_start = . ;
>>> *(C) ... 定数データをRAMに配置するために
>>> }
>>>
>>> (3)
>>> MEMORY {
>>> ram(rwx) : o = 0x00001050, l = 0x00019000
>>> }
>>> SECTIONS {
>>> .text :
>>> {
>>> *(.start1)
>>> *(.start2)
>>> } >rom
>>> __idata_start = . ;
>>> .data   :  AT(__idata_start)
>>> {
>>> __data_start = . ;
>>> *(C) ... 定数データをRAMに配置するために
>>> }
>>>
>>> (4)
>>> MEMORY {
>>> ram(rwx) : o = 0x00000000, l = 0x00019000
>>> }
>>> SECTIONS {
>>> .text :
>>> {
>>> *(.start1)
>>> *(.start2)
>>> } >rom
>>> __idata_start = . ;
>>> .data   :  AT(__idata_start)
>>> {
>>> __data_start = . ;
>>> *(C) ... 定数データをRAMに配置するために
>>> }
>>>
>>> (2)の結果 make dependは通るがmakeのcfg -pass 3でエラーになる。
>>>
>>> rx-elf-gcc  -falign-functions=2 -Wall -g -O2 -mlittle-endian-data
>>> -mcpu=RX600 -Wall -g -O2  -DROM_BOOT -DTOPPERS_LABEL_ASM
>>> -DTARGET_KERNEL_ASP -DSUPPORT_INET4 -DSUPPORT_ETHER -DSUPPORT_TCP
>>> -DTCP_CFG_LIBRARY -DUDP_CFG_LIBRARY -I. -I../include -I../arch -I..
>>> -I../target/aprx62n_gcc -I../tinet/netdev/if_rxe -I../tinet -nostdlib
>>> -nostdlib  -Wl,-Map=asp.map -Wl,-EL -T ../arch/rx600_gcc/release.ld -o
>>> asp.elf  \
>>>                    echos4.o    kernel_cfg_asm.o  target_serial.o
>>> rx600_uart.o   net_buf.o net_count.o net_subr.o net_timer.o  in_subr.o
>>> tinet_cfg.o route_cfg.o  ip_input.o ip_output.o ip_icmp.o
>>> tinet_target_config.o if.o ethernet.o if_ether.o if_rxe.o phy.o
>>> tcp_input.o tcp_output.o tcp_timer.o  tcp_subr.o tcp_subr_cs.o
>>> tcp_subr_ncs.o  banner.o syslog.o serial.o logtask.o  log_output.o
>>> vasyslog.o t_perror.o strerror.o   kernel_cfg.o    libtinet.a -lc
>>> libkernel.a   -lgcc
>>> rx-elf-nm -C asp.elf > asp.syms
>>> rx-elf-objcopy -O srec -S asp.elf asp.srec
>>> ../cfg/cfg/cfg --pass 3 --kernel asp -I. -I../include -I../arch -I..
>>> -I../target/aprx62n_gcc -I../tinet/netdev/if_rxe -I../tinet \
>>>                           --rom-image asp.srec --symbol-table asp.syms \
>>>                           -T ../target/aprx62n_gcc/target_check.tf
>>> --api-table ../kernel/kernel_api.csv  --cfg1-def-table
>>> ../kernel/kernel_def.csv  --cfg1-def-table
>>> ../arch/rx600_gcc/prc_def.csv echos4.cfg
>>> cfg: S-record data error
>>> Makefile:322: recipe for target `asp.elf' failed
>>> make: *** [asp.elf] Error 1
>>>
>>> (3)の結果 make dependのcfg -pass 2でエラーになる。
>>> rx-elf-gcc  -falign-functions=2 -Wall -g -O2 -mlittle-endian-data
>>> -mcpu=RX600 -Wall -g -O2  -DROM_BOOT -DTOPPERS_LABEL_ASM
>>> -DTARGET_KERNEL_ASP -DSUPPORT_INET4 -DSUPPORT_ETHER -DSUPPORT_TCP
>>> -DTCP_CFG_LIBRARY -DUDP_CFG_LIBRARY -I. -I../include -I../arch -I..
>>> -I../target/aprx62n_gcc -I../tinet/netdev/if_rxe -I../tinet -nostdlib
>>> -nostdlib  -Wl,-Map=asp.map -Wl,-EL -T ../arch/rx600_gcc/release.ld
>>> -o tinet_cfg1_out.elf \
>>>                                            tinet_cfg1_out.o
>>> rx-elf-nm -C tinet_cfg1_out.elf > tinet_cfg1_out.syms
>>> rx-elf-objcopy -O srec -S tinet_cfg1_out.elf tinet_cfg1_out.srec
>>> ../cfg/cfg/cfg --pass 2 --kernel asp --cfg1_out tinet_cfg1_out -I.
>>> -I../include -I../arch -I..  -I../target/aprx62n_gcc
>>> -I../tinet/netdev/if_rxe -I../tinet \
>>>                           -T ../tinet/tinet.tf --api-table
>>> ../tinet/tcpip_api.csv  --cfg1-def-table ../kernel/kernel_def.csv
>>> tinet_echos4.cfg
>>> cfg: error: magic number is not found in `tinet_cfg1_out.srec/.syms'
>>> cfg: fatal error
>>> ../tinet/Makefile.tinet:359: recipe for target `tinet_cfg.c' failed
>>> make: *** [tinet_cfg.c] Error 1
>>>
>>> (4)の結果 make dependでリンクエラーになる。
>>> rx-elf-gcc  -falign-functions=2 -Wall -g -O2 -mlittle-endian-data
>>> -mcpu=RX600 -Wall -g -O2  -DROM_BOOT -DTOPPERS_LABEL_ASM
>>> -DTARGET_KERNEL_ASP -DSUPPORT_INET4 -DSUPPORT_ETHER -DSUPPORT_TCP
>>> -DTCP_CFG_LIBRARY -DUDP_CFG_LIBRARY -I. -I../include -I../arch -I..
>>> -I../target/aprx62n_gcc -I../tinet/netdev/if_rxe -I../tinet -nostdlib
>>> -nostdlib  -Wl,-Map=asp.map -Wl,-EL -T ../arch/rx600_gcc/release.ld
>>> -o tinet_cfg1_out.elf \
>>>                                            tinet_cfg1_out.o
>>> /usr/local/rx-elf/lib/gcc/rx-elf/4.7.1/../../../../rx-elf/bin/ld:
>>> tinet_cfg1_out.elf: Not enough room for program headers, try linking
>>> with -N
>>> /usr/local/rx-elf/lib/gcc/rx-elf/4.7.1/../../../../rx-elf/bin/ld:
>>> final link failed: Bad value
>>> collect2: error: ld returned 1 exit status
>>> ../tinet/Makefile.tinet:359: recipe for target `tinet_cfg.c' failed
>>> make: *** [tinet_cfg.c] Error 1
>>>
>>>
>>> 環境は以下です。
>>> cygwin 1.7.17-1
>>> rx-elf-gcc (GCC) 4.7.1
>>>
>>> PACKAGE asp
>>> VERSION 1.7.0
>>>
>>> PACKAGE cfg
>>> VERSION 1.6.0
>>>
>>> 以上です。
>>>