리눅스 커널 빌드하기

2024. 11. 21. 17:58디바이스 드라이버

빌드 루트를 통해 루트파일시스템을 다운받았으니 이번엔 커널을 다운받는다.

 

 

빌드 루트와 동일하게 wget 명령어를 통해 압축파일을 다운로드 받은 후

 

tar xvf 명령어를 통해 압축을 해제한다.

 

 

그 다음 빌드에 필요한 툴체인도 설치해준다.

 

그 다음 Buildroot에서 제공하는 기본 커널 설정 파일(linux.config)을 리눅스 커널 소스 트리의 qemu_defconfig로 복사하여, 커널 빌드 과정에서 QEMU ARM64 가상 머신에 적합한 설정을 할 수 있도록한다.

 

명령어 ARCH=arm64 make qemu_defconfig 명령어를 통해 리눅스 커널을 ARM64 플랫폼의 QEMU 에뮬레이터에서 사용할 수 있도록 기본 설정을 로드한다.

 

 

여기 까지가 리눅스 커널을 빌드하기 위한 기본 준비이다.

 

위의 명령어를 통해 본격적으로 리눅스 커널을 빌드한다. 

CROSS_COMPILE은 하나의 시스템에서 다른 시스템용으로 실행 가능한 소포트웨어를 컴파일하는 방법이다. 이를 통해, 개발자는 컴파일 환경과 실제 실행 환경이 서로 다른 경우에도 소프트웨어를 빌드할 수 있다.

ARCH=arm64 CROSS_COMPILE=<툴체인 디렉토리>/bin/aarch64-none-linux-gnu- make -j<코어개수> 형식으로 명령을 한다. 

이는 타겟 시스템의 자원이 제한적인 임베디드 시스템에서 사용할 커널을 빌드할 때나, ARM64 가상 머신용 커널 이미지를 빌드할 때 사용한다.

 

리눅스 커널을 빌드했을 때 커널 이미지가 생성된다. 이 커널이미지는 ARM64 아키텍처 기반 가상머신에서 실행할 수 있도록 빌드된 리눅스 커널 바이너리인데 이 커널 이미지는 ARM64 아키텍처를 사용하는 시스템의 개발, 테스트 및 시뮬레이션에 사용된다.

 

커널 이미지란?

커널 이미지는 컴파일된 커널 코드와 초기화에 필요한 데이터를 포함하는 바이너리 파일이다. 즉 커널이 하나의 파일로 디스크에 저장되어 있는 것이다. 이 파일은 운영체제가 부팅될 때 메모리에 로드되어 실행되며, 하드웨어 제어 및 어플리케이션의 실행 환경을 제공한다.

커널 이미지 파일의 구조

 

그림에서 회색 부분이 리눅스 커널이고, 압축되어있는 상태이다.

head는 가장 먼저 실행되는 코드로, CPU와 메모리 등 기본 환경을 초기화한 후, misc에 제어를 넘긴다. misc는 커널이 실행될 준비가 완료되도록 추가 작업을 수행한 후, 메인 커널 실행 코드로 제어를 전달한다.

bsetup는 리눅스 커널 초기화 과정에서 사용되는 특정 초기화 루틴으로, 부트 과정 중의 설정과 초기화 작업을 처리하는 역할을 한다.

bbootsect는 부트로더와 커널 간의 전환을 담당한다.

 

'디바이스 드라이버' 카테고리의 다른 글

QEMU에서 리눅스 실행하기  (0) 2024.11.23
리눅스 디바이스 드라이버  (1) 2024.11.23
Rootfs 빌드 하기  (0) 2024.11.20
Makefile 문법 파악하기  (1) 2024.11.19
리눅스 개발 환경 이해하기 (2)  (0) 2024.11.19