반응형

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_

,
반응형

Model: Raspberry Pi 2 Model B

OS: Raspbian Jessie (2015.09.24)

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


라즈베리파이에 USB 무선랜카드를 연결하고, 이 무선랜카드를 더 자세히 제어해야 할 필요가 생겼다. 이를 위해 무선 네트워크 디바이스 드라이버 관련 오픈소스 패키지(Backports)에서 직접 소스코드를 수정하고 빌드하기로 하였다.


*주의사항: 이 방법은 서버나 PC에서 라즈베리파이 전용 device driver를 크로스 컴파일(cross-compile)하는 방법에 비하면 결코 좋은 방법은 아니다. 원래 정석은 강력한 PC에서 소스코드를 라즈베리파이에 맞게 ARM 계열 아키텍처로 설정하고 기타 조건을 지정한 다음 디바이스 드라이버 파일들(.ko 파일들)만 라즈베리파이에 복사해서 재시작하는 방법이다. backports를 크로스 컴파일하는 방법이 잘 정리된 글을 아직 찾지 못해서 임시방편으로 이렇게 하게 되었다.



1. 사전 준비


1-1. 필요한 패키지 사전 설치


$ sudo apt-get install dkms

$ sudo apt-get install libncurses5-dev


1-2. Raspbian용 linux headers 다운로드/설치


NOTE: (2016년 1월 18일에 확인) sudo apt-get install linux-headers-rpi 명령으로는 최신 커널 버전의 헤더를 받을 수가 없다. 따라서  인터넷에서 직접 커널 헤더 설치파일을 받아서 설치하였다.


우선 현재 라즈베리파이에 설치된 Raspbian이 쓰는 커널 버전부터 확인한다.

$ uname -a

Linux raspberrypi 4.1.7-v7+ #817 SMP PREEMPT Sat Sep 19 15:32:00 BST 2015 armv7l GNU/Linux


Linux raspberrypi 뒤에 적힌 버전 숫자와 일치하는 linux headers deb파일을 아래 페이지에 가서 다운로드 받는다.

https://www.niksula.hut.fi/~mhiienka/Rpi/linux-headers-rpi/


다운로드 받은 리눅스 헤더 설치:

$ sudo dpkg -i [다운로드 받은 헤더 설치파일].deb





2. Backports 소스코드 빌드 및 설치 환경 구축


2-1. Backports 소스코드 다운로드


https://www.kernel.org/pub/linux/kernel/projects/backports/stable/



2-2. Backports 소스코드 빌드를 위한 설정


특정 무선랜 인터페이스 소스코드를 사용하기 위해 프리셋 설정에서부터 시작하는 것이 안전하다. 어떤 프리셋이 있는지 아래 명령으로 확인한다. 참고로 make가 정상적으로 작동하기 위해서는 KLIB argument에서 헤더를 정확히 지정해 주어야 한다.

$ make KLIB=/lib/modules/4.1.7-v7+/ defconfig-help


필자의 경우 TP-LINK TL-WN722N (Atheros ath9k_htc) 무선랜카드를 쓰고 있기 때문에 ath9k 프리셋을 설정하였다.

$ make KLIB=/lib/modules/4.1.7-v7+/ defconfig-ath9k


이렇게 설정파일(.config)이 만들어진 상태에서 세부 설정을 추가하고 싶으면 아래 명령을 입력한다.

$ make KLIB=/lib/modules/4.1.7-v7+/ menuconfig



(backports 패키지의 make menuconfig 예시)



Wireless LAN > Atheros WIreless Cards > Atheros ath9k_htc debugging 항목 선택

 - 이렇게 하면 ath9k_htc의 debugfs 파일들이 /sys/kernel/debug/ieee80211/phyX/ 폴더 하위에 표시된다. (phyX = phy0, phy1, ... )


(Atheros ath9k 계열의 디버깅 설정)



2-3. Backport 소스코드 빌드 및 설치


설정이 끝나면 빌드를 한다.

$ sudo make KLIB=/lib/modules/4.1.7-v7+/


NOTE: 원래 sudo 없이 빌드가 되어야 하는데, 이상하게 리눅스 헤더를 deb 파일에서 dpkg로 설치하고 나면, 해당 버전의 헤더는 루트 권한 없이는 make가 진행되지 않는 문제가 있다. 이것을 해결하려면 /lib/modules/4.1.7-v7+/ 하위 파일들의 실행 권한을 루트가 아닌 사용자에게도 허용해야 하는데, 일단은 복잡하게 변경하지 않고 sudo make로 빌드하였다. 

(이렇게 진행해도 문제가 없었다.)


참고로 라즈베리파이에서 직접 컴파일하기 때문에 시간이 오래 걸린다. 이미 앞서 언급했지만, 크로스 컴파일에 비하면 좋은 방법이 아니다. 단지 아직 확실하게 크로스 컴파일하는 방법을 몰라서 일단 되는 방법부터 시도한 것이다.


빌드가 끝나면 운영체제에 디바이스 드라이버(device driver)를 설치한다.

$ sudo make KLIB=/lib/modules/4.1.7-v7+/ install





3. 재시작 및 테스트


설치가 끝나면 재부팅해서 작동 여부를 확인한다. 쉘에서 dmesg를 쳐서 오류 메세지가 뜨는 것은 없는지 확인해볼 것.


라즈베리파이는 전력이 약하기도 하고, 내가 테스트에 사용한 TL-WN722N이 하필이면 고질적으로 USB 포트에 따라 작동을 잘 하거나 전혀 작동하지 못하는 문제가 있기 때문에 dmesg에서 문제없이 디바이스 드라이버가 로드되었는지 점검하는 것이 필요하다. 아래는 2개의 USB 무선랜카드 중 1개가 제대로 작동하지 못해서 dmesg에서 오류가 발생한 예시이다.



위와 같은 오류가 발생할 때, 현재로써는 완전한 해결책을 찾지 못했다. 그저 USB 무선랜카드를 USB 포트에서 완전히 뺐다가 다시 꽂거나, 라즈베리파이 전원을 통째로 뺐다가 꽂으면 약 50% 확률로 정상 작동하였다.



반응형
블로그 이미지

Bryan_

,
반응형

OS: Windows 7 (64-bit)


윈도우7 PC와 구글 글래스를 USB로 연결하면 처음에는 카메라의 외장 메모리처럼 인식을 한다.

구글 글래스 내부 설정에서 디버깅 옵션을 켜도 드라이버 설치를 제대로 안 하면 안드로이드 기기로 인식이 안돼서 개발한 앱을 설치하려고 해도 안드로이드 스튜디오 또는 ADT에서 인식이 안 된다.



<구글 글래스 USB 드라이버 설치 방법>

(사실 다른 안드로이드 기기에도 공통적으로 해당됨)


1. 안드로이드 스튜디오 또는 ADT 개발환경이 있다면

SDK Manager에서 "Extras > Google USB Driver"가 설치되어 있는지 확인한다. 

Not installed로 나오면 체크하고 설치한다.




2. 설치하고 나면 아래 경로에 드라이버가 받아진다.

안드로이드 스튜디오의 경우: 

  [윈도우7의 사용자 폴더]\AppData\Local\Android\sdk\extras\google\usb_driver

ADT 개발환경의 경우: 

  [adt-bundle의 폴더 위치]\sdk\extras\google\usb_driver


3. "제어판 > 시스템 > 장치 관리자" 실행. 그 다음 제대로 설치되지 않아서 노란색 느낌표가 붙은 안드로이드 기기(구글 글래스는 "Glass 1")를 오른쪽 단추로 선택하고 "드라이버 업데이트" 선택.


4. 사용자가 드라이버 위치를  지정하는 옵션으로 선택하고, SDK Manager를 통해서 받은 USB 드라이버 경로를 선택하면 새로 드라이버 설치를 진행하게 된다.



장치 관리자에서 Android Composite ADB Interface로 표시되면 정상적으로 설치된 것이다.

이제 기기를 USB에 연결한 채로 안드로이드 스튜디오 또는 ADT를 실행해서 LogCat을 확인했을 때, 로그가 잘 표시되면 정상이고, 개발한 앱을 실행할 수 있다.





반응형
블로그 이미지

Bryan_

,