Computer Security

#4 리눅스 커널&파일 시스템 빌드 본문

리눅스 커널 해킹

#4 리눅스 커널&파일 시스템 빌드

쿠리 Kuri 2022. 8. 12. 18:30
반응형

리눅스 커널 빌드과정

 

1.빌드에 필요한 패키지 설치

2.원하는 버전의 리눅스 커널 소스 다운로드

3.make defconfig //해당 아키텍쳐의 default 옵션을 사용

4.make menuconfig //메뉴 기반 설정 화면을 이용

5.make -j N  // N개의 CPU core를 이용해 커널 이미지 빌드

 


1. 빌드에 필요한 패키지 설치

 

-build-essential

-libncurses5

-libncurses5-dev

-bin86

-kernel-package

-libssl-dev

-bison

-flex

-libelf-dev

위의 패키지들을 apt-get install 명령을 통해 설치 해준다.

패키지설치

 

 


2.원하는 버전의 리눅스 커널 소스 다운로드

 

https://www.kernel.org/

 

The Linux Kernel Archives

 

www.kernel.org

 

 

위 링크에 접속해 소스코드를 다운 받고 압축을 풀어주면, 아래와 같은 파일들을 얻을 수 있다.

file

 


3.make defconfig //해당 아키텍쳐의 default 옵션을 사용

 

make defconfig 명령을 통해 .config를 현재 아키텍쳐의 default 옵션으로 설정해준다.

 

아래는 x86_64아키텍쳐의 default 옵션으로 설정하였다.

make defconfig

 

 


4.make menuconfig //메뉴 기반 설정 화면을 이용

 

make menuconfig 를 입력하면 아래와 같은 GUI 화면이 나타난다.

make menuconfig

위 화면에서 다양한 커널 옵션들을 설정 할 수 있다.

설정한 옵션들은 .config 파일에 추가된다.

 

 

 


5.make -j N  // N개의 CPU core를 이용해 커널 이미지 빌드

 

make -j N

위와 같이 make -j N 명령을 이용해 커널 이미지 빌드를 시작한다.

 

ls

커널 빌드가 끝나면 vmlinux,bzImage 이렇게 두개의 커널 이미지가 생성된다.

 

bzImage 는vmlinux에서 순수하게 Instruction set 만 뽑아낸 것이며, 우리가 사용할 커널 이미지이다.

vmlinux는 디버깅에 유용한 정보들이 살아있는 이미지이다.

 

 

 


루트 파일 시스템 빌드 과정

 

1.busybox 다운로드

2.make menuconfig //메뉴 기반 설정화면을 이용한다.

3.target 디렉토리에 make 진행

4.target 디렉토리에 각종 디렉토리 세트 생성 및 init 스크립트 작성

5.cpio 확장자로 압축

 


1. busybox 다운로드

 

https://www.busybox.net/downloads/

 

Index of /downloads

 

www.busybox.net

위 링크에 접속해서 아래의 파일을 다운 받아준다.

 

downloads.

 

다운을 받은 뒤, 압축을 해재하면 아래와 같은 파일들을 얻을 수 있다.

Makefile을 이용해 루트파일 시스템을 빌드하자.

 

 

 


2.make menuconfig //메뉴 기반 설정화면을 이용한다.

menuconfig

Setting -> Build Options -> Build static binary 옵션 체크

 

Networking Utilities -> inetd 옵션 해제

 

 

 


3.target 디렉토리에 make 진행

target

1.mkdir ../target 명령어를 이용해 빌드 결과물이 저장될 target 디렉토리를 생성한다.

 

2.make CONFIG_PREFIX=../target install 명령을 통해 파일 시스템 빌드를 진행한다.

 

 

ls

빌드가 끝나면 target 디렉토리에 위와 같은 파일들이 생성된다.

 

mkdir dev etc lib proc tmp sts 명령을 통해 최소한의 디렉토리 세트들을 생성해주자.

 

mkdir

 

 

 

 


4.target 디렉토리에 각종 디렉토리 세트 생성 및 init 스크립트 작성

vi init

target 디렉토리에서 위와 같은 init 스크립트를 작성한다.

 

init 스크립트가 바로 커널이 부팅되고 가장 먼저 실행되는 1번 프로세스이다.

 

chmod 755 init 명령을 통해 init 스크립트 권한을 수정해준다.

chmod

 

 

 


5.cpio 확장자로 압축

 

find . | cpio -o --format=newc > rootfs.cpio명령어를 통해 target 디렉토리의 파일들을 cpio 확장자로 압축하면 rootfs.cpio 파일이 생성되고, 이 rootfs.cpio 파일이 바로 지금까지 빌드한 루트파일 시스템이다.

rootfs.cpio

 

 

 

 


최종적으로 커널 이미지 빌드를 통해 bzImage를 얻을 수 있고, 루트 파일 시스템 빌드를 통해 rootfs.cpio를 얻을 수 있다.

 

이 두 파일과 qemu를 이용해서 커널을 부팅 할 수 있다!!

반응형

'리눅스 커널 해킹' 카테고리의 다른 글

#6 리눅스 CTF에서의 환경 셋팅  (0) 2022.08.14
#5 리눅스 qemu&gdb 셋팅  (0) 2022.08.13
#3 리눅스 커널 3  (0) 2022.08.11
#2 리눅스 커널 2  (0) 2022.08.10
#1 리눅스 커널 1  (0) 2022.08.09
Comments