talk/etc..

구글 넥서스원 Wi-fi 문제 해결법

티니 2010. 7. 29. 16:32
최근 구글 넥서스원의 한국 정식 발매 이후 여러가지 단점들이 포럼과 휴대폰 관련 커뮤니티를 통해 알려졌습니다.

뭐 대표적으로는 하단의 4개의 메인 기능키가 실제 위치보다 상단에서 인식되어 불편하다는 점과

Wi-fi가 슬립모드에 진입시 데이터 송수신이 되지 않는 상황에서 3G모드 변경이 되지 않아 무선 네트워크를 이용해 작업을 하던 경우 끊겨버리게 되어 작업에 문제가 생긴다는 점이 밝혀졌습니다.

컨트리 언락폰의 문제도 있었지만 전 일단 외국에서 사용할 상황은 아닌지라.. 넘어갔군요..


이와 관련한 전문적으로 사용하시는 유저분들이 KT의 트위터에 해결해달라고 요청하신 결과 KT는 컨트리언락폰의 경우는 고객센터와 통화를 통해 해제 가능하다.

Wi-fi 이슈의 경우는 현재 해결중이니 해결이 되는 기간까지 매월 1GByte의 데이터 무료 사용량을 제공하겠다.(국내 이용자, 로밍은 제외)고 밝혔습니다.


하지만 사무실에서 무선 네트워크를 켜두고 동기화를 통해 메일 여러개를 주고받아야 되다보니 데이터사용량이 부담되는 저에겐 결국엔 문제점이 되어버렸는데요..

대부분 Wi-fi 이슈의 경우 스트리밍 사용중이신 분들이 문제를 제기하셨고, 시계나 Wifi Fixer등의 유틸리티를 이용하는 방법으로 임시적인 대책이 유저들을 통해 전해졌습니다.



문제점은 Broadcom의 무선네트워크 부분의 드라이버가 잘못된 것으로 알려졌고, 이부분에 대해 직접 수정을 해보고자 했으나 전문적인 커널쪽과 관련한 지식이 없고 root권한을 획득하는 루팅의 경우도 마찬가지로 락을 깬 언락상태로 만들어야 가능한 상황이기에 불편해도 일단 참고 사용하려고 했었습니다.


그리고 안드로이드펍에 어제(7월 28일) 언락되지 않으면서 루팅을 할 수 있는 방법에 대한 글이 올라왔습니다.
- 주소 : http://www.androidpub.com/?mid=phone_nexusone&page=4&document_srl=597487


최근 옆자리에 앉아 일하는 모토로이 사용하는 후배가 루팅을 하게 되어 그과정을 봤는데 거의 흡사하네요.

- 해외 포럼의 루팅하는 방법이 담기 주소입니다. (원출처 공개)
- 파일 다운로드는 직접 받으시는 것을 추천드립니다.
- 루팅에 대한 책임은 개인에게 있으며, 리눅스 및 윈도우의 커맨드 명령어에 대해 잘 모르시는 분들은 시도하지 않으시는 것을 추천드립니다.
- 영문으로 적인 내용을 아래에 의역으로 간단하게 적습니다.


-------
Credits:
-------
- The Android Exploid Crew:
http://c-skills.blogspot.com/2010/07...-trickery.html
- Amon_RA
- cyanogen

-------
Notes:
-------
-
Donate if I've helped you with this guide or here
- The exploit wasn't found by me (see credits), I just implemented it as a proof of concept for the Nexus One

- Basically this method should work on all currently known ROM versions.
- I tested it on EPF30, Korean FRF91, Vodafone FRF91.
- As usual when doing this kind of stuff: DO THIS AT YOUR OWN RISK.
- It could even work on other Android devices as long as their system partition is at
/dev/block/mtdblock3/ with yaffs2 file system and there is still some space left on the system partition (without any changes).

- 일반적인 롬에서도 성공했고, 한국정식 발매롬인 FRF91에서도 성공했다고 합니다. 마찬가지로 위험을 감수하고 루팅을 시도하라는 안내입니다.


-------
Prerequisites:
-------
- Locked Nexus One
- Latest Android SDK incl. USB drivers
- Working ADB
- The file "freenexus.zip"
edit:
get it here:
http://multiupload.com/MVT98F5HBY
or
http://dl.dropbox.com/u/1327667/freenexus.zip
MD5: 947C20222056D7C070733E7FCF85CF15

- 준비물은 잠겨있는(루팅이 되지 않은) 넥서스원, 최신의 안드로이드 SDK버전을 설치하고 USB드라이버를 설치한 상태의 컴퓨터
  ADB를 사용할 수 있는 환경, freenexus.zip이라고 말하는 파일이 필요합니다. 위의 링크를 통해 다운로드 받을 수 있으며 혹시나 하는 문제에 대비해 MD5를 확인할 수 있도록 값을 제공하고 있습니다.

-------
Step-by-step guide:
-------
1. install android sdk & USB drivers
- 안드로이드 소프트웨어 개발 키트와 USB 드라이버를 설치합니다.

2. extract zip file into the tools directory of SDK (i.e. \android-skd-windows\tools)
- freenexus.zip 파일을 안드로이드 SDK가 설치된 폴더의 아래에 있는 tools 폴더에 풀어줍니다.

3. open a command prompt (Windows: Start, Run, "cmd", OK; Linux: Terminal)
- 윈도우의 경우 cmd를 이용해, 리눅스의 경우는 터미널을 열어 커맨드 입력상태로 만들어 줍니다.
- 이곳 부터는 커맨드창을 이용해 입력합니다. (추가. cmd의 경우 윈도우 Vista이상에서는 관리자 권한으로 실행하셔야 됩니다.)

4. change to SDK tools directory (i.e. cd \android-skd-windows\tools)
- 커맨드 창에서 안드로이드 SDK가 설치된 폴더 밑의 tools 폴더로 옮겨줍니다.
- 예) C:\> cd android-sdk-windows\tools

5. connect Nexus to USB and check if debugging mode is activated
(Settings/Application/Development/USB Debugging)
- 넥서스원이 USB드라이버 설치를 통해 정상적으로 연결되었는지 확인하과, 디버깅모드를 활성화 시켜줍니다.
  디버깅모드는 -> 설정 -> 응용 프로그램(어플리케이션) -> 개발 -> USB 디버깅의 메뉴에 있습니다.
- 이 부분은 넥서스원에서 하는 부분입니다.

6. run "adb devices" in shell and see if there is a device lsited. if not back to step 5 or reinstall USB-drivers
- adb devices 명령을 사용해 정상적으로 넥서스원이 컴퓨터와 연결되었는지 확인합니다. 만약 연결이 되지 않았다면 5번의 과정을 다시 하여 USB드라이버를 설치합니다.
- 다시 커맨드창 입력 시작

7a. for Windows: run "freenexus.bat" in command shell (this copies the neccessary files to /data/local/tmp)
- 윈도우의 경우는 freenexus.bat파일을 실행하여 줍니다. (자동화된 명령으로 파일을 넥서스원에 넣어줍니다.)

7b. for Linux or manual installation: run the following commands
- 리눅스의 경우는 아래의 커맨드를 실수 없이 한줄씩 입력해줍니다.

adb push freenexus /data/local/tmp/freenexus
adb push Superuser.apk /data/local/tmp/Superuser.apk
adb push su /data/local/tmp/su
adb push busybox /data/local/tmp/busybox
adb shell chmod 755 /data/local/tmp/freenexus
adb shell chmod 755 /data/local/tmp/busybox

넥서스원의 루팅을 위한 파일들을 넥서스원으로 컴퓨터에서 옮겨 넣어주고, 실행권한을 줍니다.


8. run the following commands:
adb shell
(you should see a "$" prompt now)
cd /data/local/tmp

- adb shell 명령을 입력합니다. "$"이라는 프롬프트가 보입니다. cd /data/local/tmp 를 입력, 해당 디렉토리로 이동합니다.


9. on your phone go to a screen where you can easily toggle wifi (widget or settings/wireless)
- wifi를 켜달라고 하는거 같기도 한데 정확한 뜻은 모르겠습니다. 저의 경우는 3G및 Wifi를 모두 Off한 상태로 했습니다.

10. be prepared to toggle wifi immediately after you execute the next step
- 다음의 과정을 실행해 줍니다.

11. run "./freenexus"
- freenexus를 실행하여 루팅을 시작합니다.

12. toggle wifi
- 저는 입력결과 .. 퍼미션이 없다고 떴던 듯 (13번의 화면이 먼저 나왔습니다.)

13. you should see something like that:
[*] Android local root exploid (C) The Android Exploid Crew[*] Modified by ak for HTC Nexus One
[+] Using basedir=/sqlite_stmt_journals, path=/data/local/tmp/freenexus
[+] opening NETLINK_KOBJECT_UEVENT socket
[+] sending add message ...[*] Try to invoke hotplug now, clicking at the wireless[*] settings, plugin USB key etc.[*] You succeeded if you find /system/bin/rootshell.[*] GUI might hang/restart meanwhile so be patient.
- 다음과 같이 텍스트가 출력되어있고 "$" 프롬프트가 떠있을 겁니다.

14. run "rootshell"
- 그 상태에서 루트쉘을 실행합니다.

15. if you succeeded you will be asked for a password, if not try again from step 10
- 성공했다면 패스워드를 물어봅니다. 만약 해결이 되지 않았다면 10번의 과정으로 다시 돌아갑니다.

16. enter the password "freenexus"
- 패스워드 freenexus를 입력합니다.


17. now you should see a "#" as a prompt -> you are root now
- "#"이라는 프롬프트로 변경되었다면(이전에는 "$"이었잖아요?), 루팅에서 성공한 것입니다. 루트권한 획득.


18. run the following commands:
- 다음의 명령어를 입력합니다. 안드로이드의 SuperUser 어플리케이션을 설치하는 과정인 것 같습니다.

./busybox cp busybox /system/bin
chmod 4755 /system/bin/busybox
busybox cp Superuser.apk /system/app
busybox cp su /system/bin
chmod 4755 /system/bin/su

rm /system/bin/rootshell
- 저의 경우는 mv /system/bin/rootshell /system/bin/rootshell.res 라고 입력했습니다. 이게 잘한짓인지는 모르겠지만 혹시나 하는 문제를 막기 위해서 백업을 했습니다. 원래의 명령어는 rootshell 파일을 삭제하는 것이죠

exit
- "#" 프롬프트를 탈출합니다. (일반 유저모드로 "$" 프롬프트로 변경됩니다.

exit
- 윈도우나 리눅스의 원래 명령어 입력모드로 전환됩니다.

19. Check if you keep root rights:
adb shell
su
- adb shell 입력 후, su를 실행시켜줍니다. 어플리케이션을 실행합니다.

20. after you executed the su command the Superuser app on your device should ask you for allowance
- 커맨드를 입력하면 넥서스원의 화면에 SuperUser 어플리케이션을 설치할 것이냐고 물어봅니다.
- 저의 경우는 바이러스 백신이 설치되어있어, 루팅과정에서 위험하다는 경고가 떴습니다. OK를 눌렀습니다. Fix를 하게 될경우 문제가 생길 수 있습니다. (고치시면 안될듯 합니다.)
- su 프로그램이 실행되며 어플리케이션을 물어볼 것인지 뜨게 되고 allowance(수락)을 눌러줍니다.

21. you should see the "#" prompt again, if you didn't get that try su again
- 커맨드창에 # 프롬프트가 뜹니다. 정상적으로 설치가 완료 되었습니다.

22. done
- 루팅에 성공하신것을 축하드립니다.

포럼에서는 만약의 경우 돌아갈 수 있는 복원방법도 적어두었으나, 루팅하시고 원위치 하실분들은 거의 없을듯 하니.. 생략합니다.




루팅에 성공, 이제 드라이버를 교체하여 문제점을 해결할 시간입니다.

마찬가지 원본 포럼글의 주소입니다.

http://forum.xda-developers.com/showthread.php?t=735636

bcm4329.ko.zip 파일은 포럼을 통해 받으시길 권장합니다. 추후 상황에 따라 파일 첨부를 하도록 하겠습니다.


This is fixed in the latest CM6 nightly builds, but I don't think it's possible to get the .ko from that build to work on stock FRF91.
- CM6을 통해 넥서스원의 Wi-fi문제가 수정된 드라이버가 공개됐다. FRF91 (한국 정식 발매 넥서스원)에도 적용 가능하다.

I backported the fix from git (android.git.kernel.org/?p=platform/system/wlan/broadcom.git;a=commitdiff;h=5a838529e6197475cbe8f5 a4557fbd31f90586a6) to the earlier version of the driver.
- 최신 버전의 드라이버를 위의 주소를 통해 구했다.

I've been testing this for the last 30 minutes and haven't been kicked off wi-fi once after the screen went to sleep.
- 최근 30분간 슬립모드에 들어갔을때 이전과 같이 전송이 차단되던 문제점을 발견하지 못했다. (해결됐다는 의미죠)
- 저 역시 마찬가지로 문제점이 해결되었습니다.

How to install:
- 변경 방법 (루팅이 되지 않은 넥서스원에서는 불가능합니다.)
- 명령어 입력시 실수 없이 입력하셔야 합니다. 마찬가지로 리눅스의 기본명령어를 이해하시는 분이 하시는 것을 추천드립니다.
- 완료되지 않아 문제가 생겼을 경우 넥서스원 Wi-fi드라이버에 문제가 생겨 정상적 이용에 지장이 생길 수 있습니다.

Make sure you're on FRF91 and have rooted yourself
- FRF91(한국에 출시된 넥서스원의 롬)을 루팅해줍니다.

adb shell and get root via 'su'
- adb shell로 쉘을 띄우고, 루트권한을 얻기 위해 su를 입력합니다.

Copy your old driver to /data/local: cat /system/lib/modules/bcm4329.ko > /data/local/bcm4329.ko.old
 - cat명령어를 이용해서 이전 드라이버 파일을 백업합니다.

Check that the MD5 of the unzipped .ko is 959dda656228b4191f8e97b920482ae2
 - bcm4329.ko.zip 파일의 압축을 풀어주고 MD5를 확인해줍니다.

From your system, adb push the attached bcm4329.ko (unzip it first) to /data/local/bcm4329.ko.new
 - 시스템으로부터 새로운 Wi-fi드라이버를 넥서스원으로 복사합니다. (윈도우나 리눅스의 자체 커맨드 입력을 통해 복사합니다.)
 - adb push bcm4329.ko /data/local/bcm4329.ko.new (예제입니다. 아마 이렇게 하시면 되겠죠?)

adb shell and get root via 'su' again
 - adb shell을 실행하고 su를 다시 한번 사용해서 root권한으로 명령어를 입력합니다.

Copy the driver over top of the old one: cat /data/local/bcm4329.ko.new > /system/lib/modules/bcm4329.ko
 - 새로운 드라이버를 새로 덮어씌워줍니다. (기존의 wifi 이슈가 해결된 드라이버)

Reboot
- 완료가 되었으면 재부팅을 해줍니다.
 
무선네트워크에 접속이 된다면 축하합니다 성공하셨습니다.



복잡하다면 복잡한 과정을 거쳐 넥서스원의 최근 가장 큰 이슈였던 Wi-fi 접속차단 문제를 해결하게 됐습니다.

루팅이라는게 어찌 보면 보안취약점을 얻어서 최고의 실행권한을 획득하는 방법인데. 그런 방법을 통해 해결하게 된다는 것이 참 아이러니 하네요..

공식적인 업데이트가 빨리 되기를 희망합니다.


넥서스원 사용기부터 올려야 되는데 루팅하게 되는 과정 설명을 올리고 있으니 난감합니다.

 그럼 이만...


이 글은 출처만 밝히신다면 어디로 이동되어도 좋습니다.