개요
이 문서는 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