커널을 재 컴파일하는 간단한 방법은 무엇입니까?


41

우분투 12.04 x86 64 비트에서 새로운 커널을 컴파일하고 싶습니다.

나는 이 위키 페이지 가 기본적 으로이 블로그 의 거울임을 발견 했으며 나에게 쓸모없는 것처럼 보이는 많은 단계 ( git 등)가 있습니다.

이전 릴리즈 / 디스크를 사용하여 .config파일 을 만들고 Makefile필요한 경우 수정 한 다음 실행 만하면 make됩니다.

우분투에서 이것을 수행하는 간단한 방법이 있습니까?


답변:


39

1. apt-get source커널의 우분투 버전을 다운로드하는 데 사용

apt-get source linux-image-$(uname -r)

예를 들어 다음을 포함하는 폴더를 제공합니다.

linux-3.2.0 linux_3.2.0-26.41.dsc
 linux_3.2.0-26.41.diff.gz   linux_3.2.0.orig.tar.gz

굵게 표시된 diff에는 모든 Ubuntu / Debian 사용자 정의가 포함됩니다.

자신 만의 스톡 커널을 만들려면 .config"구식"데비안 make-kpkg방법을 사용하십시오.

이것은 위키에서 설명한 다른 구식 방법 입니다.

sudo apt-get install kernel-package

커널을 처음 컴파일하는 경우 :

sudo apt-get build-dep linux-image-$(uname -r)

그런 다음 cd소스 디렉토리 (여기서 linux-3.2.0) 로 이동하여 실행중인 커널 구성으로 파일 make oldconfig을 작성 .config하거나이 .config디렉토리로 세 번째 부분 을 복사하십시오 .

텍스트 또는 그래픽 구성을 원하는지 여부에 따라 다음을 설치하십시오.

(본문)

sudo apt-get install libncurses5 libncurses5-dev

(그래픽)

sudo apt-get install qt3-dev-tools libqt3-mt-dev

그런 다음 다음을 실행하십시오.

(본문)

make menuconfig

(그래픽)

make xconfig

완료되면 다음을 실행하십시오.

fakeroot make-kpkg -j N --initrd --append-to-version=my-very-own-kernel kernel-image kernel-headers

여기서 N병렬로 실행할 작업 수 (보통 보유한 CPU 수) my-very-own-kernel는이 빌드를 식별하기위한 사용자 정의 문자열입니다.

완료되면 커널 이미지와 헤더 파일은 상위 디렉토리에 debs로 준비됩니다. sudo dpkg -iGRUB 항목 추가 등을 처리하는을 사용하여 설치할 수 있습니다 .


그들이 왜이 diff에 대해 아무 말도하지 않습니다. 나에게 diff는 diff 일 뿐이며 모든 것을 포함 할 수 있습니다.
user827992

잘 모르겠습니다. 정식 커널 팀용 Google에 문의해야합니다. 방금 빌드 방법을 알려
드렸습니다

1
마지막 질문은 압축 된 diff를 어떻게 적용 하는가? : DI는 linux-3.2.0디렉토리 로 가서 실행 patch -p1 <../patch.diff해야합니까?
user827992

1
없습니다 필요 은 diff를 적용 할 수는; apt-get source ...벌써 그랬어!
ish

2
-1 당신은 "구식"이라고 부르고, 나는 그것을 구식이라고 부릅니다. fakeroot debian/rules editconfigs, fakeroot debian/rules clean, fakeroot debian/rules binary정확한, 문제가없는 방법입니다.
Aleksandr Dubinsky

19

단계는 다음과 같습니다. 이 절차는 nixCraft방법 : Linux 커널 2.6 컴파일을 기반으로 하지만 상당히 현대화되었습니다.

빌드하려는 커널의 소스 코드를 다운로드하여 추출하십시오.

kernel.org 에서 업스트림 커널 소스 코드를 얻을 수 있습니다 . 여기서는 버전 3.16.1 (이 글을 쓰는 시점에서 가장 안정적인 커널)이 사용됩니다. 따라서 다른 버전을 사용하는 경우 이러한 명령을 수정해야 할 수도 있습니다.

커널 소스 코드는 현재에서 제공됩니다. 타르 . xz 아카이브이므로 원하는 버전으로 "tar.xz"링크를 클릭하십시오.

다운로드 가능한 커널 소스 아카이브를 보여주는 kernel.org 스크린 샷

cd아카이브를 다운로드 한 디렉토리로 이동 한 후 다음 을 사용하여 압축을 풀 수 있습니다 tar.

tar xf linux-3.16.1.tar.xz

필요한 빌드 도구를 설치하고 커널 구성을 수행하십시오.

Ubuntu의 툴체인 ( gcc, make등) 을 얻으려면 빌드 필수빌드 필수 설치 메타 패키지를 설치하십시오 .

sudo apt-get update
sudo apt-get install build-essential

커널에 들어가는 것을 구성하는 합리적으로 사용자에게 친숙한 두 가지 방법은 make대상 xconfig과에서 제공됩니다 menuconfig.

xconfigmenuconfig텍스트 기반 의 그래픽 구성 유틸리티를 실행합니다 (예 : 인터페이스가 터미널에 완전히 표시됨). 각각에는 build-essential에서 제공 하지 않는 추가 소프트웨어가 필요합니다 .빌드 필수 설치

그래픽으로 구성 하려면 libqt4-devlibqt4-dev 설치 pkg-config를 설치pkg-config 설치 하고 다음을 실행하십시오make xconfig.

sudo apt-get install libqt4-dev pkg-config
make xconfig

터미널에서 구성 하려면libncurses5-dev(이 정보에 대해 Hannu 덕분에)설치하고 다음을 실행하십시오make menuconfig.

sudo apt-get install libncurses5-dev
make menuconfig

구성된 커널을 빌드하십시오.

먼저 이것을 실행하여 커널을 컴파일하고 다음을 생성하십시오 vmlinuz.

make

vmlinuz"커널"입니다. 특히 GRUB 또는 사용하는 다른 부트 로더에 의해 압축 해제되어 메모리에로드되는 것은 커널 이미지입니다 .

그런 다음 로드 가능한 커널 모듈을 빌드하십시오 .

make modules

새로 빌드 한 커널을 설치하십시오.

이러한 make명령이 성공적으로 완료되면 새 커널을 설치할 차례입니다. 먼저 모듈을 설치하십시오 :

sudo make modules_install

그런 다음 커널 자체를 설치하십시오 .

sudo make install

vmlinuz-3.16.1(의 사본 vmlinuz), config-3.16.1(커널 구성 매개 변수를 저장하는 텍스트 파일) 및 System.map-3.16.1( 커널 기호 조회 테이블 )을에 넣 습니다 /boot. 자세한 내용 은 Hadron 및의 comp.os.linux.misc 게시물을 참조하십시오 man installkernel.

커널을 시작하고 시스템을 부팅 할 수 있도록 최종 설정 :

이 섹션은 부분적으로 커널 / 컴파일의 정보를 기반으로합니다 .

커널이 필요한 곳에는 다음이 필요합니다.

다음을 사용하여 initramfs 생성하십시오mkinitramfs .

cd /boot
sudo mkinitramfs -ko initrd.img-3.16.1 3.16.1

9.10 이후 우분투에서 기본값 이었던 GRUB2 부트 로더의 구성을 업데이트 할 때 새 커널을 자동으로 감지하고 부팅 옵션을 추가해야합니다.

sudo update-grub

커널을 사용해보십시오.

이제 새 커널을 테스트하기 위해 재부팅 할 수 있습니다. 설치된 다른 커널 중에서 선택할 수있는 GRUB 부팅 메뉴를 보려면 부팅하는 동안 길게 Shift누르거나 눌러야 Esc할 수도 있습니다.

커널 (또는 다른 커널)을 기본값으로 설정 하려면 GRUB 부팅 순서를 어떻게 변경합니까?를 참조하십시오 .


3 단계, make menuconfig요구 사항apt get install libncurses5-dev
Hannu

@ Hannu 감사합니다, 나는 그것을 언급하는 것을 완전히 잊었습니다. 64 비트 시스템 사용자는 32 비트 프로그램 지원을 위해 "ia32-libs"가 필요할 수 있습니다.
초보자

버전 독립적 인 패키지를 찾는 것이 더 나을 수 있습니다 ... 그래도 확실하지 않습니다.
Hannu

@EliahKagan 감사합니다. 지금은 괜찮습니까 아니면 완전히 삭제해야합니까? 나는 그 일에 아무런 문제가 없습니다.
초보자

1
-1 우분투 커널을 생성하지 않습니다 . 심지어 .deb 파일도 생성하지 않습니다. 이것은 문제를위한 레시피입니다.
Aleksandr Dubinsky

3

https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel 에서 우분투 커널 을 만드는 빠른 지침을 찾을 수 있습니다 .

전체 위키를 복사하지는 않지만 현재 설치 한 Ubuntu 커널 버전을 컴파일하는 최소 단계를 나열합니다. (최신 버전을 얻으려면 다음 Ubuntu 릴리스의 커널 git 저장소를 복제하십시오.) Ubuntu 16.04에서 테스트되었습니다.

# Get source code
apt-get source linux-image-$(uname -r)

# Install dependencies
sudo apt-get build-dep linux-image-$(uname -r)

# Compile
cd linux-4.4.0
fakeroot debian/rules clean
fakeroot debian/rules binary

# Install (obviously the versions will be different)
cd ..
sudo dpkg -i linux-image-4.4.0-38-generic_4.4.0-38.57_amd64.deb linux-headers-4.4.0-38_4.4.0-38.57_all.deb linux-headers-4.4.0-38-generic_4.4.0-38.57_amd64.deb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.