도와주세요!!
글 수 15,339
2002.08.02 18:23:15 (*.231.168.11)
6781
안녕하세요.
전에 다른일로 한번 방문 드렸는데...
(줄이 잘 안 맞네요..^^ 복사해서 Notepad에서 보세요)
EZBoard에 2개의 CS8900 chip를 장착했습니다.
그리고 설정을 밑에처럼 하고나서 compile하면 정상적으로 zimage가 생기고
그것을
flash에 저장했습니다.
EZboot에서 정상적으로 CS89002개를 인식합니다.(ezboot source를 수정)
-----------------------
..
..
CS8900 Init(the Second)...............
CS8900 Mac Address(the Second) : [23 A3 D3 D5 AA AA]
DectectID = [00003000]
CS8900 DECTECT VALUE : [00003000]
CS8900 INIT OK (the Second) !!!
CS8900 Init(the
First)...............
CS8900 Mac Address(the First) : [00 00 00 11 00
00]
DectectID =
[00003000]
CS8900 DECTECT VALUE :
[00003000]
CS8900 INIT OK (the
First) !!!
..
..
-----------------------
그럼 부팅시 eth0, eth1이 설정되는 것을 확인 할수 있습니다.
(MAC address는 아무 것나 주었슴)
-----------------------
..
..
eth0: cs8900 rev J Base 0xF0000300<6>, IRQ 47, MAC
00:00:00:11:00:00
eth1: cs8900 rev J Base 0xF0100300<6>, IRQ 48, MAC
23:A3:D3:D5:AA:AA
..
..
-----------------------
그런 다음 ip, gw 를
eth0에 192.168.1.118 192.168.1.1
eth1에 192.168.1.119 192.168.1.1
로 지정하였습니다.
ping를 이용하여, network상태를 확인 해보면
다른 컴퓨터에서
# ping 192.168.1.118
하면 반응이 있습니다.
# ping 192.168.1.119
하면 반응이 있습니다.
이것으로 모든것이 끝난줄 알았는데, eth1의 LAN cable를 삭제하여도
다른쪽 pc의 "ping 192.168.1.119"은 정상적으로 동작(살아 있다는 신호를 계
속보냄)을 하는 것입니다.
물론, ifconfig를 사용하여 eth1를 죽여도 "ping 192.168.1.119"는 작동합니
다.
즉 모든 packet이 eth0으로 들어갑니다. eth1를 아무일도 안하지요.
그런데 이상한것은 eth0, eth1를 따로 따로 해보면 정상 작동하는 것입니다.
(eth0올리고 test 후 삭제, eth1올리고 test후 삭제)
ifconfig를 사용하여 2개를 다 올렸을때 입니다.
------------------------------
eth0 Link encap:Ethernet HWaddr 00:00:00:11:00:00
inet addr:192.168.1.118 Bcast:192.168.1.255
Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500
Metric:1
RX packets:403 errors:1 dropped:4433 overruns:0
frame:0
TX packets:0 errors:0 dropped:0 overruns:0
carrier:0
collisions:1408
txqueuelen:100
Interrupt:47 Base
address:0x300
eth1 Link encap:Ethernet HWaddr
23:A3:D3:D5:AA:AA
inet addr:192.168.1.119 Bcast:192.168.1.255
Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500
Metric:1
RX packets:2091 errors:0 dropped:336 overruns:0
frame:0
TX packets:683 errors:0 dropped:0 overruns:0
carrier:0
collisions:0
txqueuelen:100
Interrupt:48 Base
address:0x300
lo Link encap:Local
Loopback
inet addr:127.0.0.0
Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436
Metric:1
RX packets:42 errors:0 dropped:0 overruns:0
frame:0
TX packets:42 errors:0 dropped:0 overruns:0
carrier:0
collisions:0
txqueuelen:0
--------------------------
제 생각으로는, IRQ번호만 틀리면 될것 같았는데 실제로는 그렇지 않군요.
혹시, 위쪽에 보면
Interrupt:47 Base address:0x300
라도 되어 있는 부분이 있는데, address(0x300)가 두개의 ethernet이 모두 같
습니다.
정확한 주소는 "eth0 - 0xf0000300", "eth1 - 0xf0100300"인데 위쪽의 주소를
삭제해서
그냥 두개모두의 주소를 0x300으로 인식하는게 아닐까요???
어떻게 해야 될런지...알려주세요.
=============================================
H/W적으로 다음과 같이 연결 되어 있습니다.
CS2 - CS8900 1
CS3 - CS8900 2
CS2 INTRQ0 - GPIO26
CS3 INTRQ0 - GPIO27
그리고, source를 수정했습니다.
ezboard.c
--------------------
static struct map_desc ezboard_io_desc[] __initdata = {
/* virtual physical length domain r w c b */
{ 0xe8000000, 0x00000000, 0x01000000, DOMAIN_IO, 1, 1, 0, 0 }, /*
Flash bank 0 */
{ 0xf0000000, 0x10000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /*
Crystal Chip 1 */
{ 0xf0100000, 0x18000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /*
Crystal Chip 2 */
LAST_DESC
};
---------------------
drivers/net/Makefile
---------------------
obj-$(CONFIG_EZBOARD_CS8900A) += ez89x0.o
obj-$(CONFIG_EZBOARD_CS8900A) += ez89x1.o /* 추가된 부분 */
---------------------
drivers/net/Space.c
---------------------
extern int ez89x0_probe(struct net_device *dev);
extern int ez89x1_probe(struct net_device *dev);
#ifdef CONFIG_EZBOARD_CS8900A
{ez89x0_probe, 0}, /* EZ Board CS 8900 A Ethernet Chip 1 */
{ez89x1_probe, 0}, /* EZ Board CS 8900 A Ethernet Chip 2 추
가된 부분 */
#endif
{NULL, 0},
};
---------------------
drivers/net/ez89x0.c
---------------------
112 줄 부근
static unsigned int netcard_portlist[] __initdata =
{ 0xf0000300, 0};
435 줄 부근 for()문
MacAddr[i] = readreg( dev, PP_IA+i*2 ); /* MAC Address 읽기 위해 */
441 줄 부근 for()문 밑에
dev->irq = IRQ_GPIO26;
895줄 부근
static int io=0xf0000300;
static int irq=IRQ_GPIO26;
----------------------
drivers/net/ez890x1.c
----------------------
ez89x0.c 와 같음.
단지 0xf0000300을 0xf0100300으로, IRQ_GPIO27으로 바꿈
----------------------
전에 다른일로 한번 방문 드렸는데...
(줄이 잘 안 맞네요..^^ 복사해서 Notepad에서 보세요)
EZBoard에 2개의 CS8900 chip를 장착했습니다.
그리고 설정을 밑에처럼 하고나서 compile하면 정상적으로 zimage가 생기고
그것을
flash에 저장했습니다.
EZboot에서 정상적으로 CS89002개를 인식합니다.(ezboot source를 수정)
-----------------------
..
..
CS8900 Init(the Second)...............
CS8900 Mac Address(the Second) : [23 A3 D3 D5 AA AA]
DectectID = [00003000]
CS8900 DECTECT VALUE : [00003000]
CS8900 INIT OK (the Second) !!!
CS8900 Init(the
First)...............
CS8900 Mac Address(the First) : [00 00 00 11 00
00]
DectectID =
[00003000]
CS8900 DECTECT VALUE :
[00003000]
CS8900 INIT OK (the
First) !!!
..
..
-----------------------
그럼 부팅시 eth0, eth1이 설정되는 것을 확인 할수 있습니다.
(MAC address는 아무 것나 주었슴)
-----------------------
..
..
eth0: cs8900 rev J Base 0xF0000300<6>, IRQ 47, MAC
00:00:00:11:00:00
eth1: cs8900 rev J Base 0xF0100300<6>, IRQ 48, MAC
23:A3:D3:D5:AA:AA
..
..
-----------------------
그런 다음 ip, gw 를
eth0에 192.168.1.118 192.168.1.1
eth1에 192.168.1.119 192.168.1.1
로 지정하였습니다.
ping를 이용하여, network상태를 확인 해보면
다른 컴퓨터에서
# ping 192.168.1.118
하면 반응이 있습니다.
# ping 192.168.1.119
하면 반응이 있습니다.
이것으로 모든것이 끝난줄 알았는데, eth1의 LAN cable를 삭제하여도
다른쪽 pc의 "ping 192.168.1.119"은 정상적으로 동작(살아 있다는 신호를 계
속보냄)을 하는 것입니다.
물론, ifconfig를 사용하여 eth1를 죽여도 "ping 192.168.1.119"는 작동합니
다.
즉 모든 packet이 eth0으로 들어갑니다. eth1를 아무일도 안하지요.
그런데 이상한것은 eth0, eth1를 따로 따로 해보면 정상 작동하는 것입니다.
(eth0올리고 test 후 삭제, eth1올리고 test후 삭제)
ifconfig를 사용하여 2개를 다 올렸을때 입니다.
------------------------------
eth0 Link encap:Ethernet HWaddr 00:00:00:11:00:00
inet addr:192.168.1.118 Bcast:192.168.1.255
Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500
Metric:1
RX packets:403 errors:1 dropped:4433 overruns:0
frame:0
TX packets:0 errors:0 dropped:0 overruns:0
carrier:0
collisions:1408
txqueuelen:100
Interrupt:47 Base
address:0x300
eth1 Link encap:Ethernet HWaddr
23:A3:D3:D5:AA:AA
inet addr:192.168.1.119 Bcast:192.168.1.255
Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500
Metric:1
RX packets:2091 errors:0 dropped:336 overruns:0
frame:0
TX packets:683 errors:0 dropped:0 overruns:0
carrier:0
collisions:0
txqueuelen:100
Interrupt:48 Base
address:0x300
lo Link encap:Local
Loopback
inet addr:127.0.0.0
Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436
Metric:1
RX packets:42 errors:0 dropped:0 overruns:0
frame:0
TX packets:42 errors:0 dropped:0 overruns:0
carrier:0
collisions:0
txqueuelen:0
--------------------------
제 생각으로는, IRQ번호만 틀리면 될것 같았는데 실제로는 그렇지 않군요.
혹시, 위쪽에 보면
Interrupt:47 Base address:0x300
라도 되어 있는 부분이 있는데, address(0x300)가 두개의 ethernet이 모두 같
습니다.
정확한 주소는 "eth0 - 0xf0000300", "eth1 - 0xf0100300"인데 위쪽의 주소를
삭제해서
그냥 두개모두의 주소를 0x300으로 인식하는게 아닐까요???
어떻게 해야 될런지...알려주세요.
=============================================
H/W적으로 다음과 같이 연결 되어 있습니다.
CS2 - CS8900 1
CS3 - CS8900 2
CS2 INTRQ0 - GPIO26
CS3 INTRQ0 - GPIO27
그리고, source를 수정했습니다.
ezboard.c
--------------------
static struct map_desc ezboard_io_desc[] __initdata = {
/* virtual physical length domain r w c b */
{ 0xe8000000, 0x00000000, 0x01000000, DOMAIN_IO, 1, 1, 0, 0 }, /*
Flash bank 0 */
{ 0xf0000000, 0x10000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /*
Crystal Chip 1 */
{ 0xf0100000, 0x18000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /*
Crystal Chip 2 */
LAST_DESC
};
---------------------
drivers/net/Makefile
---------------------
obj-$(CONFIG_EZBOARD_CS8900A) += ez89x0.o
obj-$(CONFIG_EZBOARD_CS8900A) += ez89x1.o /* 추가된 부분 */
---------------------
drivers/net/Space.c
---------------------
extern int ez89x0_probe(struct net_device *dev);
extern int ez89x1_probe(struct net_device *dev);
#ifdef CONFIG_EZBOARD_CS8900A
{ez89x0_probe, 0}, /* EZ Board CS 8900 A Ethernet Chip 1 */
{ez89x1_probe, 0}, /* EZ Board CS 8900 A Ethernet Chip 2 추
가된 부분 */
#endif
{NULL, 0},
};
---------------------
drivers/net/ez89x0.c
---------------------
112 줄 부근
static unsigned int netcard_portlist[] __initdata =
{ 0xf0000300, 0};
435 줄 부근 for()문
MacAddr[i] = readreg( dev, PP_IA+i*2 ); /* MAC Address 읽기 위해 */
441 줄 부근 for()문 밑에
dev->irq = IRQ_GPIO26;
895줄 부근
static int io=0xf0000300;
static int irq=IRQ_GPIO26;
----------------------
drivers/net/ez890x1.c
----------------------
ez89x0.c 와 같음.
단지 0xf0000300을 0xf0100300으로, IRQ_GPIO27으로 바꿈
----------------------