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

Hiroaki TAKADA hiro @ ertl.jp
2013年 5月 29日 (水) 19:19:10 JST


星野様

この件、返答が遅くなりました。

確かに、lma2vma を作成するのは1つの解決策だと思います。

我々の方で検討した結果は、cfg1_out.c をコンパイル&リンクする時には、
標準の(つまり、LMA=VMAになっている)リンカスクリプトを用い、asp.exe
を作る際に、最終的な配置を得るリンカスクリプトを使えば、パス2でのエ
ラーは回避できます。

両者のリンカスクリプトを別にするには、Makefile の CFG1_OUT_LDFLAGS
と LDFLAGS を定義しわけることで実現できます。

この辺り、ユーザマニュアルに注意事項として盛り込みたいと思います。

高田広章
名古屋大学

(13/05/29 17:55), starfieldtrue wrote:
> 星野です。
> 
> (3)の問題:
> make dependのcfg -pass 2でエラーになる。
> 
> これはリンカスクリプトがLMA!=VMAの条件で発生すると思われますので、
> 以下のコマンド「lma2vma」を作成することで回避しました。
> 
> rx-elf-objcopy -O srec -S cfg1_out.elf cfg1_out.lma.srec
> lma2vma _idata_start _data_start _idata_end cfg1_out.syms
> cfg1_out.lma.srec cfg1_out.srec
> 
> 
> 適切に設定すれば、コンフィギュレータで対応できるのでしょうか。
> 
> 2013年5月22日 17:40 starfieldtrue <starfieldtrue @ gmail.com>:
>> 星野と申します。
>>
>> 現在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
>>
>> 以上です。