090913

|



凄いの借りてきました。SH7785のルネサス純正評価基板。CQのSH3の評価キット
は買ったことがあったけれど、ガチの評価基板は初めてだ。

コンソールはCP2102のシリアル-USB変換。これは、ロガーで使っている LPC2388基板と同じだ。
そしてロムにはブートローダとしてu-bootが乗っている。書き替えも可能だけ れど、それにはJTAG(H-UDI)が必要。今はこういう時代なのね。
u-bootは、イーサネットからbootp/tftp,NFS、USBメモリからのロードとガッチ リ作ってあって至れり尽せり。


まずはオンボードのLEDを点灯してみました。
[DHCPDの設定]dhcpd.conf

allow bootp;
allow booting;

host athena {
        hardware ethernet 00:00:87:6b:bd:6b;
        fixed-address 192.168.33.12;
	option host-name "athena";
        next-server 192.168.33.2;	/* tftpサーバは別なのでそこを設定*/
	filename "sh7785.img";	/* tftpdのルートからの相対パスで設定する */
}

[TFTPDの設定]inetd.conf

tftp		dgram	udp	wait	root	/usr/libexec/tftpd	tftpd -l -s /tftpboot

/tftpboot/sh7785.imgにはメモリにロードされるイメージそのものを置く。

[テストプログラム]
ユーザ開放LEDの三つめを点灯します。

	.align	2
	.section .text
	.globl	start
start:
1:	mov.l	.L_led, r0
	mov	#0x4,	r1
	mov.l	r1,	@r0
	bra	1b
	 nop
	.align	2
.L_led:
	.long	0xa4000008
	// 
	/* NOTREACHED */

[リンカスクリプト]
デフォルトで0x09000000にロードされるので、アンキャシュドで0xa9000000で
動くように設定。

OUTPUT_FORMAT("elf32-shl")
OUTPUT_ARCH(sh)

MEMORY
{
	ram : o = 0xa9000000, l = 0x1000
}

SECTIONS
{
	 _stack_start = 0xa9001000;

	.text :
	{
		*(.text)
		 *(.rodata*)
		 . = ALIGN (4);
	} > ram

	.data :
	{
		*(.data)
		 . = ALIGN (4);
	} > ram

	.bss :
	{
		 _bss_start = . ;
		*(.bss)
	} > ram
	_bss_end = .;
}



[コンパイル]
/usr/home/uch/os/w/tools/bin/sh-elf-gcc  -ml -m4a  -Wall -Werror -Wp,-MD,.deps/entry.P -c -o entry.o entry.S
/usr/home/uch/os/w/tools/bin/sh-elf-ld -T ../../ldscripts/test.ram -o test.elf  entry.o
/usr/home/uch/os/w/tools/bin/sh-elf-objdump -x test.elf

test.elf:     ?????? elf32-shl
test.elf
???????: sh, ??? 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
?????? 0xa9000000

????????:
    LOAD off    0x00000080 vaddr 0xa9000000 paddr 0xa9000000 align 2**7
         filesz 0x00000010 memsz 0x00000010 flags r-x

?????:
???          ???      VMA       LMA       File off  Algn
  0 .text         00000010  a9000000  a9000000  00000080  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
SYMBOL TABLE:
a9000000 l    d  .text	00000000 .text
a9000010 g       .text	00000000 _bss_start
a9000010 g       *ABS*	00000000 _bss_end
a9001000 g       *ABS*	00000000 _stack_start
a9000000 g       .text	00000000 start


/usr/home/uch/os/w/tools/bin/sh-elf-objdump -D test.elf

test.elf:     ?????? elf32-shl

????? .text ???????:

a9000000 :
a9000000:	02 d0       	mov.l	a900000c ,r0	! a4000008
a9000002:	04 e1       	mov	#4,r1
a9000004:	12 20       	mov.l	r1,@r0
a9000006:	fb af       	bra	a9000000 
a9000008:	09 00       	nop	
a900000a:	09 00       	nop	
a900000c:	08 00       	clrt	
a900000e:	00 a4       	bra	a9000812 <_bss_end+0x802>
/usr/home/uch/os/w/tools/bin/sh-elf-objcopy -I elf32-shl -O binary test.elf test.bin
cp test.bin /tftpboot/sh7785.img

[ターゲットで実行]
U-Boot 2008.10-rc2-00002-g87b4ef5-dirty (Sep 18 2008 - 15:01:39)

CPU: SH4
BOARD: Renesas Technology Corp. R0P7785LC0011RL
DRAM:  128MB
FLASH: 64MB
*** Warning - bad CRC, using default environment

PCI: SH7780 PCI host bridge found.
PCI:   Bus Dev VenId DevId Class Int
        00  00  10ec  8169  0200  00
        00  01  1095  3512  0180  00
In:    serial
Out:   serial
Err:   serial
Net:   RTL8169#0
=> bootp
BOOTP broadcast 1
Using RTL8169#0 device
TFTP from server 192.168.33.2; our IP address is 192.168.33.12
Filename 'sh7785.img'.
Load address: 0x9000000
Loading: #
done
Bytes transferred = 16 (10 hex)
=> md 0xa9000000  ちゃんとイメージが場所にあるかどうか確認。
a9000000: e104d002 affb2012 00090009 a4000008    ..... ..........
a9000010: 00000000 00000000 00000000 00000000    ................
a9000020: 00000000 00000000 00000000 00000000    ................
a9000030: 00000000 00000000 00000000 00000000    ................
a9000040: 00000000 00000000 00000000 00000000    ................
a9000050: 00000000 00000000 00000000 00000000    ................
a9000060: 00000000 00000000 00000000 00000000    ................
a9000070: 00000000 00000000 00000000 00000000    ................
a9000080: 00000000 00000000 00000000 00000000    ................
a9000090: 00000000 00000000 00000000 00000000    ................
a90000a0: 00000000 00000000 00000000 00000000    ................
a90000b0: 00000000 00000000 00000000 00000000    ................
a90000c0: 00000000 00000000 00000000 00000000    ................
a90000d0: 00000000 00000000 00000000 00000000    ................
a90000e0: 00000000 00000000 00000000 00000000    ................
a90000f0: 00000000 00000000 00000000 00000000    ................
=> go 0xa9000000
## Starting application at 0xA9000000 ...

ここでLEDが点灯して成功。