개요

이 문서는 Linux를 소스코드를 build하고 디버깅하기 위한 과정들을 서술한다.

Build

linux 소스 코드 다운

git clone --depth 1 https://github.com/torvalds/linux

만약 원하는 리눅스 버전이 있다면 다음 사이트에서 확인 후 다운

https://mirrors.edge.kernel.org/pub/linux/kernel/

패키지 매니저를 이용해서 다운 받을 수도 있음

sudo apt-get source linux

필수 라이브러리 다운

sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison dwarves

.config 파일 생성

cp -v /boot/config-$(uname -r) .config (기존 커널 사용)
make menuconfig (configuration 수정 / 생성 - 만약 커널 버전이 다르면 NEW한 설정을 물어보는데, default로 쓰고자 할시 꼭 실행해주기)

리눅스 커널 build

make -j#NUM_OF_CORE(소스 디렉토리에서 실행)

그후 디바이스 드라이버 설치

make modules_install

최종적으로 리눅스 커널 설치

make install

에러 핸들링

  • 여기서 config파일을 그냥 다운 받은 경우, *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'.가 뜨기도 한다. CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem" 이렇게 되어있는 것을 CONFIG_SYSTEM_TRUSTED_KEYS = "" 이렇게 바꿔줘야하는데 방법은 아래와 같다.
> $scripts/config --disable SYSTEM_TRUSTED_KEYS
  • Error 24 : Write error : cannot write compressed block\ E: mkinitramfs failure cpio 141 lz4 -9 -l 24

이럴 경우, apt-get purge 로 사용하지 않는 커널의 vmlinuz와 같은 파일들을 boot에서 제거하면 된다." https://askubuntu.com/questions/1207958/error-24-write-error-cannot-write-compressed-block

  • 우분투에서 make 할때 다음 두개를 지워주도록 하자.
scripts/config --disable SYSTEM_REVOCATION_KEYS
scripts/config --disable SYSTEM_TRUSTED_KEYS
  • 만약 init이 Error: initrd too big 이라고 뜰경우에는, 다음과 같이 하여서 initrd.img의 크기를 줄여야 한다.
vi /etc/initramfs-tools/initramfs.conf => MODULES=most 를 MODULES=dep 으로 변경
sudo make INSTALL_MOD_STRIP=1 modules_install