레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시

2018년 11월 14일 수요일

부트로고와 애니메이션을 바꾸고 싶다.

 부트로고와 애니메이션을 수정하는 과정중에 알게된 내용을 정리하는 포스트이다. 나중에 분명 까먹기 때문에 다시 보면서 기억을 하기 위한 목적과 혹시라도 검색을 통해 찾아올 소수의 사람들을 위한 참고 자료이다.




 OEM Unlock을 했더니 폰을 리부트하면 이렇게 된다. 엄청 작게 뭔가 텍스트가 써 있는데 확대해서 보면 '당신의 장치는 언락되서 신뢰할 수 없으며 5초 후에 부팅한다'는 것이다.

Orange State
Your Device has been unlocked and con't be trusted
Your Device will boot in 5 second

 Oukitel 로고는 아무래도 상관없고 단지 하얀 화면에 저런 까만색 텍스트가 나오는게 마음에 안들었다. #ffffff의 하얀색인것 같으니 색상 반전만 시켜서 넣어주면 되겠다 싶었다.

 검색해보니 'LogoBuilder'라는 프로그램이 있다고 한다. 말 그대로 로고를 만드는 프로그램이다. 이것도 러시아 사람이 만들었나 보다. 어쨌든 편집을 하려면 logo.bin 파일을 구해야 한다. 이 파일은 펌웨어에서 추출하거나 현재 장치에서 가져올 수 있다. 나는 후자의 방법으로 하기로 했다.

dd if=/dev/logo of=/sdcard/logo.bin bs=3145728 count=1
 검색을 해보니 이런 명령을 쓰라고 한다. dd 명령이 뭐에 쓰는지는 모르겠지만 of= 부분에 있는 경로가 파일을 어디에 저장할지 지정하는 것이란걸 알 수 있다.

 sdcard의 경로는 기기마다 다를 수 있다. 내 경우에는 현재 [ /storage/E6AD-A5DF ]라는 이름으로 되어 있는데 이거는 펌웨어를 플래시 할때마다 달라지는것 같다. 타이핑 하기 어려운 관계로 심볼릭 링크를 만들면 과정을 좀 편하게 진행할 수 있다.

ln -s /storage/E6AD-A5DF extsd
 이렇게 하면 심볼릭 링크가 만들어져야 하지만 루트가 읽기 전용 상태라 만들 수 없다는 메시지가 나온다. 아무튼 이 문제를 해결하려면 mount 명령어를 사용하면 된다.

mount -o rw,remount /
 이렇게하면 루트에 extsd라는 이름의 심볼릭링크를 만들 수 있다.

dd if=/dev/logo of=/extsd/logo.bin bs=3145728 count=1
 뭔지 모를 이 dd 명령을 입력하면 다음과 같은 결과를 출력한다.

1+0 records in
1+0 records out
3145728 bytes transferred in 0.059 secs (53317423 bytes/sec)
 extsd를 확인해 봤더니 확실히 logo.bin 파일이 생겼다. 이제 파일을 데스크탑으로 가져오기 위해 exit로 나가거나 새로운 명령 프롬프트를 열어서 파일을 가져온다. 아니면 이미 케이블이 연결되어 있으니 mtp 연결로 바꾼 후 윈도우의 탐색기로 복사해도 된다.


Logo Builder에서 Oukitel Logo.bin을 불러온 모습
1번과 39번은 흰색이었는데 색반전시켜서 검은색으로 만들었다.
adb pull /extsd/logo.bin .
 가져온 파일을 로고빌더 프로그램으로 열면 logo.bin 파일을 풀어서 지정한 폴더에 저장해 준다. 보아하니 img1.png 39번 파일을 편집하면 될 것 같아서 적당한 그림 편집 프로그램을 이용하여 색 반전 시켜줬다. 그 후 make 버튼을 눌러주면 update.zip 파일과 logo.bin 파일을 만들어 준다. 적용하려면 두가지 방법이 있는데 하나는 zip 파일을 리커버리에서 플래시 하는것이고 하나는 bin 파일을 fastboot에서 플래시 하는 것이다. 내 경우는 fastboot가 편하다.

fastboot flash logo logo.bin
 여담이지만 dd 명령에서 바로 /dev/logo 파일을 가져오면 되지 않을까 싶어서 ls 명령으로 보니까 이런 심볼릭 링크가 연속으로 연결된 형태로 되어 있다. - 사실 이게 심볼릭 링크인지 뭔지 나도 잘 모른다. 리눅스 넘나 어려운것 -

/dev/logo <- /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/logo <- /dev/block/mmcblk0p9

8900 brw-rw---- 1 root system 179,   9 2018-01-01 09:00 mmcblk0p9

 권한 부분에 d라고 되어 있으면 디렉토리던데 b는 뭔지 모르겠다. boot partition의 b 같은게 아닐까? 아무튼 보통 파일은 아닌것 같고 그래서 단순히 cp 명령으로는 가져올 수 없는것 같다. dd 명령에 대한 참고자료 링크 - dd (유닉스) dd 명령어 옵션 설명

if=FILE : 표준입력대신 지정한 파일을 입력으로 받는다.
of=FILE : 표준 출력대신 지정된 파일에 출력한다.
bs=BYTES : 한 번에 BYTES씩 읽어 들이고 출력. ibs와 obs를 한 번에 지정한 것과 같다.
count=BLOCKS : 입력 블록의 ibs 크기만큼만 복사한다.

 흠... 읽어봐도 대체 저 명령으로 어떻게 logo.bin 파일을 추출한건지 이해가 안된다. /dev 디렉토리를 보니 nvram도 있던데 그렇다면 이 명령을 제대로 알기만 한다면 nvram.bin 파일도 가져올 수 있지 않을까 싶다.

 부트 애니메이션의 경우는 바꿀 생각은 없었고 그냥 소리만 좀 넣어보고 싶었다. 스톡 롬에서는 bootaudio.mp3 파일을 /system/media 경로에 넣으면 됐는데 LineageOS 에서는 이 방법으로는 안된다. 여러 방법이 있겠지만 최대한 쉬운 방법을 찾아 봤다.

 /system/media/bootanimation.zip 파일을 가져와서 열어보면 다음과 같은 구조로 되어 있다.

/part0
/part1
/part2
/part3
/part4
dest.txt

 여기서 dest.txt 파일을 열어보면 이렇게 되어 있다.

720 240 60
c 1 0 part0
c 0 0 part1
c 1 0 part2
c 1 1 part3
c 1 0 part4

 width height frame/sec 인것 같다. 그림뷰어 프로그램으로 압축 파일을 보면 part0부터 4까지 그림을 쭉 바꿔가며 애니메이션 하는 방식이다. 소리는 여기에 audio.wav 파일을 넣으면 된다. 내 경우 애니메이션 시작때 소리가 나오게 하고 싶었으니 part0 폴더에 넣었다. 처음에는 소리가 나질 않았는데 나중에 알고보니 사운드 포멧을 32bit float으로 하면 안된다. 16bit int로 하면 잘 나온다. 스테레오 여부는 상관 없다. 시험삼아 ogg 파일을 넣어봤는데 안된다. wav 파일만 되는것 같다. 종료 애니메이션도 넣어보고 싶은데 이건 아직 방법을 모르겠다.

2018년 11월 9일 금요일

커스텀롬을 올렸더니 셀룰러로 인터넷이 안된다


LineageOS on Oukitel U20 Plus

 나는 커스텀 펌웨어를 검색할때 needrom에서 찾곤 하는데  최근에 해외직구로 구매한 Oukitel U20 Plus는 유저층이 적은건지 자료가 적다. 그래도 아주 없진 않은데 MIUI, XOSP, Lineage OS등이 있다. 그 중에서도 진저브레드때부터 사용했던 것이 Cynogenmod였으므로 이 유지를 이어받은 Lineage OS를 설치하기로 했다.

 그런데 Oukitel U20 Plus는 Lineage OS의 공식 지원 기종이 아니다. Needrom에 업로드 되어 있는 롬을 플래시해보면 기본 언어가 러시아어로 나오는데 그로보아 아마도 포팅한 사람이 러시아인 인듯 하다. 첫 환경 설정은 물론이고 모든 설정에 한국어는 하나도 없기 때문에 내용이 한눈에 안 들어와서 사용이 조금 힘들다.

 스톡 롬일때는 외산폰이어도 셀룰러 환경일때 별다른 설정 없이 인터넷이 잘 되어서 몰랐는데 이 커스텀 롬을 올리니 인터넷이 안된다는걸 알았다. 왜 안되는건지 곰곰히 생각해보니 어디선가 '네트워크 공급자' 설정 같은걸 본 기억이 떠올랐다. 나무위키의 개요 항목을 보면 'APN 미설정이 네트워크 미등록의 원인이 될 수 없다는 것'이란 문장이 있는데 뭐 어찌되었던 나의 경우에는 apn 설정을 안하거나 설정이 잘못되면 인터넷이 되지 않았다.

 설정을 뒤져보니 SIM cards - Mobile network settings - Network Operators 라는 항목이 있다. 여기를 들어가면 검색하느라 길게는 1분 이상이 걸리기도 하는데 기다리면 목록이 몇개 뜬다. 이게 무엇이냐면 PLMN(Public Land Mobile Network)라는 것인데 45008은 Korea Telecom. 즉 KT를 말한다. 45005는 SKT, 45006은 LGU+라고 한다. 본인은 45008을 선택했다.

 그리고 APN(Access Point Name)도 설정해 줘야 하는데 모든 필드를 입력하진 않아도 되고 필요한 것만 넣어도 잘 동작하는것 같다.

 1. Name : 사용자가 식별하기 위한 것이므로 아무거나 쓰면 된다. ex) KT LTE
 2. APN : lte.ktfwing.com
 3. MMSC : http:mmsc.ktfwing.com:9082
 4. APN Type : default, mms, *, supl등등

 2번 항목인 APN을 넣으면 인터넷이 되기 시작한다. Preferred network type이란 항목을 들어가면 LTE, 3G, 2G를 선택할 수 있는데 3G를 선택해보면 인터넷이 되지 않는다. 그런 경우는 거의 없겠지만 상황에 따라서 3G를 이용할 수도 있으므로 추가로 apn을 하나 더 만들어서 alwayson.ktfwing.com을 넣으면 3G도 이용할 수 있다. 연결이 되면 안테나에 H가 붙어서 표시된다. 선택을 할 수 있게 되어 있는데 막상 해보니 일일이 환경이 바뀐다고 선택할 필요는 없고 그저 목록에만 있으면 알아서 내용을 참조한 후 연결이 되는것 같다.

 그 외에 lte150.ktfwing.com, alwayson-r6.ktfwing.com을 추가할 수도 있는데 해도 되고 안해도 된다.



 3번 항목은 이름에서 알 수 있듯이 MMS(Multimedia Messaging Service)를 위한 것이다. http:// 가 아니라 http: 만 썼는데 이렇게 해도 된다.

 4번 항목은 default, mms, supl, wap, dun, fota, hipri등의 타입이 있는데 mms라고 지정해야 제대로 사진등의 MMS 메시지를 받을 수 있다. 잘 모르겠다 싶으면 default,mms만 넣어도 잘 작동한다. 아니면 default,mms,* 이렇게 해도 된다. del *.txt 명령이 파일명에 상관없이 txt 파일을 다 지우는것처럼 *은 그외에 나머지를 의미한다.

 그러면 나머지 다른 유형들은 왜 있는가? 이게 매우 궁금했는데 아마도 이동통신사가 제공하는 서비스의 범위를 차등 제공하려는 경우나 다른 기술적 필요 때문에 쓰이지 않나 싶다. 참조링크 What are APN Settings and How Can They Fix Data Issues on Your Prepaid Phone

 'DUN'은 구글에 의해 번역된 내용에 따르면 '현재 APN 구성이 전화 접속 네트워킹 연결에 사용될 수 있음'을 나타낸다고 한다. 전화 모뎀을 에뮬레이트 하기 위해 폰을 사용하는 옛날 방법을 말하며 현재의 스마트폰이 더이상 테더링 하지 않는 방식이므로 사용할 필요가 없다고 한다. 참조링크 - Access Point Names (APNs)

 'SUPL'은 'Secure User Plane Location'의 약자로 '휴대전화에서 통신사의 지리적 위치를 확인할 수 있게 해준다'고 되어 있다. 흠.. 아무튼 그렇다고 한다. 뭣에 쓰일지 모르겠지만 지레 짐작해 보자면 휴대전화에서 통신사의 지리적 위치를 알 수 있다면 그 반대도 가능하지 않을까? 119에서 응급상황일때 위치 확인하는 것처럼 그런것에 응용하지 않을까 싶다. 그냥 내 예상이다. [차세대이동통신] OMA Secure User Plane Location 규격 표준화 동향Open Mobile Alliance[오픈 모바일 얼라이언스 (OMA)] 사용자 평면 프로토콜

 'FOTA'는 'Firmware Over The Air'의 약자라고 하는데 모바일 네트워크로 펌웨어 업데이트를 하는 경우에 쓰인다고 한다. 이동통신사가 이 설정을 사용하도록 권장하는 경우가 아니면 이 유형 또한 굳이 넣을 필요가 없다.

 HIPRI는 안드로이드에서 HIPRI라는 연결을 할 때 사용한다고 하는데 이걸 쓴다고 성능이 더 높아지거나 하는건 없다고 한다. 써도 일단 이게 무엇인지 알아야 쓸지 말지 알탠데 관련 내용을 읽어봤지만 무슨말인지 모르겠다. 따라서 나는 안쓴다. 참조링크 - 2G 노트3, S5등 MMS 수발신시 WIFI꺼야 하는 기기들 수정 참고사항

 검색을 해보면 mms port에 9032를 넣어야 한다던가 Authentication type을 PAP로 해야 한다던가 하는게 있는데 해보면 알겠지만 없어도 된다. 이 부분은 나무위키가 맞다.



 다음 글로 이어짐 - APN에 대해서 알아보자

Mediatek Device에서 nvram warning 문제

 wifi에서 'NVRAM WARNING'이란 AP(Access Point)가 나타나는 오류가 있다. 공통적으로 Mediatek Device에서 발생하는 문제이며 내 경우에는 커스텀 롬을 올렸더니 발생했다. 하지만 접속도 되지 않는 AP를 표시하고 있는것 뿐 실제로 사용에 불편함을 주거나 치명적인 문제를 발생시키는 것은 아니다. 다만 거슬릴 뿐이다. 어쨌든 이 문제를 해결하고 싶어서 검색을 해보니 굉장히 많은 자료가 나왔지만 실제로 정작 나에게 도움되는건 없었다.

 현재 내가 문제를 겪고 있는 장치는 'Oukitel U20 Plus'라는 모델이며 스톡 상태에서는 문제가 없지만 여기에 LineageOS의 비공식 커스텀 롬을 플래시한 상태이다. 결론적으로 문제를 해결하지는 못했고 검색하면서 모은 정보를 정리하는 목적으로 글을 쓰는 바이다.

 일단 증상에 대해 간단히 설명을 하자면 잘못된 AP가 표시되는것 외에 내가 알기로는 바뀔리 없는 MAC Address가 wifi가 off/on 될 때마다 변경이 된다. 그런데 이것은 스톡 롬에서도 마찬가지다. 다만 스톡 롬은 잘못된 AP를 표시하지 않는다.


 1. WIFI 파일 수정 하기
 이 문제를 해결하기 위한 여러 방법 중 가장 많이 볼 수 있었던 솔루션 중에 하나는 [ /data/nvram/APCFG/APRDEB/WIFI ]를 hex 편집기로 열어서 첫행 4열 부분에 현재 MAC 주소를 넣으라는 방법이다. 즉 WIFI 파일의 내용과 MAC Address가 일치하면 'NVRAM WARNING' AP는 사라진다는 것이다. 방침을 따라서 해보니 해결된 듯이 보였지만 리부트 하니 같은 문제가 계속 발생했다.


 같은 문제가 계속 발생하는 이유는 변경한 'WIFI' 파일이 원래대로 돌아가기 때문이다. 저 부분에 MAC 주소를 넣어서 파일을 교체해도 리부트 또는 wifi를 off/on 하면 다시 [ 00 00 00 00 00 00 ] 으로 바뀐다. 아예 삭제를 해버려도 리부트를 하면 파일이 새로 만들어진다. 심지어 chmod 명령을 통해 권한을 440(rr)으로 만들어도 리부트 해서 보면 도로 660(rwrw)으로 돌아가 있다. 다만 440으로 하면 리부트를 하지 않으면 wifi를 off/on 해도 MAC 주소가 바뀌진 않는다.

 추정컨데 리부트 되는 과정에서 무조건 WIFI 파일을 새로 생성하는듯 하고 새로 만든 파일에는 MAC 주소의 정보가 0이기 때문에 일치하지 않으니 error AP가 나오는 것이다.

 그리고 wifi 다시 켜지는 과정에서 MAC 주소가 갱신될 때 앞의 3자리는 동일하지만 뒤의 3자리는 임의적으로 부여되는걸 확인했다. 다만 맨 뒤의 6번째는 리부트 될때는 고정적인데 wifi를 다시 켤때는 랜덤으로 부여된다. 즉 [ 00:08:22:??:??:FC ] 이런식이다. 앞의 [ 00:08:22 ] 는 항상 고정이다. 맨 뒤의 [ FC ]는 바뀌기도 하고 안 바뀌기도 한다. ??:?? 부분은 완전 랜덤하게 부여된다.

 흐음.. 내가 알기로는 맥 주소는 NIC(Network Interface Controller)에 각인되어서 절대 바뀌지 않는다고 알고 있었는데..?


"짜잔! '절대'라는 건 없군요"
 나로써는 그 이유를 모르겠지만 아마 미디어텍에서 어떤 이유가 있어서 계속 맥 주소를 계속 바뀌게끔 한것 같다.





 2. MTK NVRAM 0x10 FIX_v1.0.apk
 두번째 솔루션은 위에서 설명한 WIFI 파일의 hex 편집 과정을 자동으로 처리하게 만든 앱을 사용하는 것인데 원리는 1번의 방법과 같기 때문에 이 또한 근본적 원인을 해결해 주는 것은 아니다. 링크만 남기도록 하겠다. 'RacerOttavio97' MTK NVRAM 0x10 FIX_v1.0.apk


 3. MTK Engineering
 세번째 솔루션은 MTK Engineering 앱을 통해서 해결하는 방법이었는데 실행이 안됐다. 미디어텍 장치라고 해도 커스텀롬에 해당 요소가 포함되어 있지 않으면 안되는것 같다. 다른 비슷한 앱을 설치해봐도 마찬가지였다.



 4. SP META Mode
 네번째 솔루션은 메타 모드라고 하는 것이다. 이것은 프로그램의 이름인데 처음에는 SP Meta 였지만 버전업이 되면서 Maui Meta로 이름이 바뀌었다. 일단 이게 뭔지 이해하려면 스마트폰이 켜지는 방식 4가지의 방식을 알아야 한다.

 1. VCOM(preloader) - SP Flash Tool
 2. lk(boot loader/small kernel) - fastboot(Power + Volume Up)
 3. META mode - Maui Meta
 4. mtp, ptp, mass storage

 4번은 기기가 정상적으로 켜진 상태이다. mtp(미디어 전송 프로토콜), ptp(사진)는 USB 케이블을 PC와 연결 했을때 볼 수 있다.

 이 중에서 메타 모드로 진입하면 IMEI(International Mobile Equipment Identity)를 입력하거나 변경할 수 있고 기기의 여러 부분을 변경하거나 백업할 수 있다고 하는것 같다. Maui Meta 프로그램의 최근 버전은 9.1724이고 Android MTK에서 받을 수 있고 드라이버도 받아서 설치해야 동작한다.

 메타 모드로 들어가는 방법은 기기를 끈 후 프로그램에서 reconnect 버튼을 클릭하고 케이블을 연결하는 것이다. 그러면 장치가 저절로 켜지며 첫 로고화면만 나오고 더 이상 부팅이 진행되지 않는다. 즉 부트 애니메이션이 나오기 전까지만 진행된다. 그 후 프로그램의 지시등이 노란색으로 바뀌면 메타 모드로 연결이 된 것이다. SP Tools이 볼륨 다운을 눌러야 들어가는 것과 다르게 이건 그냥 가만히 놔두면 진입이 된다.

 그런데 내 장치는 안된다. 이유는 모르겠다. 드라이버도 다 설치 되었는데 안됐다. 가능한 키 조합을 모두 동원해 봐도 메타 모드를 들어갈 수 없었다. 아무튼 그래서 4번 솔루션도 실패했다.


 5. MAC 주소 고정하기
 마지막 솔루션은 미봉책인데 맥 주소를 고정해 버리자는 생각에서 나왔다. 내가 설치한 것은 Change My MAC이란 앱이고 구글 플레이에서 받을 수 있다. 말 그대로 맥 주소를 변경하는 기능만 하는 앱이다. 부트된 이후에 자동으로 주소를 변경해주는 기능이 있어서 설정해 두면 맥 주소가 고정되는 효과가 있다. 단 부팅 과정에서 실행되는게 아니라 부팅이 끝난 후에 동작하기 때문에 SIM 카드를 잠근 상태라면 주소가 변경되는 순간 심의 PIN을 다시 물어본다는 불편함이 있다.

 어쨌든 마지막 방법을 사용하면 NVRAM WARNING AP가 나오는 문제는 사라진다. 단 앞에서 말했듯이 미봉책이므로 리부트하고 맥 주소가 바뀌기 전까지는 위의 잘못된 AP가 여전히 표시된다. 즉 원인을 해결한 것은 아니다.

 그런데 애시당초 그 잘못된 AP가 나온다고 해서 기기의 기능에 이상을 일으키는 것은 하나도 없다. wifi도 잘 연결되고, 셀룰러도 잘되고, 인터넷, 전화, 문자 아무런 문제도 없다. 단지 신경에 거슬릴 뿐이다. 그러니 단지 보기 싫다고 수많은 헛수고를 하면서 스트레스를 받느니 차라리 마인드를 바꿔서 그냥 무시하고 폰을 사용하는게 정신건강에 이롭겠다는 결론이다.


게임이든, 공부든, 운동이든 뭐든 하면 할 수록 느는 것과 같이
고민 또한 하면 할 수록 늘어난다.

 번외로 IMEI는 전화앱에서 *#06#*을 눌러서 확인할 수 있고 mtk의 엔지니어링 모드는 *#*#3646633#*#*로도 들어갈 수 있는데 이 의미는 #*#ENGMODE#*#* 라고 한다. 이게 무슨 말인지는 키패드의 해당하는 영문키를 보면 알 수 있다. 다만 내 경우에는 3번 솔루션에서 mtk 엔지니어링 앱이 안됐던 것과 같이 이 방법도 되지 않았다.