Liliniser
11.03.05
조회 수 11858
추천 수 26
댓글 34
ccl


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의 원본의 크기에 따른 약간의 제약이 있다.

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



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



감사합니다.



ccl

댓글 34
  • ?
    선 추천 후 정독!! 감사합니다 ㅎㅎ
  • ?
    bvlgari
    11.03.05
    역시 Liliniser 님의 강좌는 눈에 쏙쏙 머리에 쏙쏙 잘 들어옵니다..^^ 정말 감사합니다. 혼자 삽질하면서 할때는 Image-Orig 파일에서 trailler!!! 의 바로 위 30 37 30 37 인 줄 알고 한참 고생했었던 기억이..^^;; 컴파일하실 때 에러나시면 edit.sh 열어서 경로지정해주세요..^^
  • ?
    infinity9
    11.03.05
    가장 알고 싶은 부분이였는데 이렇게.. 지식을 나눠주시는 릴리님 진심으로 감사드립니다.
  • ?
    BoUnD™
    11.03.05
    오마이갓ㅋㅋ
    저도 선덧글후정독ㅋ
  • ?
    \"거의 다 왔습니다. 강좌가 매우 길어지네요. 어쩔 수 없습니다, 이를 제가 발견하기까지 엄청난 삽질이 있었기 때문입니다.\" 엄청난 삽질을 통해 얻은 노하우를 공유해 주셔서 너무나도 감사합니다. 복 받으세요~~~
  • ?
    송럭쉬
    11.03.05
    +_+ 아...+_+ㅋ 그저 눈에서 레이저만 ...+_+ㅋ 아...?
  • ?
    neocore
    11.03.05
    흐흐.. 강좌 기다리고 있었습니다~ 감사합니다 ^^!!
  • ?
    천마진
    11.03.05
    우와;;; 대따 어렵다;; 그래도 다른글들 보다는 그나마 조금씩 이해가 가네요..ㅎㅎ

    고생하셨습니다~
  • profile
    LavI
    11.03.05
    아..혼자했으면 삽질정말 수백번했을꺼같네요..^^;
    좋은자료감사합니다.
  • ?
    Leche™
    11.03.05
    저는 솔직히 한번 정독했지만 직접 해보질 않아서 도통 모르겠습니다만;; 시간이 나면 꼭 해보도록 하죠^^

    그리고...

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

    이 말씀에 솔직히 감동받았습니다.

    강좌 만드시느라 정말 수고 하셨습니다.
  • ?
    =0=;;; 엄청나다;;;; 리눅스... 만만한게아니군요 ㅠㅠㅠㅠ
  • ?
    우선 강추와 추천 먼저 들어갑니다. 살짝 보긴했는데 와우~~네요^^~
  • ?
    제... 주말을 빼앗아 가셨네요 ㅋㅋ
    고맙습니다 ^^
  • ?
    큣딸기
    11.03.05
    와 이거 작성하시니라 고생많으셧겟내요. . 좋은지식공유 감사드립니다 ^^
  • ?
    nanu
    11.03.05
    감사드립니다 ㅜㅜ 한동안 심심하지는 않겠군요~ 너무 너무 원했던 강좌에요~
  • ?
    Cherish.
    11.03.05
    중간에서 문제가 생겼습니다
    5. 압축을 푸는 명령어는 다음과 같습니다. 좀 어려울수도 있겠네요. 따로 메모를 해두세요!!
    >>> cat ../ramdisk-orig.cpio | cpio -i --no-absolute-filenames

    이전 부분은 완벽히 같게 했는데 이부분에서 오류가 나옵니다 위 명령어를 입력하면
    canu@ubuntu:~/initramfs_TA28$ cat ../ramdisk-orig.cpio | cpio -i --no-absolute-filenames
    cpio: Malformed number rrect
    cpio: Malformed number cpio m
    cpio: Malformed number ethod
    cpio: Malformed number used:
    cpio: Malformed number use -H
    cpio: Malformed number newc
    cpio: Malformed number option
    cpio: Malformed number o cpio magi
    cpio: c: 알 수 없는 파일 유형
    cpio: 파일의 불완전한 끝
    canu@ubuntu:~/initramfs_TA28$

    -- 이렇게 나와서 압축이 풀리지 않습니다 문제 해결 좀 부탁 드리겠습니다
  • ?
    Hoonika
    11.03.05
    배워보고 싶은 내용이었는데.. 쉽게 잘 설명해 주셨네요.. 감사합니다~
  • ?
    쑨덱
    11.03.05
    선추천.. 후정독!!! 어려워서 꾸준히 보러 와야겠네요~ ㅎ
  • ?
    저도 이러네요 ㅠㅠ 어떻하나요 ㅠ
  • ?
    http://matpclub.com/s/?document_srl=78341

    해당 주소로 들어가보셔서 해당 주소에 있는것처럼 해보세요~!
    그러면 위에처럼 오류 없이 풀려요 ㅋ~!
  • ?
    정말 감사합니다~!!! xda 사이트에서는 전부다 영어여서 못했었는데ㅠ
    이렇게 한글로 직접 작성해주시다니 진짜 감사해요~!!!
    지금 새벽시간에 하나하나 보면서 수정하고이써요 ㅋ
    정말 알면알수록 신기하네요 ㅋ~!!!
  • ?
    editor.sh: 152: /home/liliniser/ToolChains/arm-2009q3/bin/arm-none-linux-gnueabi-gcc: not found
    ##### 11. Compiling head
    editor.sh: 156: /home/liliniser/ToolChains/arm-2009q3/bin/arm-none-linux-gnueabi-gcc: not found
    ##### 12. Compiling misc
    editor.sh: 160: /home/liliniser/ToolChains/arm-2009q3/bin/arm-none-linux-gnueabi-gcc: not found
    ##### 13. head.o + misc.o + piggy.o ---> vmlinux
    editor.sh: 164: /home/liliniser/ToolChains/arm-2009q3/bin/arm-none-linux-gnueabi-ld: not found
    ##### 14. vmlinux ---> zImage
    editor.sh: 168: /home/liliniser/ToolChains/arm-2009q3/bin/arm-none-linux-gnueabi-objcopy: not found
    ##### 15. Getting finished!!
    cp: `arch/arm/boot/zImage\'를 설명할 수 없음: No such file or directory
    rm: `arch/arm/boot/compressed/vmlinux\'를 지울 수 없음: No such file or directory
    rm: `arch/arm/boot/compressed/piggy.o\'를 지울 수 없음: No such file or directory
    rm: `arch/arm/boot/compressed/misc.o\'를 지울 수 없음: No such file or directory
    rm: `arch/arm/boot/compressed/head.o\'를 지울 수 없음: No such file or directory
    r

    마지막에 이렇게 나오면서 안되네요 ㅠㅠ
    liliniser 이게 적혀있길래 사용자명을 바꿔야 하는건가요 ㅎㅎ ?
  • ?
    Liliniser
    11.03.06
    헉 스크립트 파일에서 컴파일러 위치 지정하는걸 깜빡 했네요 금방 수정하겠습니다.
  • ?
    Liliniser
    11.03.06
    중간에 설명이 누락된 부분이 있습니다. 다시 수정해서 올리겠습니다.
  • ?
    감사합니다ㅠㅠ 그런데 그렇게해도 안풀리네요 ㅠㅠ
  • ?
    bvlgari
    11.03.06
    앗 릴리나이저님께서 직접 댓글을 ^^ 항상 고맙습니다.. 다음 강좌도 너무 기대됩니다..
  • ?
    일반 펌웨어 푸시려고 하시는거 아니신가요?
    아님 다른분의 커스텀 펌웨어 푸시려고 하시는건가요?
  • ?
    구니짱
    11.03.06
    릴리님 강좌 감사합니다. 노숙자님 부두 이전에 릴리님 부두를 사용했었습니다.
    다른 랙픽스보다는 커널 심어서 간단하게 진행할 수 있는 부두가 제게 맞는 것 같아서 현재도 부두만 사용하고 있습니다.
    강좌의 내용이 아직 저같은 촌부에게는 멀고먼 산이지만, 리눅스를 조금씩 알게되어서 넘 고맙습니다.
    차근히 정독후, 이해하도록 노력해야겠습니다. 항상 행복한 나날 되세요...
  • ?
    테그라크랑 부두펌이여 ㅠ
  • ?
    고인돌
    11.03.08
    잘 설명해 주셨네요.. 감사합니다~
  • ?
    벼리
    11.03.11
    좋은 강의 감사합니다 ㅎㅎ
  • ?
    성인물
    11.04.07
    아 그림 이랑 완전 틀림 ta22 커널 zimage 이거 ᆖ;; 헥머시기로 해도 님꺼 그림이랑 틀리게 나와요 ...
  • ?
    junandsu
    12.01.12
    원본보다 용량을 더 크게 하는 방법을 알려주세요!
  • ?
    감사히 잘 봤습니다. 커널 빌드방법이 삼성에서 배포한 오픈소스보다 자세하군요 :) 한가지 질문입니다. cat ../ramdisk-orig.cpio | -i --no-absolute-filenames 를 하면 cpio: Removnig ~~까지는 똑같은데 1 block 하고 끝이나서 들어가보면 dev랑 root밖에 없네요 위에 댓글에 비슷한 경우가 있길래 보려 했으나 주소가 바뀐건지 열람이 불가능하서 이렇게 말씀드립니다
댓글 쓰기 권한이 없습니다.
List of Articles
제목 글쓴이 추천 조회 날짜
롬쿠킹 [강좌] 02. 갤럭시S 프로요 리눅스 커널 컴파일하기 51 Liliniser 37 18182 2011.02.14
롬쿠킹 개발자분들을 위한 (물론 초보분들도할수 있도록 쉽게 쓴) 리눅스를 안... 67 file 프리빌리 31 10626 2011.01.05
롬쿠킹 Dokdo-Project 3.1 For Galaxy S2 (SHW-M250S/K , GT-I9100) 41 file 베가레이 31 12146 2014.02.15
롬쿠킹 [강좌] 04. Hexeditor를 이용한 리눅스 커널의 initramfs 수정하기 34 Liliniser 26 11858 2011.03.05
롬쿠킹 OC 1.3ghz 입니다. 190 file Raven 24 24544 2011.01.03
롬쿠킹 갤럭시노트2 루팅펌웨어 배포 중단 95 히어로즈 24 14994 2013.12.04
롬쿠킹 테마는 하나의 예술입니다. (이식 및 관련 게시물 작성에 대한 공지) 69 berics 24 14711 2011.10.24
롬쿠킹 인터뷰: 미친kamui & 리체 (프레스티지모드&ELS롬) 19 프리빌리 23 3575 2013.07.27
롬쿠킹 갤럭시 S의 factoryfs.rfs를 만들자! 32 file 샤인님 21 11746 2011.02.27
롬쿠킹 [SHW-M440S] SKT 갤럭시S3 3G 4.3 MK2 쿠킹롬 배포 4 히어로즈 20 9168 2013.11.17
롬쿠킹 [강좌] 03. 갤럭시S Deodexing, Signing 그리고 커스텀 롬 제작 30 Liliniser 19 9232 2011.09.04
롬쿠킹 ELS 롬 0.6.5 버전 업로드 했습니다. 5 Leche™ 18 2464 2013.08.19
롬쿠킹 Hello matpclub from XDA! 51 supercurio 17 7147 2011.05.03
롬쿠킹 임베디드 개발자 모임 게시판은 간단한 질문하는곳이 아닙니다 6 미날 17 34967 2011.01.25
롬쿠킹 SetCPU Governor 종결자 23 HTC_Kovsky 16 15667 2011.01.16
롬쿠킹 갤럭시 노트1 cm11 최종 빌드 배포했습니다. 1 bestmjh47 16 7823 2015.01.25
롬쿠킹 알려드립니다~ 18 Leche™ 14 2009 2013.08.08
롬쿠킹 갤럭시S3 유플(SHV-E210L)용 MIUI 제작중입니다!! 10 ohk990102 13 7315 2013.12.06
롬쿠킹 SHW-M250L 용 Clockworkmod 입니다. 7 file Pinkkit 13 9851 2012.01.08
롬쿠킹 작업해 왔던 것들 전부 오픈소스 합니다. (옥타 갤포 사용자분들, 주목!) 9 bestmjh47 13 5059 2014.11.27
롬쿠킹 [SHW-M440S]SKT갤럭시S3 3G MH1 LightPack을 배포했습니다. 13 히어로즈 12 6066 2013.08.20
롬쿠킹 갤럭시노트4 SKT S6 Theme V1.5 곧 배포 예정입니다. 9 file EPhe 12 5067 2015.05.28
롬쿠킹 갤럭시S2 커스텀커널 카운트 초기화 JIG케이블 제작법 50 LIGnex1 12 51847 2011.05.09
롬쿠킹 [SHV-E250S] SKT갤럭시 노트2 MF6 ValuePack 배포 14 file 히어로즈 12 4163 2013.07.15
롬쿠킹 SKT갤럭시노트2 MI2 LightPack 배포 7 히어로즈 12 3944 2013.09.28
1 - 17