본문 바로가기

어떻게 할까/소프트웨어

Mediatek 기기들 system partition 수정 하기.

 대부분의 중국에서 만들어지고 판매 되는 Mediatek 기기들은 SP Flash tool 이란 것을 사용하고, 이 형태는 사실 대부분의 안드로이드 기기 판매자들 하고 다를게 없습니다. 각 이미지는 scatter load 영역을 지정하고 있는 map file 에 기준해 eMMC 의 NAND flashing 을 거치게 되는 형태 인데, 바이너리로 제공 되는 system.img 는 안드로이드용 simg 로 되어 있는 것이 대부분 입니다.

 그래서 사실 이 system.img 를 수정 한 다음 기기에 flashing 을 하게 되면 뭐라 할 거 없이 바로 변경 분이 적용 된다 하겠습니다.


 이번에 이 방법을 통해서 기본 파일 시스템을 수정 할 대상은 Ulefone 에서 나온 Paris-X 모델로, MT6735 를 사용한 저가용 제품 입니다. 이 기기의 문제는 제조사가 libutil.so 가 가지는 statefright 문제중 하나인 CVE-2015-6602 를 해결 하고 있지 않고, release 때 부터 정상적인 google search service 대신 이상한 걸 넣어 배포 했다는 것 입니다.


 그래서 직접 수정할 것은 MT6753/35 용 32bit, 64bit 라이브러리 들 일부를 수정 한 것을 /system/lib 및 /system/lib64 에 적용하고, /system/app 및 /system/priv-app 과 /vendor/ 안에 operator 와 pittpatt 내의 app 을 제거 하는 것은 물론, 과도히 볼륨 조정이 개판인 카메라 음을 조정해서 /media/audio/ui 안에 적용 하는 것 입니다.


 먼저 이 작업을 하기 위해서는 실제 Linux 가 필요 하며, Windows 사용자는 VMware 같은 가상 시스템을 통해 설치를 하던 간에 무조건 ext-4 파일시스템이 실제 마운트 되고, ELF 이미지를 구동 할 수 있는 상태가 되어야 합니다.


 먼저 이 작업을 위해 참조한 URL 들은 다음과 같습니다.


 두번째 URL 의 ext4tools 는 Ubuntu 기반의 시스템에서 anroid fstools 를 받으면 되지만, 문제가 make_extfs 가 android 용으로 만들어 진 것이 아니라 실제 img 를 만들때 문제가 되므로, 이를 미리 prebuild 한 것을 받아 돌리기 위해 필요 한 URL 입니다. 일단, 제가 쓰는 linux 에는 android 의 더러운 개발 환경울 설치 하기 싫어서 이기도 해서 받아서 구동 하는 것을 목적으로 했습니다.


 먼저 Paris-X 의 마지막 업데이트에서 system.img 을 작업을 위한 특정 폴더로 복사 한 다음 sim2img 로 ext4 형태로 변환을 해 줍니다.



 파일 크기가 1.6GiB 정도 이기 때문에 시간이 좀 걸리고, 처리가 완료 되면 system.img.ext4 가 생성 된 것이 눈으로 확인이 됩니다.



 ext4 로 변경을 하게 되면 실제 할당된 영역 까지 모두 padding 이 된 상태로 파일이 만들어 지므로 실제 크기는 다소 커지게 되며, 실제 Ulefone 은 2GiB (2048M) 을 대상으로 만들어 져 있습니다.

 이를 이제 mount 를 통해서 현재 디렉터리 내에 system 을 만들어 마운트 해 보도록 하면 다음과 같이 됩니다.



 마운트는 하기 전에 올릴 디렉터리를 먼저 꼭 만들어 주어야 하며, mount 자체는 sudo 로, 관리자 권한으로 지정해야 합니다. 이것이 정상으로 된다면 비어 있던 system 디렉터리 안에 system.img.ext4 안의 파일시스템 자체가 연결 되게 됩니다. 이후로 실제 system 안 내용을 수정 하게 되면 바로 system.img.ext4 가 변경 된다는 것을 이해 하면 됩니다.


 이제, statefright 가 수정된 so 파일들을 관리자 권한으로 system 안으로 몽땅 풀어 줍니다. 그리고 권한이나, 소유자 등을 확인 해 줍니다.



 lib 이나 lib64 내에 권한은 반드시 rw-r-r 이어야 하고, 소유자와 그룹은 root:root 이어야 하므로 , 이걸 수정 하려면 sudo chmod 644 * 와 sudo chown root:root * 로 변경을 해 주어야 합니다. 이후 변경하거나 삭제 할 파일들을 좀 더 수행 한 다음 마지막으로 다시 simg 를 만들어 보도록 합니다.


 simg 는 img2simg 로도 만들 수 있겠지만, 이런 경우 지정위치가 system 이란 정보가 누락 되므로 쓸 수 없게 됩니다. 그래서 그냥 make_ext4fs 를 이용해서 마운트 된 파일 시스템 전체를 다시 파일로 만드는 것이 편리 합니다.



 위의 두번째 URL 에서 받아 둔 make_ext4fs 를 이용해서 파일시스템을 simg 로 바로 만들어 줍니다. 물론 이 작업을 하는데 시간이 걸리며, 다시 기술 하자면 -s -l 로 지정하는 크기는 2GiB 인 2048M 이 됩니다. 이것은 나중에 mount 를 통해 연결 될 때 정해지는 실제 크기가 되므로 틀리면 부팅이 안되는 Paris-X 를 구경하게 됩니다. 물론 SP Flash tool 로 다시 원복 하면 됩니다만, 이 파티션 크기는 제품마다 다르다는 점을 반드시 알아 두어야 합니다.


 또한, 이렇게 만든 파일도 실제 eMMC 에 flashing 되면 bootloader 에서 넘어 가면서 오류가 나서 recovery 로 다시 넘어 가게 되는 경우가 발생 합니다. 제품에 따라 다르겠지만, 이 방법이 다 먹히는 것은 아니니 반드시 복원 할 수 있는 원래 이미지 들을 가지고 있어야 하는 점을 꼭 명심해야 합니다.