1) 안드로이드(리눅스)에 대한 기초의 기초의 기초 (해킹) 지식
     -- 커널?
     -- 리눅스? / 터미널?
     -- 안드로이드?
     -- GPL? 오픈소스?    
     -- 루팅?
     -- 펌웨어? / 롬?
     -- 리커버리? / 다운로드 모드?
     -- 기타 등등...?

2) 안드로이드(넓게 보면 리눅스) 커널 컴파일 방법

3) 커스텀 롬 요리 방법

4) 헥스 에디터를 이용한 여러 가지 재미있는(??) 놀이

5) 제 머리에 새로운 정보가 입력되는 대로 추가 예정



ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ


강좌의 숫자는 04번이지만 실제로는 이게 두 번째 강좌가 되는군요.


제가 이렇게 강좌를 올리는 이유는 일단 여러분의 흥미를 돋구어 놓은 다음에 지루하고 따분한 이론으로 들어가기 위해서 입니다. 신나는 것 부터 하는게 좋겠죠. (사실 별로 신나지는 않고 머리만 아픕니다....)





오늘은 커널 파일의 Hex codes를 이용해서 내부에 저장된 initramfs를 수정하는 방법을 알려드리겠습니다.

일단 준비물이 하나 있습니다. 바로 Hexeditor죠.

저는 참고로 Bless Hex Editor를 사용합니다. 설치하는 방법은 아래의 그림을 보시면 됩니다.


>>> 프로그램 > 우분투 소프트웨어 센터를 클릭합니다.

>>> 우분투 소프트웨어 센터가 켜졌습니다.

>>> hex라고 검색해 보시면 중간쯤에 Bless Hex Editor가 나옵니다. 설치를 눌러주시면 설치가 알아서 진행됩니다.


이로서 준비가 끝이 났네요.

일단 이번 강좌 역시 initramfs가 도데체 무엇에 쓰는 녀석인지에 대한 설명은 넘어가도록 하겠습니다.

일단.. 개략적인 리눅스 커널의 일종인 zImage라는 파일의 구조부터 살펴보실까요.

(상기 이미지는 kldp에서 퍼왔습니다. 감사합니다.)

위 그림은 실제로는 bzImage라는 녀석의 구조인데요, zImage와 구조상으로 큰 차이는 없습니다.

이에 대한 자세한 설명은 링크로 대체하겠습니다. (-_-;;)

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
# 커널 이미지 파일의 구조와 동작 원리
http://wiki.kldp.org/KoreanDoc/html/EmbeddedKernel-KLDP/kernel-image-file-structure.html
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

자.. 우리가 하려던게 뭐였죠? 아... zImage 안에 들어있는 initramfs라는 것을 수정하는 것이었군요!

이를 위해 여러분께 매직넘버라는 개념을 소개해 드리겠습니다.

매직넘버(Magic Number)....

마법의 숫자라는 뜻이죠. 과연 어떤 것을 의미할까요?

여러분들 영화 매트릭스 보셨나요? 거기서 주인공 네오는 매트릭스 안의 모든 것들을 코드(code)로 보지요.

마찬가지로 컴퓨터의 모든 파일들은 코드로 이루어져 있습니다.

쉽게 말해서 1010101010.... 이런 거죠.

이를 16진수로 표현하면 Hex code가 되는 것입니다. 매직넘버는 이 hexcode의 맨 앞부분으로, 이 숫자들이 파일들의 정체성을 알려줍니다.

간단하게 예를 들면서 설명을 드리겠습니다.

제가 저번에 올린 커널 컴파일 강좌에서 같이 올려드렸던 TA13_initramfs.cpio 파일을 떠올려 보세요.

이 파일은 cpio로 압축이 되어있는 상태입니다. 그리고 이를 증명해주는 것이 매직넘버이죠.

이 매직넘버는 30 37 30 37 ... 로 시작합니다. 한 번 확인해 볼까요?

아래의 이미지를 보시죠.


네... 정말이군요. :D

그렇다면.. 이 매직넘버중 아무 숫자나 하나 바꿔버리면 이 파일은 어떻게 될까요?

직접 해보세요. ㅎㅎ  (아마 안해봐도 아실거에요!)



자 그럼 매직넘버의 개념을 대충 이해하셨으리라 생각이 되네요.

이제 본격적으로 zImage를 Hexeditor를 이용해서 주물딱 거리도록 하겠습니다.

이 작업은 크게

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
1. zImage에서 initramfs 추출하기

2. 추출한 initramfs의 압축을 풀어서 내용을 조작/재압축 하기

3. 재압축한 initramfs를 zImage에 들어있는 원본과 바꿔치기
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

정도가 되겠습니다.

강좌가 생각보다 길어지겠네요..

그럼 시작하죠!!


1. zImage에서 initramfs 추출하기

initramfs라는 녀석은 여러가지의 압축된 형태로 zImage안에 들어있습니다.

일단 제일 첫 번째로 할 일은 piggy라는 것을 분리해내는 것입니다. (맨 위의 zImage의 구조에 대한 이미지를 보셨겠죠??)

1) zImage를 hexeditor로 열어봅시다. (zImage는 펌웨어로 배포되는 ***.tar 안에 들어 있습니다.)


2) 어지럽군요.


3) zImage의 구조에 관한 링크를 읽어보셨다면 아실텐데요, 진짜 리눅스 커널(piggy)은 gzip으로 압축이 되어 있습니다. gzip의 매직넘버는 1f 8b 08입니다. 이로 검색을 해봅시다. (검색 단축키 = ctrl + f)


4) 첫 번째로 나오는 1f 8b 08이 여기 있네요. 이 부분이 결국 zImage안에 gzip으로 압축이 되어있는 실제 커널 이미지라는 것입니다.


5) 앞 부분을 전부 지워줍니다. 그럼 이 파일은 이제 1f 8b 08로 시작하는 파일이고 그 말은 곧 이게 gzip으로 압축된 파일이라는 얘기겠죠?


6) 다른 이름으로 저장을 합니다. 편의상 Image-orig.gz 이라고 하겠습니다.


7) 저장이 잘 되어 있군요.


8) 터미널을 켭니다. (방법은 아시죠?)


9) 아까 그 Image-orig.gz 파일이 저장된 곳으로 이동을 합니다. 기본적으로는 /home/여러분의계정명/Image-orig.gz 로 저장이 됩니다.
>>> cd /home/liliniser


10) 이 파일의 압축을 풀어줍시다. 아래와 같이 나오면 정상입니다.
>>> gunzip Image-orig.gz

11) 압축이 풀리면서 용량이 불어났습니다! 이게 진짜 리눅스 커널과 initramfs가 한데 뭉쳐있는 핵이라고 할 수 있습니다.


12) 이를 다시 Hexeditor로 열어줍니다. 여전히 복잡하네요 -_-;;


13) 이제 이 파일 안에 우리가 원하는 initramfs가 들어있겠죠? initramfs는 여러 형태로 들어있을 수 있습니다만, 삼성에서 배포하고 있는 커널 파일 안에는 cpio의 형태로 들어 있습니다. 아까 이 것의 매직넘버가 뭐였죠? 네. 30 37 30 37 30 ... 입니다. 검색해서 제일 첫 번째로 나오는 녀석이 우리가 찾는 녀석입니다.


14. 다시 앞 부분은 싹 지워주세요. 이제 이 파일은 30 37 30 ...으로 시작하는, 즉 cpio파일이 되는 겁니다.


15. 다른 이름으로 저장합니다. 편의상 파일명은 ramdisk-orig.cpio로 하겠습니다.


16. 이게 바로 zImage에 들어있는 initramfs입니다. 추출 완료네요! 실제 initramfs 파일들은 용량이 이렇게 크지 않습니다만, 이렇게 용량이 큰 이유는 우리가 매직넘버만으로 파일들을 뽑아내고 있고 뒤에 딸려있는 부분들은 신경을 쓰지 않아서 입니다.




2. 추출한 initramfs의 압축을 풀어서 내용을 조작/재압축 하기

추출한 cpio파일의 압축을 풀어서 아주 간단한 수정을 가한 다음 다시 압축을 해보도록 하겠습니다.

1) 터미널을 켭니다.


2) 아까 그 파일이 저장된 곳으로 이동합니다. 제 컴퓨터에서는 아래의 디렉토리에 저장이 되어있네요.
>>> cd /home/liliniser


3) cpio의 압축을 풀어야겠네요. 이를 위해서 폴더 하나를 만들어 줍니다.
>>> mkdir initramfs_TA28


4) 이 폴더 안으로 이동합니다.
>>> cd initramfs_TA28


5) 압축을 푸는 명령어는 다음과 같습니다. 좀 어려울수도 있겠네요. 따로 메모를 해두세요!!
>>> cat ../ramdisk-orig.cpio | cpio -i --no-absolute-filenames


6) 압축이 잘 풀려 있네요.


7) init.rc 파일을 수정해 보겠습니다. 이를 엽니다.


8) 맨 밑으로 내려보시면 
# Test command for stress test
# service dfta /system/bin/sh /sbin/dfta.sh
#  oneshot
라는 것들이 있습니다. 지웁니다. (주석이라 지워도 문제가 없습니다. 글을 추가하지 않고 굳이 삭제하는데에는 이유가 있으니 일단 제가 하는대로 따라하시면 되겠습니다. 나중에 설명을 또 올리도록 하겠습니다. 강좌가 너무 길어져서요.)


9) 이제 다시 압축을 해볼까요? 터미널을 다시 켠 뒤 initramfs_TA28폴더로 이동합니다. (초보분들이 혼란스러우실까봐 일부러 터미널을 새로 켜는 것입니다.)


10) 아래의 같은 명령어를 입력합니다. 일단 메모해 두세요 ㅠㅠ 편의상 파일명은 ramdisk_modified.cpio로 합니다.
>>> find . -print0 | cpio -o0 -H newc > ../ramdisk_modified.cpio


11) 파일들이 잘 압축 되었네요!





3. 재압축한 initramfs를 zImage에 들어있는 원본과 바꿔치기

거의 다 왔습니다. 강좌가 매우 길어지네요. 어쩔 수 없습니다, 이를 제가 발견하기까지 엄청난 삽질이 있었기 때문입니다.

제가 있는 힘껏 설명을 드리도록 하겠습니다만 다소 헷갈릴 수 있는 여지가 다분합니다. 제 설명을 보신 후에도 이해가 안가는 부분이 있으시면 언제든지 댓글로 질문을 올려주세요.

1) Image-orig 파일을 Hexeditor로 열어봅시다. 메모지와 펜을 하나 준비해 주시고요. 현재 열린 Image-orig 파일의 크기를 기록해 주십니다. 제가 현재 열어보고 있는 TA28의 Image의 크기는 0xa8bd2f가 되겠군요. 창 맨 밑 가운데 부분에서 확인하실 수 있습니다.










잠시 여기서 설명을 좀 드리겠습니다. 눈치가 빠르신 분들은 알아 채셨겠지만, 원래의 initramfs가 붙어있던 자리에 아까 우리가 수정해서 재압축했던 ramdisk_modified.cpio를 대신 붙여넣는 것이 우리의 목적입니다. 원본을 통째로 들어내려면 처음과 끝을 알아야 하겠죠? 그런데 처음 부분은 아시다시피 우리의 매직넘버 30 37 30 ... 입니다. 그럼 끝은 어디일까요? 끝은 바로 54 52 41 49 4C 45 52 21 21 21 입니다. 인간이 인식하는 언어로 표기하면 TRAILER!!!가 되네요.
여기서 유념하셔야 할 것이 한 가지 있습니다. 우리가 수정해서 집어넣는 initramfs는 원본의 크기를 초과할 수 없습니다. 이런 제한요소를 극복하기 위한 몇 가지 방법이 있는데 이는 나중에 소개해 드리도록 하겠습니다. 다시 원래 하던 일로 돌아갑시다.








2) 이 안에 원본 initramfs가 들어있다고 말씀 드렸죠? 이를 찾아봅니다. 매직넘버 30 37 30 ... 을 찾으면 되겠네요.



3) 30(0x28be0) 37 30 37 30 ~~~~~~~~~~~~~~~~ 54 52 41 49 4C 45 52 21 21 21(0x3b1bf7) 를 통째로 덜어내 주세요. (첫 부분과 끝 부분의 좌표를 기억하시면 편하겠죠?)
(↑↑↑처음 좌표는 0x28be0이군요!↑↑↑)
(↑↑↑끝 좌표는 0x3b1bf7이군요!↑↑↑)
(↑↑↑과감히 삭제했습니다.↑↑↑)


4) 이 창을 그대로 놔둔 상태에서 아까 우리가 수정했던 ramdisk_modified.cpio를 Hexeditor로 새로 열어봅시다.


5) 이 파일의 맨 뒤에 00 00 00 이 많이 들어있는데 이 것들은 빼고 30 37 30 ~~~~~~~~ 54 52 41 49 4C 45 52 21 21 21만 복사를 합니다. 먼저 맨 뒤에 있는 00 00 00 들을 지우신 다음에 ctrl + a 를 누르셔서 전체선택 하신 다음 ctrl+c로 복사를 하시면 되겠네요.



6) Image-orig를 수정하던 창이 그대로 남아있을 것입니다. 다시 이 창으로 돌아오세요.


7) 마우스로 아무데도 클릭하지 마시고 아까 잘라냈던 그 자리에다가 그대로 ctrl+v 키를 이용해서 잘라냈던 코드들을 붙여넣기 하십니다.


8) 이제 마지막으로 해야할 것이 있는데요, 그건 바로 원본 Image-orig의 크기를 맞추어 주는 것입니다. 아까 말씀 드렸듯이 우리가 수정한 ramdisk_modified.cpio는 원본 initramfs보다 작기 때문에 우리는 방금 전에 붙여 넣었던 ramdisk_modified.cpio의 바로 뒤에 00 00 00 00 을 채워 넣어서 그 크기의 차이만큼을 메꿔줄 필요가 있는 것이지요. 지금 현재 파일의 전체 크기는 0xa8bd0b네요. 아까 기록해두셨던 원본의 전체 파일 크기가 뭐였죠?
0xa8bd2f였네요. 아래의 사진의 마우스 커서가 가리키고 있는 부분부터 0을 파일 크기가 0xa8bd2f가 될 때까지 채워주시면 되겠습니다.
(↑↑↑0을 채우고 있습니다.↑↑↑)
(↑↑↑수정한 양이 적기 때문에 이 만큼의 0만 채워줘도 원본과 크기가 같아 지는군요.↑↑↑)


9) 다른 이름으로 저장을 합니다. 편의상 Image 라고 저장을 하겠습니다.




이제 직접 손으로 하는 일은 모두 끝이 났습니다. 다음으로 해야할 일은, 리눅스 커널을 컴파일할 때 일어나는 일을 역추적하는 것입니다. 커널 소스를 컴파일하게 되면 일어나는 일들을 아주아주 개략적으로 알려드리겠습니다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
(1) 각각의 소스 트리에서 컴파일된 결과물들이 제각각 built-in.o 라는 이름의 오브젝트 파일들로 뭉쳐집니다. ----> (2) 이렇게 컴파일된 built-in.o 오브젝트 파일들을 한군데로 모읍니다.  vmlinux라는 이름의 파일로 말이죠. 이 파일의 크기는 엄청나게 크므로 이를 strip을 한 번 시켜줍니다. 쉽게 말해서 다이어트를 한다고 생각하시면 됩니다. 그렇게 해서 나온 것이 Image라는 파일입니다. ----> (3) Image 파일을 gzip으로 한 번 압축을 해줍니다. piggy.gz 라는 이름으로요. ----> (4) 이렇게 압축한 piggy.gz를 오브젝트 파일로 변환해 줍니다. 이름은 piggy.o가 되겠군요. ----> (5) head.o를 컴파일 합니다. head에는 실제 압축된 커널 이미지의 좌표같은 정보가 들어있습니다. ----> (6) misc.o를 컴파일합니다. misc에는 piggy가 압축이 되어 있으므로 실제 부팅 과정에서 이의 압축을 해제하기 위한 코드가 들어 있습니다.  ----> (7) head.o 와 misc.o 그리고 piggy.o를 다시 한 번 합체시킵니다. 이 때 나오는 결과물의 이름 역시 vmlinux이지만 크기는 처음에 나왔던 녀석에 비해서 많이 작습니다. 그래도!! 이것 조차도 약간 큰 듯 합니다. 그래서 또 strip을 한 번 합니다. ----> (8) 이렇게 다이어트를 마치면 이제 우리에게 익숙한 zImage라는 파일이 생성이 된 것입니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

위의 과정들은 제 기억에 의존한 것이기 때문에 틀린 부분이 있을 가능성이 농후합니다. 지적해 주시면 감사하게 받겠습니다.

위의 과정을 찬찬히 들여다 보시면 우리가 위의 과정 중에서 어디에 파고들어야 할지 감이 옵니다. 네, 바로 (2)번과 (3)번 사이가 되겠군요. 여기에 우리가 정말정말 힘들게 수정한 Image 파일을 붙여 넣은 다음에 컴파일 과정을 재개하면 완료입니다.





해보세요!





..................
..........
.....

어떻게 할까요?

커널 소스 트리에서 필요한 준비물들을 빼와야 할 수 있겠네요.

갤럭시S가 이클레어에서 프로요로 넘어갈 때 즈음엔 저도 Image 파일을 손으로 다 고쳐서 소스에서 뽑아낸 준비물들로 zImage를 만들곤 했습니다. 하지만 얼마 지나지 않아 한계를 느꼈죠.

이 준비물은 현재 제 컴퓨터에도 없습니다. 대신에 위의 모든 과정들을 거의 자동화 해놓은 스크립트가 있습니다.

아니 그럼 처음부터 그걸 올릴 것이지 왜 이렇게 길고 긴 강좌를 올리는 수고를 했습니까! 라고 물으신다면, 저는 단지 스크립트 하나만 올려서 여러분이 그 것의 원리도 모르고 사용하시는 것을 원하지 않았기 때문입니다. 라고 답하겠습니다.

일단 스크립트부터 받으시죠. :D

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
##커널 repack 스크립트
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

스크립트라고 짜놓긴 했지만 사실 안의 내용물은 좀 엉망입니다. supercurio씨가 깔끔하게 정리해준 것이 있긴 합니다만, 일단 이것으로도 별다른 문제는 없기에 그냥 올리겠습니다. -_-;;

사용법은 다음과 같습니다.

1) 터미널을 켜신 후 repacker 폴더로 이동합니다.


2) editor.sh 를 열어서 수정해주셔야 할 것이 있습니다. [강좌 02]를 통해서 모두들 툴체인이라는 것을 가지고 있으실 겁니다. 없으시면 강좌 02로 가셔서 툴체인을 설치해주셔야 합니다.
일단 editor.sh를 열어줍니다.
>>> gedit editor.sh


3) 아래의 이미지를 보시면 수정해야 될 부분을 제가 마우스로 긁어놨습니다 .이 부분을 여러분의 컴퓨터에 있는 툴체인의 위치로 바꿔주세요. 제 툴체인은 참고로
/home/liliniser/ToolChains/arm-2009q3/bin/arm-none-linux-gnueabi
이런 위치에 있군요. 위의 모양을 유심히 보시고 툴체인 위치를 정하는 것에 유의해 주세요.






사용법에 대해 좀 자세한 설명을 드리자면...

sh editor.sh [kernel] [initramfs_directory / file] [gz/lzma/""]
위에 보시는 것과 같이 sh editor.sh 명령으로 editor.sh 스크립트를 실행하고, 이에 필요한 인자가 3개가 있습니다.

[kernel]에는 수정하고 싶은 원본 zImage가 있는 위치를 입력하시면 됩니다.

[initramfs_directory / file]에는 원본을 대체할 initramfs가 있는 곳의 위치를 넣으시면 됩니다. 이미 압축된 형태의 파일 (**.cpio 혹은 **.gz 혹은 **.lzma)을 넣으셔도 되고 압축하지 않은 폴더를 선택하셔도 됩니다. (지정된 위치에 폴더가 있을 경우에는 다음에 나오는 인자를 보고 압축을 합니다.)
ㄹㄹ
[gz/lzma/""]에는 3가지 선택권이 있습니다. 만약 위의 initramfs를 지정하셨을 때 폴더를 지정하셨다면 여기에는 gz 혹은 lzma를 선택하셔야 합니다. 그래야 압축을 해서 zImage에 삽입을 할테니까요. 하지만 만약 initramfs를 선택하실 때 이미 압축된 파일을 선택하셨다면 이 곳에서는 입력을 하실 필요가 없습니다.
참고로 gz 는 적당한 압축률과 압축/해제의 속도가 빠릅니다.
lzma는 엄청난 고압축률을 자랑하므로 조그마한 공간에 엄청난 양을 꾸역꾸역 쑤셔 넣을 수 있다는 큰 장점이 있습니다.
둘 중에 알아서 선택하시면 됩니다. :D

예를 보여드리죠.

위의 터미널에서 전 sh editor.sh /home/liliniser/Workspace/TA13/zImage-TA13 /home/liliniser/Workspace/TA13/initramfs/ lzma
라고 입력했습니다.
/home/liliniser/Workspace/TA13/zImage-TA13 는 원본 커널파일이고
/home/liliniser/Workspace/TA13/initramfs/는 수정한 initramfs의 폴더이고
lzma는 이 initramfs 폴더를 압축할 포맷입니다.

이해가 가시나요? 하나 더 보여드리죠.


sh editor.sh /home/liliniser/Workspace/TA13/zImage-TA13 /home/liliniser/TA13_initramfs.cpio 라고 입력이 되어 있죠?

/home/liliniser/Workspace/TA13/zImage-TA13는 역시나 원본 커널입니다.
/home/liliniser/TA13_initramfs.cpio는 initramfs인데 이번에는 cpio로 압축이 된 하나의 파일로 존재하죠? 이는 editor.sh로 하여금 다시 압축할 필요가 없다고 판단하게 만드는 것이 되므로 세 번째 인자를 입력하지 않으시면 됩니다.







이로서 기나긴 강의가 마무리가 되는군요. 이렇게 커널의 initramfs만 바꿔치기하는 데에는 몇 가지 장/단점이 있습니다
.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
## 장점
- 버전이 올라가면서 삼성측에서 적용했던 버그픽스나 개선점들을 반영하면서 initramfs를 이용한 랙픽스나 트윅등을 적용할 수 있다.
- 필요한 커널을 제작할 때 드는 소요 시간이 적다.

## 단점
- 커널 소스 수정이 불가능하기 때문에 이를 이용한 것들 (O.C., Voodoo Sound/Colour 등등의 커널 소스를 수정한 트윅)의 적용이 매우 어렵다.
- initramfs의 원본의 크기에 따른 약간의 제약이 있다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

너무 긴 강좌를 쓰다보니 글 후반부에는 집중력이 떨어지게 되는군요. 그래서 설명이 약간 빈약하고 뭔가 빠트렸을 가능성이 있습니다. 여러분께서 이를 따라하시다가 이해가 안가는 부분이나 설명이 누락된 것 같은 부분, 그리고 잘 안되는 부분이 있다면 댓글을 남겨주세요. 그럼 그 댓글들을 참고해서 본문을 수정하도록 하겠습니다.

감사합니다.
Posted by Liliniser
: