웹사이트 검색

커널 컴파일 방법 - 데비안 방식


이 페이지에서

  1. 1 서문
  2. 2 커널 .deb 패키지 구축
    1. 2.1 커널 컴파일에 필요한 패키지 설치\n
    2. 2.2 커널 소스 다운로드
    3. 2.3 커널 소스에 패치 적용(선택 사항)\n
    4. 2.4 커널 구성
    5. 2.5 커널 구축
    6. 2.6 새 커널 설치

    1. 3.1 커널 컴파일에 필요한 패키지 설치\n
    2. 3.2 커널 소스 다운로드
    3. 3.3 커널 소스에 패치 적용(선택 사항)\n
    4. 3.4 커널 구성
    5. 3.5 커널 빌드 및 설치
    6. 3.6 설치 후 단계\n

    각 배포판에는 소스에서 사용자 지정 커널을 빌드하기 위한 몇 가지 특정 도구가 있습니다. 이 문서는 데비안(Etch) 시스템에서 커널을 컴파일하는 방법에 관한 것입니다. 배포판에서 제공하는 커널과 독립적으로 사용할 수 있도록 수정되지 않은 최신 바닐라 커널 소스를 사용하여 사용자 지정 커널을 빌드하는 방법을 설명합니다. 또한 커널 소스에 없는 기능이 필요한 경우 커널 소스를 패치하는 방법도 보여줍니다.

    나는 이것이 당신에게 효과가 있을 것이라는 어떠한 보증도 하지 않습니다!

    1 서문

    새 커널을 컴파일하는 두 가지 방법을 설명하겠습니다. 첫 번째 방법을 사용하면 시스템에 설치할 수 있고 다른 사람과 공유할 수 있고 다른 Debian Etch 시스템에 설치할 수 있는 커널 .deb 패키지가 생깁니다.

    두 번째 방법은 "전통적인" 방식으로 커널을 컴파일하는 것입니다. 이 방법은 모든 Linux 배포판에서 작동하지만 물론 커널 .deb 패키지로 끝나지는 않습니다.

    2 커널 .deb 패키지 구축

    이 장에서는 커널을 빌드하고 설치하고 다른 사람과 공유할 수 있는 .deb 패키지로 끝나는 방법을 보여줍니다.

    2.1 커널 컴파일에 필요한 패키지 설치

    먼저 패키지 데이터베이스를 업데이트합니다.

    apt-get update

    그런 다음 다음과 같이 필요한 모든 패키지를 설치합니다.

    apt-get install kernel-package ncurses-dev fakeroot wget bzip2 build-essential

    2.2 커널 소스 다운로드

    다음으로 원하는 커널을 /usr/src에 다운로드합니다. http://www.kernel.org/pub/linux/kernel/v2.6/으로 이동). 그런 다음 다음과 같이 /usr/src에 다운로드할 수 있습니다.

    cd /usr/src
    wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2

    그런 다음 커널 소스의 압축을 풀고 커널 소스 디렉토리에 대한 symlink linux를 만듭니다.

    tar xjf linux-2.6.21.3.tar.bz2
    ln -s linux-2.6.21.3 linux
    cd /usr/src/linux

    2.3 커널 소스에 패치 적용(선택 사항)

    새 커널에서 기본적으로 지원하지 않는 하드웨어용 드라이버가 필요하거나 가상화 기술 또는 아직 커널에 적용되지 않은 다른 최첨단 기술에 대한 지원이 필요한 경우가 있습니다. 이 모든 경우에 커널 소스를 패치해야 합니다(사용 가능한 패치가 있는 경우...).

    이제 필요한 패치(이 예에서는 patch.bz2라고 함)를 /usr/src에 다운로드했다고 가정해 보겠습니다. 다음은 커널 소스에 적용하는 방법입니다(여전히 /usr/src/linux 디렉토리에 있어야 함).

    bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch.bz2 | patch -p1

    첫 번째 명령은 단지 테스트일 뿐이며 소스에는 아무런 영향을 미치지 않습니다. 오류가 표시되지 않으면 실제로 패치를 적용하는 두 번째 명령을 실행할 수 있습니다. 첫 번째 명령에 오류가 표시되면 수행하지 마십시오!

    커널 소스에 커널 사전 패치를 적용할 수도 있습니다. 예를 들어 커널 2.6.22-rc3에서만 사용할 수 있는 기능이 필요하지만 이 커널에 대한 전체 소스가 아직 출시되지 않은 경우입니다. 대신 patch-2.6.22-rc3.bz2를 사용할 수 있습니다. 해당 패치를 2.6.21 커널 소스에 적용할 수 있지만 커널 2.6.21.1 또는 2.6.21.2 등에는 적용할 수 없습니다. http://kernel.org/patchtypes/pre.html에 설명되어 있습니다.

    사전 패치는 Linux용 알파 릴리스와 동일합니다. 그들은 아카이브의 테스트 디렉토리에 있습니다. 패치(1) 유틸리티를 사용하여 세 부분으로 된 버전 번호가 있는 이전 전체 릴리스의 소스 코드에 적용해야 합니다(예: 2.6.12-rc4 사전 패치는 2.6.11 커널 소스에 적용해야 합니다. , 예: 2.6.11.10.)

    따라서 2.6.22-rc3 커널을 컴파일하려면 2.6.21 커널 소스를 다운로드해야 합니다(http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21. tar.bz2) 커널 2.6.21.3 대신 3단계에서!

    다음은 2.6.22-rc3 패치를 커널 2.6.21에 적용하는 방법입니다.

    cd /usr/src 
    wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
    cd /usr/src/linux
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

    2.4 커널 구성

    현재 작동 중인 커널의 구성을 새 커널의 기반으로 사용하는 것이 좋습니다. 따라서 기존 구성을 /usr/src/linux에 복사합니다.

    make clean && make mrproper
    cp /boot/config-`uname -r` ./.config

    그럼 우리는 실행

    make menuconfig

    커널 구성 메뉴가 나타납니다. 대체 구성 파일 로드로 이동하여 구성 파일로 .config(현재 작동 중인 커널의 구성 포함)를 선택합니다.

    그런 다음 커널 구성 메뉴를 탐색하고 선택합니다. 완료하고 종료를 선택하면 다음 질문(새 커널 구성을 저장하시겠습니까?)에 예를 선택하여 대답합니다.

    2.5 커널 구축

    커널을 빌드하려면 다음 두 명령을 실행하십시오.

    make-kpkg clean
    fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

    --append-to-version= 다음에 커널을 식별하는 데 도움이 되는 문자열을 작성할 수 있지만 빼기(-)로 시작하고 공백을 포함해서는 안 됩니다.

    이제 인내심을 가지십시오. 커널 구성과 프로세서 속도에 따라 커널 컴파일에 몇 시간이 걸릴 수 있습니다.

    2.6 새 커널 설치

    성공적인 커널 빌드 후 /usr/src 디렉토리에서 두 개의 .deb 패키지를 찾을 수 있습니다.

    cd /usr/src
    ls -l

    내 테스트 시스템에서는 linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb(실제 커널 포함) 및 linux-headers-2.6.21.3-custom_2.6.21.3- custom-10.00.Custom_i386.deb(나중에 추가 커널 모듈을 컴파일하려는 경우 필요한 파일 포함). 다음과 같이 설치합니다.

    dpkg -i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
    dpkg -i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb

    (이제 두 개의 .deb 파일을 다른 Debian Etch 시스템으로 전송하고 정확히 동일한 방식으로 설치할 수 있습니다. 즉, 그곳에서 커널을 다시 컴파일할 필요가 없습니다.)

    그게 다야. GRUB 부트로더 구성 파일 /boot/grub/menu.lst가 자동으로 수정되었으며 새 커널용 램디스크가 /boot에 생성되었습니다.

    이제 시스템을 재부팅합니다.

    shutdown -r now

    부팅 프롬프트에서 새 커널을 선택합니다(기본적으로 선택되어 있어야 함).

    모든 것이 잘되면 새 커널이 나와야 합니다. 다음을 실행하여 새 커널을 실제로 사용하는지 확인할 수 있습니다.

    uname -r

    이것은 다음과 같이 표시되어야 합니다.

    2.6.21.3-custom

    시스템이 시작되지 않으면 다시 시작하고 부팅 프롬프트에서 이전 커널을 선택합니다. 이제 작동하는 커널 컴파일을 다시 시도할 수 있습니다. /boot/grub/menu.lst에서 작동하지 않는 커널의 스탠자를 제거하는 것을 잊지 마십시오.

    3 전통적인 방식으로 커널 구축

    이 장에서는 모든 Linux 시스템에서 사용할 수 있는 다른 접근 방식을 설명합니다(ramdisk 생성 또는 부트로더 업데이트와 같은 세부 사항 제외). 물론 커널 .deb 패키지로 끝나지는 않을 것입니다.

    3.1 커널 컴파일에 필요한 패키지 설치

    먼저 패키지 데이터베이스를 업데이트합니다.

    apt-get update

    그런 다음 다음과 같이 필요한 모든 패키지를 설치합니다.

    apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential

    3.2 커널 소스 다운로드

    다음으로 원하는 커널을 /usr/src에 다운로드합니다. http://www.kernel.org/pub/linux/kernel/v2.6/으로 이동). 그런 다음 다음과 같이 /usr/src에 다운로드할 수 있습니다.

    cd /usr/src
    wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2

    그런 다음 커널 소스의 압축을 풀고 커널 소스 디렉토리에 대한 symlink linux를 만듭니다.

    tar xjf linux-2.6.21.3.tar.bz2
    ln -s linux-2.6.21.3 linux
    cd /usr/src/linux

    3.3 커널 소스에 패치 적용(선택 사항)

    새 커널에서 기본적으로 지원하지 않는 하드웨어용 드라이버가 필요하거나 가상화 기술 또는 아직 커널에 적용되지 않은 다른 최첨단 기술에 대한 지원이 필요한 경우가 있습니다. 이 모든 경우에 커널 소스를 패치해야 합니다(사용 가능한 패치가 있는 경우...).

    이제 필요한 패치(이 예에서는 patch.bz2라고 함)를 /usr/src에 다운로드했다고 가정해 보겠습니다. 다음은 커널 소스에 적용하는 방법입니다(여전히 /usr/src/linux 디렉토리에 있어야 함).

    bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch.bz2 | patch -p1

    첫 번째 명령은 단지 테스트일 뿐이며 소스에는 아무런 영향을 미치지 않습니다. 오류가 표시되지 않으면 실제로 패치를 적용하는 두 번째 명령을 실행할 수 있습니다. 첫 번째 명령에 오류가 표시되면 수행하지 마십시오!

    커널 소스에 커널 사전 패치를 적용할 수도 있습니다. 예를 들어 커널 2.6.22-rc3에서만 사용할 수 있는 기능이 필요하지만 이 커널에 대한 전체 소스가 아직 출시되지 않은 경우입니다. 대신 patch-2.6.22-rc3.bz2를 사용할 수 있습니다. 해당 패치를 2.6.21 커널 소스에 적용할 수 있지만 커널 2.6.21.1 또는 2.6.21.2 등에는 적용할 수 없습니다. http://kernel.org/patchtypes/pre.html에 설명되어 있습니다.

    Prepatches는 Linux용 알파 릴리스와 동일합니다. 그들은 아카이브의 테스트 디렉토리에 있습니다. 패치(1) 유틸리티를 사용하여 세 부분으로 된 버전 번호가 있는 이전 전체 릴리스의 소스 코드에 적용해야 합니다(예: 2.6.12-rc4 사전 패치는 2.6.11 커널 소스에 적용해야 합니다. , 예: 2.6.11.10.)

    따라서 2.6.22-rc3 커널을 컴파일하려면 2.6.21 커널 소스를 다운로드해야 합니다(http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21. tar.bz2) 커널 2.6.21.3 대신 3단계에서!

    다음은 2.6.22-rc3 패치를 커널 2.6.21에 적용하는 방법입니다.

    cd /usr/src 
    wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
    cd /usr/src/linux
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

    3.4 커널 구성

    현재 작동 중인 커널의 구성을 새 커널의 기반으로 사용하는 것이 좋습니다. 따라서 기존 구성을 /usr/src/linux에 복사합니다.

    make clean && make mrproper
    cp /boot/config-`uname -r` ./.config

    그럼 우리는 실행

    make menuconfig

    커널 구성 메뉴가 나타납니다. 대체 구성 파일 로드로 이동하여 구성 파일로 .config(현재 작동 중인 커널의 구성 포함)를 선택합니다.

    그런 다음 커널 구성 메뉴를 탐색하고 선택합니다. 완료하고 종료를 선택하면 다음 질문(새 커널 구성을 저장하시겠습니까?)에 예를 선택하여 대답합니다.

    3.5 커널 빌드 및 설치

    커널을 빌드하려면 다음 명령을 실행하십시오.

    make all
    make modules_install
    make install

    이제 인내심을 가지십시오. 커널 구성과 프로세서 속도에 따라 커널 컴파일에 몇 시간이 걸릴 수 있습니다.

    3.6 설치 후 단계

    이제 새 커널이 설치되었지만 여전히 새 커널을 위한 램디스크가 필요하고(그렇지 않으면 시스템이 부팅되지 않을 가능성이 높습니다!) GRUB 부트로더에 새 커널에 대해 알려야 합니다.

    먼저 다음과 같이 합니다.

    depmod 2.6.21.3
    apt-get install yaird

    그런 다음 다음 명령을 사용하여 ramdisk를 만듭니다.

    mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3

    GRUB 구성은 Debian Etch에서 매우 쉽습니다. 우리가 해야 할 일은 실행하는 것뿐이야

    update-grub

    그러면 새 커널과 ramdisk가 감지되고 /boot/grub/menu.lst가 업데이트됩니다.

    이제 시스템을 재부팅합니다.

    shutdown -r now

    부팅 프롬프트에서 새 커널을 선택합니다(기본적으로 선택되어 있어야 함). 모든 것이 잘되면 새 커널이 나와야 합니다. 다음을 실행하여 새 커널을 실제로 사용하는지 확인할 수 있습니다.

    uname -r

    이것은 다음과 같이 표시되어야 합니다.

    2.6.21.3

    시스템이 시작되지 않으면 다시 시작하고 부팅 프롬프트에서 이전 커널을 선택합니다. 이제 작동하는 커널 컴파일을 다시 시도할 수 있습니다. /boot/grub/menu.lst에서 작동하지 않는 커널의 스탠자를 제거하는 것을 잊지 마십시오.

    4 링크

    • 데비안: http://www.debian.org
    • Linux 커널 아카이브: http://www.kernel.org