Android2011.02.27 15:39
크리에이티브 커먼즈 라이선스
Creative Commons License

오랜만에 글을 쓰는것 같다.

점점 더 안드로이드와 관련된 여러부분에 관심이 많아지고 있다.

아직 시작에 불과하지만 벌써 관련서적이 세권이나 책상위에 있다. 저걸 언제 다 공부하나 싶은게 사실이다...

아이들이 수학의 집합만을 열심히 공부하듯 3권 모두 앞쪽만 좀 봤을 뿐 아직 제대로 책을 펴보지도 못했다... OTL...

어떻게 하면 이 귀차니즘을 벗어날 수 있을까... 후... ^^;;

 

2장까지는 내장패치에 대한 내용을 적었다.
글을 적고나서 변화의 속도가 빠른 내장패치들 이다보니 벌써 업데이트 사항들이 생겼다.
그 부분들은 시간이 되는데로 1, 2 장의 내용에 업데이트를 할 예정이다.
그리고 공부를 거꾸로 하다보니(기본지식이 없이 Trouble-shooting 에 관여된 지식들 부터 갖다보니 OTL...)
하나하나 알아가면서 머릿속에서 여러가지 내용들이 제 짝을 찾기 시작하고 있다.
그런 이유로 이미 적은 글도 수시로 업데이트를 시킬것 같다.

내장패치는 내장의 /system, /data, /dbdata, /cache 영역을 rfs -> ext4 변환을 하면서 그 이외의 부대기능들을
추가시킨 패치들이었던 반면 외장패치는 /data/data, /data/dalvik-cache, /data/app 의 영역을 외장 메모리로
심링크 혹은 바인딩을 시키는 것이다. (심링크와 바인딩은 아래쪽 혹은 별도로 적을 생각이다... 지금 생각으론...)

좀더 쉽게 구분을 한다면 내장패치는 테그라크 원낸드 패치의 경우를 제외하고는 크게 디렉토리의 이동이 없다.
I/O Format 을 변환하여 데이터 처리 속도를 향상 시킨다고 생각하면 되겠다.(이 부분은 1 장에 자세히 적혀있다.)

그에 반하여 외장패치는 /system 혹은 /data 의 디렉토리를 내장의 일부 영역 혹은 외장의 두번째 파티션 영역으로
이동시키게 된다. 이렇게 이동이 되게되면 data 를 처리하는데 있어서 병목현상이 줄어든다고 생각하면 외장패치를 하는
목적을 알게될 것이다.

(테그라크 원낸드의 경우 /data 용량이 줄어들게 된다. 이 부분을 해소하기 위하여 /data/app 을 /dev/block/stl9 혹은 /dev/block/mmcblk1p2 로 심링크 패치를 하는 경우도 많다.)


크게 많은 사람들이 사용하는 외장패치법은
핵펀치 외장패치 어플을 이용하는 방법과
이카루스 외장패치 (내장으로의 링크도 가능) 스크립트를 이용하는 방법이 있다.

위 두 가지 패치의 차이점은 

핵펀치 외장패치

-> 외장으로 /data/app, /data/dalvik-cache, /data/data 를 선택적으로 심링크 혹은 바인딩 가능 
& nilfs2, ext2, ext4 I/O Format 및 외장메모리의 파티션 분할 가능.
(어플을 이용한 외장패치법)

이카루스 패치

-> 외장 혹은 내장으로 /data/app (내장 테그라크 용량확보의 목적) 심링크 가능, /system/media, /system/fonts 의
외장 혹은 내장패치 가능 (인터넷 & 마켓 등의 실행 성능향상 목적_nilfs2 Format 가능), 이카루스 트윅과 Hardcore`s 트윅의
선택 적용 가능.
[adb(Android Debug Bridge)를 이용한 스크립트 외장패치법]
--> adb 에 대해선 나중에 별도로 글을 작성할 생각이다. [
http://developer.android.com 에 가면 android SDK(Software Development Kit) 를 받을 수 있는데, 그 안에 adb.exe 가 존재한다. 맛클이나 다른 곳에서 adb 관련 zip 파일을 받아서 설치해도 된다.]

두 가지 패치 이외에 맛클 자양님의 ext3 패치(자양펌)가 존재한다.
/data 영역을 모두 /dev/block/mmcblk1p2 의 영역으로 mount 시키는 방식이다.
/dev/block/mmcblk0p2 를 전혀 사용하지 않는다. (모비낸드의 /data 영역이다보니 모비낸드에 Bad Block 이 생길일이 없다. +_+)
--> 아직 사용을 해보지 못한 패치이기 때문에 추후 적용 및 체험 후 자세한 내용을 적을 생각이다.
(간단히 다른 패치들과의 다른점은 주로 내장패치에 사용되는 방식이 흔히 이야기하는 리눅스 커널(zImage)의 init.rc 를 수정한다고 1 장에서 적은적이 있다. 자양펌의 경우 init.d 과정에서의 script 혹은 playlogos1 과정에서의 scipt 를 이용한 방법보다 더 앞단계의 커널의 init.rc 를 수정하여 /data 를 /dev/block/mmcblk1p2 로 mount 시키는 방식이다.)

 -> init process, init.rc, init.d, playlogos1 과 그 이외에 zygote process, Dalvik Virtual Machine(Dalvik VM) 에 관한 내용은 리눅스 Kernel 과 부팅 Process 에 대한 글을 적을 예정인데 그 곳에 명기할 생각이다.

 그리고 맛클에 가보면 샤인패치가 한가지 더 존재한다.
이 패치는 외장메모리의 두번째 영역으로 ext3 포멧의 /data/data, /data/app, /data/dalvik-cache 의 선택적 바인딩 패치 가능, nilfs2 포멧을 이용한 동일 선택적 바인딩 패치가 가능하다. 아직 사용은 해보지 못했으며, 해당 스크립트만 PC에 보관 중이다.
사실 써보고 싶지만 지금은 순정상태를 유지하며 한동안 써보자고 마음먹고 있기 때문이다.
--> 최근에 터치 스크린의 감도를 조절할 수 있는 스크립트가 추가된듯 하다. 이 부분은 내장패치인 부두 패치에도 최근 적용이 되었다.

일단은 핵펀치 외장패치에 대해 적어보면
간단한 적용법과 지금 알고있는 패치의 원리는 다음과 같다.

핵펀치를 적용하기 위해서는 우선 루팅이 되어있어야하며, 마켓에서 핵펀치라는 어플을 다운 받아야한다.
루팅과 핵펀치 어플만 있다면 원하는 외장패치를 할 수 있다.

 루팅은 1장에서 적은 방법들 중 하나의 방법으로 루팅을 하면되며, 핵펀치 어플을 마켓에서 검색으로 다운 받을 수 있다.
(핵펀치를 적용하고 나서는 루팅을 풀어도 패치는 유지가 된다. 하지만 다시 패치를 해제하고자 할 때에는 다시 루틍을 한 후 패치해제를 해야한다.)

핵펀치 어플을 들어가 보면 알아서 busybox 를 설치하고 (busybox 에 대해선 1장에 적었다.) 안으로 들어가게 된다.
우선은 외장패치를 하기 위해서는 삽입되어져 있는 외장메모리의 파티션을 분할해야한다.

파티션 분할의 의미는 다음과 같다.
일단은 리눅스 운영체제애서 인식할 수 있는 공간이 필요하다는 개념이다.
외장메모리는 하나이며 fat32 방식으로 윈도우 운영체제에서 인식할 수 있는 포멧으로 구성이 되어있다.
이렇게 fat32 형식의 파일포멧인 하나의 외장메모리를 두개로 나누어서
첫번째 파티션을 fat32 로 놓아두고
두번째 파티션을 ext 혹은 nilfs2
파일포멧을 변경해줘야 리눅스 운영체제에서 두번째 파티션을 인식할 수 있다.
(첫번째 파티션이 fat32 포멧이어야지만 스마트폰 자체에서 메모리자체를 인식하기 때문에 무조건 첫번째 파티션이 fat32 이어야 한다.)

 핵펀치 어플을 이용하여 두번째 파티션을 분할 하였다면 다음은 두번째 파티션의 파일 포멧을 결정해야 한다.
(주의. 파티션을 분할하거나 합칠 때에는 모든 데이터가 날아간다는 사실을 인지하고 있어야한다.)
ext 시리즈와 nilfs2 의 차이점은 2장에서 적었으므로 그 차이점은 적지 않도록하고 결정은 유저의 몫인듯 하다.

 내장을 ext4 로 사용하는 경우 외장도 ext4 로 맞추는것이 좋다고 하였으나, 요즘은 외장을 nilfs2 로 조합하여 사용하는 경우도 많기 때문이다. 물론 내장 ext4 + 외장 nilfs2 를 사용해 봤는데 실 체감상 만족할만한 결과를 얻은 기억이 있다.

 기본적으로 내장 파일포멧 형식이 RFS 인 순정 상태에서는
/data/data
/data/app
/data/dalvik-cache
부분을 모두 외장 /dev/block/mmcblk1p2 의 영역으로 바인딩하는것이 좋다.

 테그라크 패치나 부두 패치 처럼 내장 파일포멧 형식이 EXT4 인 경우에는
/data/data
부분만 외장 /dev/block/mmcblk1p2 의 영역으로 바인딩하는것이 좋다.

 특별히 테그라크 패치 중 원낸드 패치의 경우
/data/app 만을 /dev/block/mmcblk1p2 의 영역으로 심링크를 시켜서
부족한 /data 의 용량을 보완하여 추가적으로 /data 에 설치되는 어플리케이션의 용량을 확보할 수 있다.
하지만 이 경우 성능향상보다는 오히려 성능의 저하가 올것으로 생각된다.

--> 이미 원낸드 패치 상태에서는 /data 영역이 가장 성능이 좋은 Onenand 영역으로 치환이 되었기 때문이다. 

위의 방법대로 패치를 적용하면 되며,
바인딩의 경우를 제외하곤 절대 외장 메모리를 스마트폰에 분리를 하면 안되지만,
그냥 바인딩이건 심링크건 구분없이 외장메모리를 분리하지 않고 사용하는 것이 좋다고 생각된다.
많은 사람들이 착각하는 부분이 있는듯 하다.
move2sd 와 같은 외장메모리에 어플리케이션을 설치하는것과
외장패치를 이용하여 어플리케이션을 외장메모리에 설치하는것은 엄청난 차이가 있다.

 move2sd 와 같은 어플의 경우는 외장메모리 영역 중 윈도우 파일 포멧으로 만들어진 fat32 영역인
/dev/block/mmcblk1p1 으로 어플리케이션과 그 데이터를 보내게 된다.
이 경우 소셜 네트워크 어플이나 기타 홈화면에 위젯을 띄워놓은 어플의 경우 충돌을 일으키고 원활하게 동작하지 않는 상황들이 발생하는듯 하다.

하지만, 핵펀치나 이카루스 패치와 같은 외장패치 경우는 윈도우 파일 포멧인 fat32 영역이 아니라
/dev/block/mmcblk1p2 인 리눅스 파일 포멧으로 파티션을 나눠 작업해 놓은 두번째 영역으로 어플과 데이터를
옮기게 된다. 이렇게 옮기면서 내장에 위치해 있는것처럼 인식을 하도록 링크를 걸어 놓는것이 외장패치 이다.
그렇기 때문에 move2sd 와 같은 어플을 이용한 방법보다는 외장패치를 하는것이 안정적이라고 할 수 있다.

핵펀치 어플의 해제는 심링크의 경우는 그냥 어플에서 해제를 하면 되며
바인딩의 경우는 바인딩 동기화를 하고 해제를 해야한다.
(바인딩 동기화에 대해선 다른 장에서 적을 예정이다. 간단히는 바인드 패치를 했을 당시와 해제 때의 데이터의 차이가 발생하지 않고 모든 데이터가 복구가 되도록 만드는 것이 바인딩 동기화이다.)

 이만하면 핵펀치 외장패치에 대해선 간단히 적은듯 하다. 이 이외에 생각나는 부분은 추후에 업데이트 할 생각이다.
이카루스 패치에 대해 적으려 했으나 너무 길어지는 듯하여 다음에 시간이 될때 4장으로 구분하여 적도록 하겠다. 이카루스 패치의 경우는 핵펀치 어플에 비해서는 적용이 조금은 어렵지만 엄청나게 많은 옵션을 포함하고 있다는 장점이 있으며, 사실 playlogos1 을 이용하는 것 보다는 init.d 를 이용하기 때문에 더 안정적이지 않나 생각하고 있다. 그리고 별도의 playlogos1 의 수작업을 하지 않아도 bootanimation.zip 의 적용이 가능하게 된다.
핵펀치의 경우 bootanimation.zip 을 적용하기 위해서는 링크를 따라가서 그대로 하면된다.
(http://matpclub.com/s/?document_srl=1332197)

4장을 또 언제 적을지 모르겠다. OTL...

지금 현재 보고 있는 init process 등에 대한 내용을 이해하는데 어려움이 많아서
그쪽에 좀 더 시간을 할애할 생각이기 때문이다.

저작자 표시 비영리 변경 금지
신고
Posted by Bulldozer121

티스토리 툴바