::: 강좌/소스/문서 :::

강좌/소스/문서 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2004-06-27 17:41:12, Hit : 10835, Vote : 1932
 http://www.howto.pe.kr
 [강좌] 인텔 센트리노 무선랜 카드: ndiswrapper

// 제  목: 인텔 센트리노 무선랜 카드: ndiswrapper
// 작성자: 김영대( http://www.howto.pe.kr )

설치환경:
   Ferora Core (kernel 2.6.5-1.358)
   Intel PRO/Wireless 2200 BG miniPCI

참고 사이트:
  - http://www.linuxelectrons.com/article.php?story=20040507104718960&mode=print
  - http://w1n.homelinux.org
  - http://www.linux-sec.net/Wireless/Install-HOWTO/Drivers/NDISwrapper/ndiswrapper-0.7.txt
  - http://www.intuitivecreations.com/contributions/LinkSysWireless/Linksys-Wireless-Howto.php

설치할 파일 다운:
  - ndiswrapper source (ndiswrapper-0.7.tar.gz)
      http://sourceforge.net/projects/ndiswrapper
  - Windows XP 용 랜카드 드라이버
      랜카드 구입시 제공되는 CD 나 해당 사이트에서 다운받거나 또는 아래 사이트에서 다운받는다
      http://ndiswrapper.sourceforge.net/supported_chipsets.html


윈도우즈 환경에서 별 어려움없이 사용하던 무선랜 카드들이 리눅스를 만나면 곤욕을 치른다.
랜카드 제조 회사들은 랜카드를 출시하면서 윈도우즈용 드라이버는 반드시 제공하지만 리눅스는
그렇지 못한 현실이다. 본인이 일때문에 사용하게될 노트북에 Fedoira Core 를 설치하고 인텔
2200BG 를 위한 리눅스 드라이버를 찾던 중 ndiswrapper 라는것을 알게되어 소개하고자 한다.

참고로 리눅스에서 공식이든 비공식이든 무선랜 카드 드라이버를 제공하는 카드 목록은 아래
사이트에 잘 나와있다. 아무래도 Intersil(보통 Prism2/2.5/3) 기반의 무선 랜카드를 구입하는것이
좋을것으로 생각된다. 왜냐하면 만약 무선 랜 카드를 이용하여 Access Point 등을 구현할 분들은
master 모드를 드라이버가 지원해야 하는데 인터실을 지원하는 HostAP 가 master 모드를 지원한다.
아래 사이트에서 Modes 로 검색해 보면 지원하는 모드를 알 수 있다.
물론 ndiswrapper 도 master 모드를 지원하지 않는다.
  http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Linux.Wireless.drivers.html

그리고 인텔 센트리노라는 이름으로 공급되는 문서랜 카드는 2100B 와 2200BG 등이 있는데
이 둘은 인텔에서 공식적으로 리눅스용 드라이버를 제공하지 않는다. 다행히 오픈 프로젝트로
진행중인 사이트가 있어(각각 http://ipw2100.sf.net, http://ipw2200.sf.net) 방문해 보니
2100B 는 별 무리없이 사용할 드라이버와 펌웨어를 제공하고 있었다. 하지만 본인의 경우처럼
최고 54MBit/s 속도를 제공한다는 802.11G 를 사용하기 위해 2200 BG 를 구입하였으므로 IPW2200
프로젝트를 살펴보니 불행히도 2200BG는 드라이버는 개발되어 있으나 펌웨어가 없었다.

이렇게 리눅스에서 드라이버가 지원되지 않는 무선랜을 사용하는 방법으로서 대안으로 나온것이
NDIS 래퍼이다. WIndows XP 용 드라이버는 대부분 랜카드 제조회사에서 제공하므로 이를 리눅스에
올리는 기술이다. 자세한 기술적 방법은 알 수 없었지만 신기하게도 올라가기는 하였다.
이러한 철학으로 나온 것에는 대표적으로 ndiswrapper와 DriverLoader 이다.

linuxant 사의 DriverLoader( http://www.linuxant.com/driverloader ) 의 경우는 유료이며 제공하는
기능도 많았다. 기본적인 드라이버 외에 WPA 나 IEEE 802.1x supplicant 도 지원하고 있었다.

ndiswrapper ( http://ndiswrapper.sourceforge.net ) 는 오픈 프로젝트로 지원하는 랜카드 칩셋
리스트는 아래 URL에 있다.
  http://ndiswrapper.sourceforge.net/supported_chipsets.html
각자의 랜카드 칩셋을 보고 위 사이트에서 Windows XP 용 드라이버와 ndiswrapper 를 다운받으면
된다. 본인의 경우 Intel PRO/Wireless Lan 2200 BG 용 WIndows XP 드라이버를 다운받아 압축을 푼 후
리눅스로 올렸고 ndiswrapper 는 최신 버전인 0.8 을 받아 설치해 보았는데 리눅스가 다운되었다.
그래서 0.7 버전을 다운받아 설치해보니 가끔 다운되지만 0.8 처럼 심하지는 않았다.
한가지 참고로 알아두어야 할것은 ndiswrapper 드라이버를 사용하게 되면 managed 나 ad-hoc 모드는
사용 가능하나 master 모드는 지원하지 못하고 있었다. 이것은 IPW2100, IPW2200 프로젝트도
마찬가지였다.

0.설치 전 점검사항
  만약 자신의 리눅스에 PCI 랜카드를 설치했다면 이것이 시스템에 잘 인식되었는지 확인해야 한다
  컴퓨터에 설치된 PCI 카드들은 "lspci" 명령어로 확인가능하며 "lspci -v" 명령어나 "lspci -n"
  명령어로 좀더 자세한 정보를 얻을 수 있다
    [root@mydell root]# lspci
    ....
    02:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5705M Gigabit Ethernet (rev 01)
    02:01.0 CardBus bridge: Texas Instruments: Unknown device ac47 (rev 01)
    02:01.1 CardBus bridge: Texas Instruments: Unknown device ac4a (rev 01)
    02:01.2 FireWire (IEEE 1394): Texas Instruments: Unknown device 802b
    02:01.3 System peripheral: Texas Instruments: Unknown device 8204
    02:03.0 Network controller: Intel Corp. Intel(R) PRO/Wireless 2200BG (rev 05)

  위에서 "02:03.0" 은 본인의 노트북에 설치된 인텔 무선랜의 PCI ID 이다.

    [root@mydell root]# lspci -n
    ....
    02:00.0 Class 0200: 14e4:165d (rev 01)
    02:01.0 Class 0607: 104c:ac47 (rev 01)
    02:01.1 Class 0607: 104c:ac4a (rev 01)
    02:01.2 Class 0c00: 104c:802b
    02:01.3 Class 0880: 104c:8204
    02:03.0 Class 0280: 8086:4220 (rev 05)

  위에서 "02:03.0" PCI ID 에 대한 라인을 보면 "8086" 은 제조사ID를 나타내므로 여기서는 인텔을
  나타내고 "4220" 은 해당 제조사에서 만든 칩셋의 디바이스ID 를 나타낸다.
  얼마전까지 ndiswrapper 를 설치할떄 위 사항들을 알아두어야 했으나 최근 ndiswrapper 설치시에는
  스크립트가 잘되있어 이제는 알아둘 필요가 없다고 한다.

1.ndiswrapper 설치
  다운받은 ndiswrapper-0.7.tar.gz 의 압축을 풀고 생성된 디렉토리로 이동한하여 곧바로 설치한다
    [root@mydell ndiswrapper-0.7]# make install
    make -C driver install
    make[1]: Entering directory `/usr/local/src/ndiswrapper-0.7/driver'
    make -C /lib/modules/2.6.5-1.358custom/build SUBDIRS=/usr/local/src/ndiswrapper-0.7/driver DRV_VERSION=0.7 modules
    make[2]: Entering directory `/usr/src/linux-2.6.5-1.358'
      CC [M]  /usr/local/src/ndiswrapper-0.7/driver/wrapper.o
      CC [M]  /usr/local/src/ndiswrapper-0.7/driver/iw_ndis.o
      CC [M]  /usr/local/src/ndiswrapper-0.7/driver/loader.o
      CC [M]  /usr/local/src/ndiswrapper-0.7/driver/ntoskernel.o
      CC [M]  /usr/local/src/ndiswrapper-0.7/driver/ndis.o
      CC [M]  /usr/local/src/ndiswrapper-0.7/driver/misc_funcs.o
      CC [M]  /usr/local/src/ndiswrapper-0.7/driver/proc.o
      CC [M]  /usr/local/src/ndiswrapper-0.7/driver/divdi3.o
      CC [M]  /usr/local/src/ndiswrapper-0.7/driver/hal.o
      LD [M]  /usr/local/src/ndiswrapper-0.7/driver/ndiswrapper.o
      Building modules, stage 2.
      MODPOST
      CC      /usr/local/src/ndiswrapper-0.7/driver/ndiswrapper.mod.o
      LD [M]  /usr/local/src/ndiswrapper-0.7/driver/ndiswrapper.ko
    make[2]: Leaving directory `/usr/src/linux-2.6.5-1.358'
    mkdir -p /lib/modules/2.6.5-1.358custom/misc
    install -m 0644 ndiswrapper.ko /lib/modules/2.6.5-1.358custom/misc
    /sbin/depmod -a
    make[1]: Leaving directory `/usr/local/src/ndiswrapper-0.7/driver'
    make -C utils install
    make[1]: Entering directory `/usr/local/src/ndiswrapper-0.7/utils'
    cc -Wall -g   -c -o wlan_radio_averatec_5110hx.o wlan_radio_averatec_5110hx.c
    gcc -o wlan_radio_averatec_5110hx wlan_radio_averatec_5110hx.o
    cc -Wall -g   -c -o loadndisdriver.o loadndisdriver.c
    gcc -o loadndisdriver loadndisdriver.o
    install -m 755 loadndisdriver /sbin
    install -m 755 ndiswrapper /usr/sbin
    install -m 755 wlan_radio_averatec_5110hx /usr/sbin
    make[1]: Leaving directory `/usr/local/src/ndiswrapper-0.7/utils'

  위 설치 메시지중 주목할 부분은 /usr/sbin 디렉토리에 설치되는 ndiswrapper 실행파일로 이것은
  Windows XP 용 드라이버를 실제로 리눅스로 설치하거나 반대로 제거하고 그리고 정확히 설치되었는지
  확인하는 명령어로 사용된다.
  그리고 ndiswrapper 에서 제공하는 가상 드라이버는 /lib/modules/커널버전/misc 디렉토리에 설치되는
  ndiswrapper.ko 이다.

2.Windows XP 드라이버 설치
  각자 본인의 랜카드에 맞는 Windows XP 용 드라이버를 구한다. 윈도우즈에서 압축을 풀었다면 해당
  파일들을 ftp 를 이용하여 리눅스의 임의 디렉토리로 올린다.
  올린 파일들중에 확장자가 INF 인 파일이 하나 있을것이다. 이 파일을 ndiswrapper 명령어를 이용하여
  설치(-i 옵션)하고 확인(-l 옵션)해 본다. 본인의 경우는 w22n51.INF 였다.
  [root@mydell intel2200]# /usr/sbin/ndiswrapper -i W22n51.INF
  [root@mydell intel2200]# /usr/sbin/ndiswrapper -l
    Installed ndis drivers:
    w22n51  present

  이제 설치된 드라이버를 실제 로드하는 단계이다. 아래와 같이 로드한다. 로드된 모듈을 lsmod 명령어로
  확인해 보기 바란다.
    [root@mydell intel2200]# modprobe ndiswrapper
    [root@mydell intel2200]# lsmod
    Module                  Size  Used by
    ndiswrapper            58112  0
    parport_pc             19776  1
    lp                      8620  0
    ....

  또한 dmesg 명령어로 커널 메시지를 살펴보면 아래와 같은 메시지가 포함되어 있으면 정상이다.
    [root@mydell intel2200]# dmesg
    ....
    ndiswrapper version 0.7 loaded
    ndiswrapper adding w22n51.sys
    divert: allocating divert_blk for wlan0
    wlan0: ndiswrapper ethernet device 00:0e:35:11:a8:4a using driver w22n51.sys
    ....

3.wlan0 환경설정
  wireless-tools 명령어를 이용하여 무선랜 환경을 설정할 차례이다.
  만약 리눅스에 wireless-tools 이 설치되어 있지 않다면 아래 사이트에서 다운받아 설치한다.
    http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html#latest

  iwconfig 명령어를 사용하여 wlan0 NIC 를 확인한다.
    [root@mydell root]# iwconfig
    lo    no wireless extensions.
    
    eth0  no wireless extensions.
    
    wlan0 IEEE 802.11b  ESSID:""
          Mode:Managed  Access Point: FF:FF:FF:FF:FF:FF  Bit Rate:54Mb/s
          RTS thr:1600 B   Fragment thr:2304 B
          Encryption key:off
          Power Management:off
          Link Quality:0/100  Signal level:24/154  Noise level:0/154
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

  이하는 보통 무선랜 환경을 설정하는 일련의 명령어들이다.
    [root@mydell root]# iwconfig wlan0 mode Managed
    [root@mydell root]# iwlist wlan0 scannig // 현재 접속 가능한 무선랜 리스트가 나옵니다
    [root@mydell root]# iwconfig wlan0 essid "ESSID 이름"
    [root@mydell root]# iwconfig wlan0 key restricted XXXXXXXX // 만약 WEP 키를 사용할경우
    [root@mydell root]# ifconfig wlan0 up

    [root@mydell root]# ifconfig wlan0 x.x.x.x netmask m.m.m.m up // IP 수동 할당
    또는
    [root@mydell root]# dhclient wlan0 // DHCP 를 사용한 IP 자동 할당
    
    [root@mydell root]# route add default gw x.x.x.x dev wlan0

  위 설정 사항을 자동화 하려면 Fedora Core 의 경우 /etc/modprobe.conf 파일에 아래 두 줄을 추가한다.
    [root@mydell root]# vi /etc/modprobe.conf
    alias wlan0 ndiswrapper
    install ndiswrapper /sbin/modprobe --ignore-install ndiswrapper && { loadndisdriver /etc/ndiswrapper/w22n51 ; }  
  
  그리고 /etc/sysconfig/network-scripts 디렉토리에 ifcfg-wlan0 파일을 아래처럼 생성한다.
  물론 일부 환경값은 각자의 환경대로 고친다. 아래는 DHCP 환경일때 설정이다.
    [root@mydell root]# vi /etc/sysconfig/network-scripts/ifcfg-wlan0
    # Wireless NDIS Wrapper Config
    DEVICE=wlan0
    BOOTPROTO=dhcp
    HWADDR=00:0E:35:17:B4:3C
    ONBOOT=no
    TYPE=Wireless
    DHCP_HOSTNAME=cozykyd
    MODE=Managed
    ESSID='ssu'
    CHANNEL=1
    IPADDR=
    DOMAIN=
    NETMASK=
    USERCTL=no
    PEERDNS=no
    GATEWAY=
    IPV6INIT=no
    RATE=Auto

  이렇게 환경을 설정한 후 에 wlan0 을 활성화하기 위해 네트워크를 다시 시작하거나 재부팅한다.
  





  [Unix/Linux] [강좌] 인텔 센트리노 무선랜 카드: ndiswrapper  김영대 2004/06/27 10835 1932
61   [Unix/Linux] [소스] top for System V Release 4, Intel or Sparc CPU  김영대 2004/02/20 6482 1121
60   [Unix/Linux] [소스] top for SunOS 5.x (Solaris 2.x)  김영대 2004/02/20 8736 1166
59   [Unix/Linux] [소스] String 해쉬(hash) 함수  김영대 2003/07/29 6201 1383
58   [Unix/Linux] [강좌] 웹로그분석을 위한 Webalizer + GDlib + PNGlib + Zlib 설치  김영대 2003/05/04 7017 1344
57   [Unix/Linux] [강좌] Apache + MySQL + PHP4 + Zend Optimizer 설치  김영대 2003/04/15 6082 1320
56   [Unix/Linux] [System V IPC] shmop() function - 공유메모리  김영대 2003/03/17 5638 1376
55   [Unix/Linux] [System V IPC] shmctl() function - 공유메모리  김영대 2003/03/17 5657 1525
54   [Unix/Linux] [System V IPC] shmget() function - 공유메모리  김영대 2003/03/17 5996 1504
53   [Unix/Linux] [System V IPC] semop() function - 세마포어  김영대 2003/03/17 4872 1286
52   [Unix/Linux] [System V IPC] semctl() function - 세마포어  김영대 2003/03/17 4542 1253
51   [Unix/Linux] [System V IPC] semget() function - 세마포어  김영대 2003/03/17 5635 1508
50   [Unix/Linux] [System V IPC] msgget() function - 메세지큐  김영대 2003/03/17 5549 1423
49   [Unix/Linux] [System V IPC] msgctl() function - 메세지큐  김영대 2003/03/17 5634 1319
48   [Unix/Linux] [System V IPC] msgrcv() function - 메세지큐  김영대 2003/03/17 6051 1550
47   [Unix/Linux] [System V IPC] msgsnd() function - 메세지큐  김영대 2003/03/17 7393 1489
46   [Unix/Linux] [POSIX IPC] 생산자/소비자 - 세마포어  김영대 2003/03/17 7015 1452
45   [Unix/Linux] [POSIX IPC] mq_receive() function - 메세지큐  김영대 2003/03/17 6498 1589
44   [Unix/Linux] [POSIX IPC] mq_send() function - 메세지큐  김영대 2003/03/17 7622 1507
43   [Unix/Linux] [Thread] pthread_cond() function  김영대 2003/03/17 5782 1544

1 [2][3][4]
 

Copyright 1999-2017 Zeroboard / skin by zero