반응형

Model: Raspberry Pi 2 Model B

OS: Raspbian Jessie (2015.09.24)

Kernel: 4.1.7-v7+

gcc: 4.7.3

WLAN device: Netis WF2190 (RTL8812au)


라즈베리파이에 RTL8812au를 소스코드에서 빌드하는 순서는 PC에서 하는 것과 같고, 다만 Makefile 내용만 약간 수정하면 된다. [1]



<선행 요구사항>

*리눅스 헤더 소스가 설치되어 있어야 한다.

*그외 빌드에 필요한 패키지들이 필요할 수 있다. Make 과정에서 빌드 에러가 나는 경우 해당 에러를 없애줄 관련 소스코드를 설치하는 식으로 해야 할 듯.

*라즈베리파이가 인터넷에 연결되어 있어야 한다.



<참고: 라즈베리파이 리눅스 헤더 설치>

사실 커널 버전 4.1.7-v7+ 를 apt-get install에서 설치할 수 없다. 그래서 직접 리눅스 헤더 소스를 받아서 수동 설치해야 하고, 수동으로 설치하려면 특정 버전의 gcc와 dkms가 필요하다. 현재는 gcc-4.7을 필요로 하고 이것은 apt-get install로 되길래 설치했다.


$ sudo apt-get install gcc-4.7

$ sudo apt-get install dkms

(참고로 둘다 수십 MB의 저장 공간을 필요로 한다.)


헤더 소스 설치파일은 deb 파일로 되어 있어서 dpkg로 설치한다.


$ sudo dpkg -i linux-headers-4.1.7-v7+_4.1.7-v7+-2_armhf.deb




<RTL8812AU 드라이버 설치>


PC용 설치와 마찬가지로 git에서 드라이버 소스코드를 받는다.


$ git clone https://github.com/gnab/rtl8812au.git

$ cd rtl8812au



Makefile을 열고 아래와 같이 일부분을 수정한다.


...(생략)...


CONFIG_MP_INCLUDED = n

CONFIG_POWER_SAVING = n

CONFIG_USB_AUTOSUSPEND = n

CONFIG_HW_PWRP_DETECTION = n

CONFIG_WIFI_TEST = n

CONFIG_BT_COEXIST = n

CONFIG_RTL8192CU_REDEFINE_1X1 = n

CONFIG_INTEL_WIDI = n

CONFIG_WAPI_SUPPORT = n

CONFIG_EFUSE_CONFIG_FILE = n

CONFIG_EXT_CLK = n

CONFIG_FTP_PROTECT = n

CONFIG_WOWLAN = n


...(중략)...


CONFIG_PLATFORM_I386_PC = n

CONFIG_PLATFORM_ANDROID_X86 = n

CONFIG_PLATFORM_JB_X86 = n

CONFIG_PLATFORM_ARM_S3C2K4 = n

CONFIG_PLATFORM_ARM_PXA2XX = n

CONFIG_PLATFORM_ARM_S3C6K4 = n

CONFIG_PLATFORM_ARM_RPI = y

CONFIG_PLATFORM_MIPS_RMI = n


...(생략)...


이어서 빌드 및 설치 과정을 진행하면 된다.

$ make
$ sudo make install
$ sudo mobprobe 8812au





<참고자료>

[1] https://www.raspberrypi.org/forums/viewtopic.php?p=706261



반응형
블로그 이미지

Bryan_

,
반응형

OS: Raspbian Jessie

HW: Raspberry Pi 2 Model B

NIC: TP-LINK TL-WN722N (Atheros ath9k_htc)



라즈베리파이에 USB 무선랜 카드를 2개를 동시에 꽂아서 쓰면서, 편의를 위해서 각 인터페이스 이름(wlan0, wlan1, ...)에 네트워크 설정을 강제로 지정해 두었다. 예를 들어, wlan0은 hostapd를 돌려서 항상 AP가 되도록 하고, wlan1은 ad-hoc 모드로 다른 라즈베리파이와 네트워크를 구축하도록 하였다.



<문제 상황>


그런데 재부팅하고 나면 거의 매번 인터페이스 이름에 실제로 매핑되는 USB 무선랜카드가 달라지는 현상이 있었다. 인터페이스 이름에 할당되는 무선랜카드의 맥주소(물리적 주소, MAC address, HW address)가 재부팅할 때마다 랜덤하게 배정되는 것이다. 즉, ifconfig로 인터페이스 정보를 볼 때, 아래와 같은 출력 결과에서 HWaddr 영역이 서로 뒤바뀌는 일이 비일비재하게 나타났다.


wlan0     Link encap:Ethernet  HWaddr a0:f3:c1:2b:85:7b  

          inet addr:10.0.4.1  Bcast:10.0.4.255  Mask:255.255.255.0

          inet6 addr: fe80::a2f3:c1ff:fe2b:857b/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:1301 errors:0 dropped:0 overruns:0 frame:0

          TX packets:1379 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:230487 (225.0 KiB)  TX bytes:539231 (526.5 KiB)


wlan1     Link encap:Ethernet  HWaddr a0:f3:c1:2a:ca:04  

          inet addr:192.168.3.4  Bcast:192.168.3.255  Mask:255.255.255.0

          inet6 addr: fe80::a2f3:c1ff:fe2a:ca04/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:89 errors:0 dropped:0 overruns:0 frame:0

          TX packets:122 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:10699 (10.4 KiB)  TX bytes:14048 (13.7 KiB)

(라즈베리파이 기본 설정에서는 NIC가 여러 개일 경우, 

부팅할 때마다 빨간색 표시한 HWaddr 부분이 랜덤으로 계속 바뀐다.)



일반적인 상황에서는 별 문제가 아닐 수도 있겠지만, 내 경우에는 이렇게 맥주소가 뒤바뀌는 현상 때문에 애드혹 네트워크(ad-hoc network)를 구성할 때마다 여간 불편한 일이 아닐 수가 없었다. 애드혹 네트워크 설정을 /etc/network/interfaces 파일에 해 두더라도, 실제로 통신이 가능해지기 위해서는 서로 ping을 주고받는 과정과 어느정도의 시간을 거쳐서 각자 ARP 테이블을 구성해야만 한다.


pi@raspberrypi ~ $ arp -n

Address                  HWtype  HWaddress           Flags Mask            Iface

192.168.3.5              ether   a0:f3:c1:2b:85:e7   CM                    wlan1

192.168.5.1              ether   10:6f:3f:e7:e8:3e   C                     eth0

192.168.3.6              ether   a0:f3:c1:2a:ca:3b   CM                    wlan1

192.168.3.7              ether   00:26:66:4c:1c:1d   CM                    wlan1

(ARP 테이블 예시)


만약 모든 라즈베리파이의 wlan1 인터페이스를 애드혹 네트워크로만 쓰기로 하고, 각 wlan1 인터페이스의 맥 주소와 고정IP 주소를 가지고 수동으로 ARP 테이블에 등록하는 스크립트를 만들어서 부팅 때마다 자동으로 실행되게 한다면, 불편하게 ping을 여러 차례 날릴 필요 없이 애드혹 네트워크를 바로 사용할 수 있게 된다. 하지만 맥주소가 부팅할 때마다 뒤바뀌면 ARP 테이블을 수동으로 추가하더라도 엉뚱한 맥주소가 등록됨으로 인해서 통신을 할 수가 없다.




<해결 방법>


udev에 network rule을 추가하면 된다. [1]

참고로 우분투 데스크탑에는 기본으로 맥주소와 인터페이스 이름을 고정해서 기억하게 되어 있다.

아래와 같은 문법으로 파일을 수정하거나, 없으면 파일을 만들어서 추가한다.


#파일명: /etc/udev/rules.d/10-network.rules


SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="wlan0"

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="ff:ee:dd:cc:bb:aa", NAME="wlan1


ATTR{address} 부분에 랜카드의 맥주소, NAME 부분에 강제 지정할 인터페이스 이름을 입력한다.




<참고자료>


[1] https://wiki.archlinux.org/index.php/Network_configuration#Device_names



반응형
블로그 이미지

Bryan_

,
반응형

Target: Raspberry Pi 2, Type B

OS: OpenWRT 15.05 Chaos Calmer


라즈베리파이에 OpenWRT 이미지가 flash된 SD카드를 넣고 맨 처음 부팅을 하면, 네트워크와 관련해서 두 가지 문제점이 있다. 첫번째는 유선랜(Ethernet)이 DHCP client가 작동하지 않아서 랜선을 공유기에 꽂아도 IP주소를 받지 않는 것이고, 두번째는 USB 무선랜 카드(wireless interface card)를 꽂아도 (device driver가 있다는 가정 하에) 인식은 되지만 네트워크 설정이 없는 것이다.


첫번째 유선랜 문제는 OpenWRT 공식 사이트에 있는 라즈베리파이 설명 페이지의 맨 아래쪽 "How to connect via Ethernet"을 참고하면 된다 [1]. 랜선으로 연결이 안되므로 직접 HDMI 케이블과 모니터, USB 키보드를 사용하거나, Serial 케이블 등을 이용해야 한다.


두번째 문제는 /etc/config/wireless 파일이 아예 없어서 어떻게 세팅해야 될 지 모르는 상황에 대한 것이다.

해당 파일이 없으면 심지어 LuCI 웹페이지에서도 "Network > Wifi" 메뉴가 보이지 않아서 설정이 불가능하다.

이와 같이 USB 무선랜카드는 인식이 되지만(dmesg, iw list 등을 실행해 보면 알 수 있다) 설정을 못하겠는 경우에는 아래와 같은 명령으로 wireless 설정 파일을 만들어 주면 된다 [2].


# wifi detect > /etc/config/wireless



<참고자료>

[1] http://wiki.openwrt.org/toh/raspberry_pi_foundation/raspberry_pi#how_to_connect_via_ethernet

[2] https://forum.openwrt.org/viewtopic.php?id=24079



반응형
블로그 이미지

Bryan_

,