사용자 정의 커널 빌드가 매우 큽니다.

사용자 정의 커널 빌드가 매우 큽니다.

RPM으로 사용자 정의 커널을 직접 구축하고 싶습니다. 저는 사용 중인 배포판(이 경우 Centos)을 사용하고 .config있으며 최종 커널 설치 크기는 2.2Gb입니다. 불필요한 드라이버/모듈을 모두 선택 취소하고 .config를 업데이트했습니다. 커널을 만들 때 선택 취소한 드라이버가 컴파일되고 있는 것을 볼 수 있습니다. .config를 읽고 큰 커널을 컴파일하지 않으려면 어떤 단계를 놓치고 있습니까? 저장소의 커널은 내 커널에 비해 불과 몇 Mb에 불과합니다.

  1. 소스 코드 다운로드

    wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.138.tar.xz

  2. 소스코드 추출

    tar -xf linux-5.4.138.tar.xz

  3. elrepo에서 찾은 기존 구성을 복사합니다.

    cp ~/config-5.4.138-x86_64 linux-5.4.138/.config

  4. 달리기

    make oldconfig

  5. menuconfig를 사용하여 불필요한 드라이버/모듈을 구성 및 선택 취소하고 저장합니다.

    make menuconfig

  6. 빌드 속도

    make rpm-pkg -j4

결과 :

  586.3 MiB [##########]  kernel-5.4.138-1.x86_64.rpm
  147.8 MiB [##        ]  kernel-devel-5.4.138-1.x86_64.rpm
    1.3 MiB [          ]  kernel-headers-5.4.138-1.x86_64.rpm

냠 설치:

kernel          x86_64          5.4.138-1             /kernel-5.4.138-1.x86_64          2.2 G

도움이 된다면 여기 내 .config가 있습니다.https://pastebin.com/LBw6Gm1s

답변1

원하는 구성으로 elrepo의 kernel-lt-5.4.spec을 다시 빌드하세요. 즉, 이름에 커널 버전(현재 config-5.4.138-x86_64)이 있는 Source1에 필요한 편집을 수행합니다. 버전 번호를 높이세요. 시뮬레이션을 사용하여 생성된 SRPM을 구축합니다.

Red Hat 스타일 RPM 패키지에는 고유한 스크립트와 특정 방식으로 분할된 하위 패키지가 있습니다. 업스트림 RPM 사양과 완전히 다릅니다. 일부 디버깅 기호가 제거되지 않아 출력이 더 커졌습니다.

사양을 읽고 어떻게 다른지 알아보세요. 엘레포의 경우,이미지에서 kernel-lt-5.4.spec을 참조하세요.. 더 복잡하기는 하지만 Red Hat 스타일 커널 사양입니다. 연습의 초점인 패치된 kernel.org 장기 버전은 없습니다. make rpm-pkg일부 Makefile 호출을 통해 비교스크립트/패키지/mkspec, Red Hat 커널과 전혀 비슷하지 않습니다. 디버그 기호 제거 비활성화에 대한 설명을 참고하세요.

여기서 유일한 고딕 비트는 우리가 원하는 커널 파일에서 기호가 제거되는 것을 방지하기 위해 install_post를 재정의하는 것입니다.

아니요, 크기는 버그가 아닙니다. 커널 해커가 원하는 것은 디버깅 기호입니다.

업스트림(kernel.org)과 다운스트림(Red Hat, elrepo) 모두 자체 패키지 빌드 스크립트를 가지고 있으면 매우 혼란스럽습니다. 하지만 이는 주의를 기울여야 할 세부 사항입니다. 반복 가능한 빌드와 사용자 정의 패키지에 대한 이해를 위해.


elrepo는 패키지 이름을 kernel-lt로 변경했습니다.(또는 kernel-ml)을 사용하여 RHEL 커널 패키지 이름과의 충돌을 방지합니다. 빌드 충돌이 발생하므로 주의하세요.

답변2

@JohnMahowald는 좋은 개요를 제공하므로 그의 답변도 참조하십시오. 그러나그 전에 수행할 수 있는 작업은 make rpm-pkg빌드 크기를 크게 줄여줍니다.

놓다 CONFIG_DEBUG_INFO_REDUCED=y:

여기서 Y를 선택하면 gcc에 구조 유형에 대한 디버깅 정보를 더 적게 생성하도록 지시하게 됩니다. 이는 전체 디버깅 정보(예: kgdb 또는 systemtap)가 필요한 도구가 충족되지 않음을 의미합니다. 그러나 줄 번호를 확인하기 위해 디버깅 정보만 필요한 경우에는 잃을 것이 없습니다. 장점은 빌드 디렉터리 개체 크기가 전체 DEBUG_INFO 빌드보다 훨씬 작고 컴파일 시간도 단축된다는 것입니다. 최신 gcc 버전에서만 작동합니다.

make menuconfig다음 메뉴 순서에서 이 콘텐츠를 찾을 수 있습니다 .

  • 커널 해킹
    • 컴파일 시간 검사 및 컴파일러 옵션
      • 디버깅 정보 줄이기

또한 다음을 설정했는지 확인하세요.디버깅 정보 압축(예: CONFIG_DEBUG_INFO_COMPRESSED_ZLIB=y) 같은 메뉴에 있습니다.

관련 정보