리눅스에서 IP over 1394사용하기. (간단히 말하자면 윈도XP처럼
어디에도 없는것 같아서 만들어야겠다는 생각이 들어서 올립니다.
1. 서문
1394는 USB와는 다르게 peer to peer방식으로 동작을합니다. USB의 경우는
master와 slave가 구분되어 있어서 USB host(master)끼리는 통신을 할수 없는것 같습니다.
반면에 1394의 protocol은 마치 ethernet처럼 동작을 하는 유연한 구조를 가지고 있습니다.
간단한 예로 저의 집에는 3대의 컴퓨터가 있고 2대는 x86계열, 한대는 iBook G4입니다.
1394의 연결은 daisy chain 방식으로 각각 하나씩 연결되어 있으며 iBook은 1394 외장
DVD-R을 통하여 연결되어 있습니다.
간단히 보여드리자면
[iBook]-----[DVD-R]-----[리눅스]-----[윈도XP]
이렇게 연결되어 있죠.
이런 상황에서 DVD-R을 윈도XP에서도 사용이 가능하고 iBook은 인터넷을 할수 있습니다.
리눅스가 공유로 동작을 하고요. 이제는 본론으로 들어가죠
2. 환경
일단 페도라2를 기준으로 설명을 드리겠습니다. 꼭 페도라2 라기 보다는 리눅스 커널 2.6
을 기반으로 말씀드린다고 해야겠네요. eth1394가 2.6커널 부터 기본적으로 들어 있는듯합니다.
물론 그전의 2.4커널용 패치도 있지만, 제가 알기로는 그때의 eth1394는 1394프로토콜에
이더넷 프레임을 올려서 윈도XP(1394에 TCP/IP를 올린것)와 호환이 않되었습니다.
초기에 왜이런 차이가 생겼냐고 한다면...역시 Ethernet protocol을 올려야 할 이유가 있었기 때문이죠
현재까지도 존재하는 리눅스의 DHCP와 같은 자동IP프로토콜은 기본적으로 하부구조(Physical layer)를
ethernet만 지원하고 있습니다. 그래서 그 당시 리눅스를 사용하는 사람들은 호환성을 고려해서
1394위에 TCP/IP를 바로 넣지 않고 Ethernet을 올린것 같습니다.
이렇게 설명을 드렸으니 아직 Linux dhcp*들은 "DHCP over 1394"를 지원 하지 않는다는것을
간접적으로나마 설명을 드렸습니다. 사설은 이정도로 하고 다음으로 넘어갑시다.
3. 설치 및 설정
사실 페도라2를 기준으로 한다고는 했지만 커널 컴파일을 해야합니다. 이유는 모듈이 빠져있기 때문이겠죠?
페도라2라고 이야기한 이유는 제가 테스트를 한것이 페도라2라는것뿐입니다.
특별한 문제가 없다면 2.6커널을 사용하는 어느곳이나 가능해야겠죠.
일단 커널 설정의 1394로 가시면 eth1394을 모듈로 만드시길 바랍니다.
(자세한 설명을 안쓰는것은 귀찮기 때문이기도 하지만 이정도면 알아들으시리라 생각하기 때문입니다.)
컴파일을 하시고 새로운 커널로 부팅을 하십시오.
먼저 모듈이 정확히 컴파일 되었는지 확인을 하기 위해서 /lib/modules/2.6.x-x.xxx/kernel/drivers/ieee1394/eth1394.ko
를 insmod로 올려봅니다. 올라가지 않고 unresolved symbol이나 기타 등등 메세지가 보인다면
커널 설정에가셔서 모듈로딩하는쪽의 설정을 바꾸시기 바랍니다.
올라가는게 성공하셨다면 이제는 /etc/modprobe.conf를 설정하도록 합니다.
이쯤되면 이미 여러분들은 alias ethx eth1394라고 추가를 하고 계실지도 모르겠네요.
아마도 않될것으로 예상됩니다. 페도라2의 경우는요.
alias ethx eth1394대신 insmod를 직접 편집 하도록 합시다. 물론 insmod로는 올라간것을 확인 하셨죠?
"alias ethx eth1394"대신에 다음과 같이 넣도록 하죠
"install ethx /sbin/insmod /lib/modules/`uname -r`/kernel/drivers/ieee1394/eth1394.ko"
이렇게 하고 나서 네트웍 설정을 하시고 ifup ethx라고 해보시면 보일것입니다.
4. 한계
이미 이야기를 드렸지만 리눅스의 IP over 1394는 DHCP와 같은 프로토콜은 아직 지원 못합니다.
엄연히 말하자면 ethx로 들어가는것도 이상하네요. ^^;
5. 예제
/etc/modprobe.conf
-----------------------
alias eth0 tulip
alias eth1 e1000
# alias eth2 eth1394
install eth2 /sbin/insmod /lib/modules/`uname -r`/kernel/drivers/ieee1394/eth1394.ko
alias usb-controller uhci-hcd
alias usb-controller1 ehci-hcd
alias scsi_hostadapter ata_piix
alias char-major-195-* nvidia
install sound-slot-0 /sbin/modprobe --first-time --ignore-install sound-slot-0 && { /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || :; }
remove sound-slot-0 { /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || :; } ; /sbin/modprobe -r --first-time --ignore-remove sound-slot-0
alias snd-card-0 snd-ice1724
install snd-ice1724 /sbin/modprobe --ignore-install snd-ice1724 && /usr/sbin/alsactl restore >/dev/null 2>&1 || :
remove snd-ice1724 { /usr/sbin/alsactl store >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-ice1724
alias ieee1394-controller ohci1394
alias scsi_hostadapter1 sbp2
-----------------------
ifconfig의 내용
-----------------------
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:xxx.xxx.xxx.xxx Bcast:255.255.255.255 Mask:255.255.255.0
inet6 addr: fe80::xxxx:xxff:fexx:xxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:13980 errors:0 dropped:0 overruns:0 frame:0
TX packets:4980 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4123950 (3.9 Mb) TX bytes:403880 (394.4 Kb)
Interrupt:16 Base address:0x8000
eth1 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::xxxx:xxff:fexx:xxxx/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Base address:0x9000 Memory:f4000000-f4020000
eth2 Link encap:UNSPEC HWaddr 00-0D-61-00-00-1E-04-20-00-00-00-00-00-00-00-00
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:280 errors:0 dropped:0 overruns:0 frame:0
TX packets:237 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:22854 (22.3 Kb) TX bytes:70473 (68.8 Kb)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:4561 errors:0 dropped:0 overruns:0 frame:0
TX packets:4561 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:363708 (355.1 Kb) TX bytes:363708 (355.1 Kb)
-----------------------
아참...참고로 리눅스가 켜진 상태에서 윈도XP시스템을 켜시게 되면 윈도
아참...참고로 리눅스가 켜진 상태에서 윈도XP시스템을 켜시게 되면 윈도가 부팅 하면서 1394에 bus reset을 걸게 됩니다. 그렇게 되면 문제가 생기게 되는데...
dmesg를 보면
ieee1394: ether1394 rx: sender nodeid lookup failure: X-XX:XXXX라고 뜨게 됩니다.
이 메세지가 뜬것이 보인다면 해당 장치의 GUID를 찾아서 remove후 rescan을 해주어야합니다.
/sys/class/ieee1394_node/에 있는 GUID모두 remove 하도록 합시다.
for node in `ls /sys/class/ieee1394_node/`; do echo $node > /sys/bus/ieee1394/destroy_node; done
하고 나서 bus rescan을 해야겠죠?
echo "1" > /sys/bus/ieee1394/rescan
라고 하고 dmesg로 확인 해 보시면 잘 되는걸 확인 할수 있습니다.
이제 윈도우에서 ping을 때려 보세요~ 잘되죠?
<FONT face="Times New Roman" size=4>שלום צליכם מאת ארוננו ישוצ המשיח</FONT>
좋은 정보네요...제가 윈도우에다가 1394를 달았는데, 이것이 이더
좋은 정보네요...
제가 윈도우에다가 1394를 달았는데, 이것이 이더넷으로도 잡혀서 USB와 다르게 이런 통신으로도 사용가능할지도 모른다는 막연한 생각만 가지고 있었는데,
좋은 정보 감사합니다..
그렇다면 이더넷 속도가 1394스펙만큼 나오겠군요..
--
Linux강국 KOREA
http://ydongyol.tistory.com/
네~ 저는 초당 17MB/sec까지 나옵니다. 100Mbps ethern
네~ 저는 초당 17MB/sec까지 나옵니다. 100Mbps ethernet을 사용할때는 9MB/sec정도 나왔는데 거의 두배 나오네요.
<FONT face="Times New Roman" size=4>שלום צליכם מאת ארוננו ישוצ המשיח</FONT>
댓글 달기