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 파일만 되는것 같다. 종료 애니메이션도 넣어보고 싶은데 이건 아직 방법을 모르겠다.

댓글 없음:

댓글 쓰기