it-swarm-ko.tech

자신의 리눅스 커널을 컴파일하면 어떤 이점이 있습니까?

Linux 커널을 직접 컴파일하면 어떤 이점이 있습니까? 하드웨어에 맞게 사용자 정의하여 생성 할 수있는 효율성이 있습니까?

107
jjclarkson

내 마음에, 당신이 당신 자신의 리눅스 커널을 컴파일함으로써 얻는 유일한 이점은 :

자신의 리눅스 커널을 컴파일하는 방법을 배웁니다.

더 많은 속도/메모리/xxx를 위해 할 필요가 없습니다 . 그것이 당신이 개발에 있다고 느끼는 단계라면 할 가치있는 일입니다. 이 "오픈 소스"전체가 무엇인지, 커널의 다른 부분이 어떻게 그리고 무엇인지에 대해 더 깊이 이해하고 싶다면 갈 수 있어야합니다. 부팅 시간을 3 초로 단축하려는 경우 요점은 ... SSD를 구입하십시오. 궁금한 점이 있다면 배우고 싶다면 자신의 커널을 컴파일하는 것이 좋습니다.

그렇게 말하면 자신의 커널을 컴파일하는 것이 적절한 몇 가지 이유가 있습니다 (여러 사람이 다른 답변에서 지적했듯이). 일반적으로 다음과 같은 특정 결과에 대한 특정 요구에서 발생합니다.

  • 리소스가 제한된 하드웨어에서 시스템을 부팅/실행해야합니다
  • 패치를 테스트하고 개발자에게 피드백을 제공해야합니다
  • 충돌을 일으키는 것을 비활성화해야합니다
  • 나는 리눅스 커널을 개발해야한다
  • 지원되지 않는 하드웨어에 대한 지원을 활성화해야합니다
  • 시스템의 현재 한계에 도달했기 때문에 x의 성능을 개선해야합니다 (그리고 내가하는 일을 알고 있습니다)

문제는 모든 것이 이미 정상적으로 작동 할 때 자신의 커널을 컴파일하는 데 본질적인 이점이 있다는 생각에 있으며, 나는 그렇게 생각하지 않습니다. 필요없는 것들을 비활성화하고 조정할 수있는 것들을 조정하는 데 많은 시간을 할애 할 수는 있지만, 리눅스 커널은 이미 most 사용자 상황.

75
gabe.

대부분의 사용자는 자신의 커널을 컴파일 할 필요가 없으며, 배포가이 작업을 수행했습니다. 일반적으로 배포판에는 배포판 작동 방식의 특정 부분, 장치 드라이버의 백 포트 및 최신이지만 출시되지 않은 커널 버전 또는 사용자와 함께 개척하는 기능의 수정본과 통합 할 수있는 패치 세트가 포함됩니다.

자신의 커널을 컴파일 할 때 몇 가지 옵션이 있으며, 공식 Linus Torvalds 커널을 컴파일 할 수 있습니다. 배포판에 의해 추가 된 패치 나 사용자 지정 내용은 포함되지 않습니다 (좋거나 나쁠 수 있음). 배포판 재구성 도구를 사용하여 자신 만의 커널을 만드십시오.

커널을 재 구축하려는 이유는 다음과 같습니다.

  • 버그를 패치하거나 프로덕션 시스템에 특정 기능을 추가하면 실제로 단일 커널로 전체 커널을 업그레이드 할 위험이 없습니다.
  • 특정 장치 드라이버 또는 새로운 기능을 시험해 보려면
  • 커널을 확장하려면 작업하십시오
  • "알파"모듈 또는 기능 중 일부를 테스트합니다.

많은 개발자들이 특수 장치 드라이버가 필요하거나 필요하지 않은 기능을 제거하려는 임베디드 시스템 또는 셋톱 박스 용 커널의 사용자 정의 버전도 생성하기 위해이 도구를 사용합니다.

36
miguel.de.icaza

커널을 직접 컴파일하면 컴퓨터와 관련된 부분 만 포함 할 수 있으므로 부팅시 특히 작고 빠를 수 있습니다. 일반 커널은 가능한 많은 하드웨어를 지원해야합니다. 부팅 할 때 컴퓨터에 어떤 하드웨어가 연결되어 있는지 감지하고 적절한 모듈을로드하지만, 코드를 커널에 직접 굽는 대신 모든 것을 수행하는 데 시간이 걸리고 동적 모듈을로드해야합니다. 컴퓨터에 커널이 하나만있을 때 커널이 400 개의 서로 다른 CPU를 지원할 이유가 없거나 블루투스 마우스가없는 경우 지원할 수있는 공간이 없기 때문에 공간을 모두 확보 할 수 있습니다

30
Michael Mrozek

나는 여기에 받아 들여진 대답이 "더 많은 속도/메모리/xxx를 위해해야 ​​할 일이 아니다"라는 말로 시작한다는 것을 믿을 수 없다.

이것은 완전히 거짓입니다. 필자는 불필요한 코드를 제거하고 주로 하드웨어와 관련된 성능 향상 코드를 포함하도록 커널을 사용자 정의 빌드합니다. 예를 들어, 일부 구형 하드웨어를 실행하고이 내장 기능이있는 일부 구형 MoBos에서 HPT36x 칩셋 지원과 같은 거의 사용되지 않는 커널 드라이버를 활성화하여 성능을 향상시킬 수 있습니다.

또 다른 예로, Slackware의 BIG SMP가 기본값이며 Dell 2800의 경우 예를 들어 GFSD (커널 모듈이 아님)와 같은 작업을 실행하기 위해 상당한 크기의 풋 프린트를 소비하며, 그에 따라 I에 대한 CPU 틱도 소비합니다. 필요하지 않습니다. 마찬가지로 NFSD와 다른 모든 사람들이 리눅스를 상자에 넣고 실행하려고하지만 "속도/메모리/xxx 무엇이든"에 관심이 있다면 이러한 모든 문제를 해결하기 위해 모든 정신을 기쁘게합니다. .

모든 프로덕션 박스는 커스텀 커널입니다. Dell 시리즈 (2800, 2850, 2900 등) 하드웨어와 같은 일반적인 하드웨어를 사용하는 경우 커널의 .config 파일을 각 상자에 복사하고 커널을 컴파일하고 설치하는 것은 간단합니다.

24
Eric

자신의 커널을 컴파일하면 도움이되는 상황은 다음과 같습니다.

  • 모듈 로딩이 비활성화 된 커널이 더 안전합니다. 이를 위해서는 모듈로 컴파일하는 대신 필요한 모듈을 선택하여 커널의 일부로 포함시켜야합니다.

  • 보안을 위해/dev/kmem에 대한 지원을 비활성화하거나 적절한 컴파일러 옵션을 사용하여이를 지원하는 것이 좋습니다. 나는 대부분의 배포판이 기본적 으로이 작업을 수행한다고 생각합니다.

  • 가능하면 initrd를 사용하지 않는 것이 좋습니다. 커널을 부팅하는 하드웨어에 맞게 사용자 정의하면 initrd가 제거됩니다.

  • 때로는 최신 커널 버전에 필요한 기능이 있지만 오늘날에는 매우 드 rare니다. 데비안을 처음 사용했을 때 2.4 커널을 사용하고 있었지만 udev 지원을 위해서는 2.6 커널이 필요했습니다.

  • 필요없는 네트워킹 프로토콜/옵션을 비활성화하면 TCP/IP 성능을 향상시킬 수 있습니다.

  • 옵션을 비활성화하면 커널의 메모리 사용량이 줄어 듭니다. 이는 RAM 환경에서 중요합니다. 256MB RAM 시스템을 라우터가 도움이됩니다.

  • 나는 일반적으로 직렬 또는 ssh를 통해서만 로그인하는 시스템에서/dev의 모든 "tty"장치를 성가 시게합니다.

14
LawrenceC

자체 커널을 컴파일하면 커널 개발 프로세스에 참여할 수 있습니다. 기존 드라이버에 PCI/USB 장치 ID를 제공하여 새로운 장치를 사용할 수있게하는 등 코어 개발에 깊이 관여 할 수 있습니다. 커널 개발.

또한 하드웨어에서 개발 커널을 테스트하고 회귀가 발견되면 피드백을 제공 할 수 있습니다. 이는 드문 하드웨어를 가지고있는 경우 특히 다른 사람에게 도움이 될 수 있습니다. 배포판 커널을 기다리는 경우 문제 보고서의 수정 사항이 새 배포판 커널 필터로 필터링되는 데 시간이 걸릴 수 있습니다.

또한 개인적으로 보유하고있는 하드웨어 만 지원하도록 커널을 컴파일하고 싶습니다. 배포판 커널을 실행하고 lsmod(8)의 출력을 보면, 가지고 있지 않은 하드웨어에 대해 많은 모듈이로드 된 것을 볼 수 있습니다. 이것은 모듈 목록,/proc,/sys 및 로그를 오염 시켜서 무언가를 검색 할 때 노이즈 사이에 숨길 수 있습니다. 또한 해당 모듈이 진단하려는 문제에 영향을 미치지 않는다는 것을 100 % 확신 할 수 없습니다.

7
camh

두 번째 gabe.의 답변 (내 의견이 너무 길어서 답변으로 게시하고 있습니다).

고도로 전문화 된 목적 (예 : 임베디드 머신, 엄격한 보안 프로파일 링)이 없다면 커널을 수행하는 방법을 보는 것 외에는 자신의 커널을 컴파일하는 데 실질적인 이점이 없습니다. 옵션을 체계적으로 검토하여 서로 상호 작용하여 시스템을 구축하는 방법을 보는 것은 시스템 작동 방식을 이해하는 좋은 방법입니다. 수행하려는 작업에 목적이없는 것으로 보이는 구성 요소를 제거하려고 할 때 알아 낸 것이 놀랍습니다.

그러나 경고-토끼 구멍을 뛰어 내리는 것이 의심 할 여지없이 상쾌한 이유는 가능한 한 밤과 주말을 더 많이 잃을 것입니다!

6
gvkv

직장에서 vserver 및 unionfs와 같은 트리 외부 패치를 적용하기 위해 수동 롤 커널을 사용합니다.

집에서, 나는 어떤 커밋이 내가 경험하고있는 버그를 도입했는지 찾기 위해 수동 롤 커널을 컴파일하고 있습니다. 일단 그 작업을 마치면, 배포판 (Debian)에서 버그가 수정 될 때까지 수동 롤링 커널을 고수 할 것이며,이 시점에서 다시 커널로 되돌릴 것입니다.

3
jmtd

이 글타래는 오래되었지만 질문이 제기되었을 때와 마찬가지로 오늘날에도 유효합니다!

답은 다음과 같습니다. 필요와 요구 사항에 따라 원하는 Linux 커널을 컴파일합니다.

많은 시나리오가 유효합니다 :

  1. 엔지니어는 시스템의 성능 및 보안 요구 사항/요구 사항을 충족하기 위해 빌드를 요구하고 지정된 기준을 충족하거나 능가하도록 재 컴파일합니다.

  2. 귀하는 일반 사용자이며 가능한 한 오래 계속 사용하고 싶은 기존 시스템을 보유하고 있으며 기존 시스템을 최적화하기 위해 구성 요소를 추가/제거하도록 재 컴파일합니다.

  3. 귀하는 최신 하드웨어를 가진 일반 사용자이며 충분한 메모리/RAM을 가지고 있습니다. 다시 컴파일 할 필요는 없지만 시스템에 대해 조금 더 배우고 싶다면 여전히 할 수 있습니다.

  4. 귀하는 Microsoft 및/또는 Mac의 일상적인 사용자가되기를 원하고 재 컴파일하지 말고 업스트림 배포판의 업데이트를 사용하십시오.

  5. 시나리오가 계속 온다 :-)

Mac/Windows 사용자와 달리 Linux가 제공하는 것은 선택입니다. 요구 사항에 맞게 시스템을 쉽게 사용하거나 최적화 할 수 있습니다.

2
user4565

여기에 언급 된 많은 사용자 정의 컴파일 된 커널 외에 다른 경우는 모듈 로딩이 불가능하고 특정 작업을 위해 특정 머신에 완전히 작동하는 커널을 전달해야하는 특수한 네트워크 부트 환경을 설정하는 것입니다.

1
Caleb

커스텀 커널을 컴파일하는 이유를 언급 한 사람이 아무도 없습니다.

다른 C/C++ 컴파일러를 사용하고 싶기 때문입니다. GCC는 리눅스 커널을 컴파일하는데 아주 좋습니다. 그러나 매우 뛰어난 컴파일러가 있습니다! GCC의 최적화는 인텔의 C/C++ 컴파일러보다 약간 뒤떨어져 있습니다. 그리고 인텔은 고성능 리눅스 커널을 만드는 데 필수적인 성능 프리미티브 라이브러리와 vtune 도구를 제공합니다. GCC와 G ++로만 얻을 수 있습니다. 실제로 결과에 상관없이 컴파일러에 의해 결과가 제한됩니다. 그래서 나는 Intel 컴파일러와 성능 라이브러리를 사용합니다. 약 1.5GB 다운로드이지만 좋은 컴파일러에 무엇이 포함되어 있는지 조금 알 수 있습니다.

인텔의 C/C++ 컴파일러는 비상업적 용도로 무료로 제공됩니다. 그러나 인텔 웹 사이트를 검색하기위한 비 상업 라이센스 인텔 c ++ 컴파일러 다운로드 페이지를 구글로 검색하는 것이 더 쉽습니다. 나는 보통 아무것도 GCC/G ++를 사용하지 않습니다. 그리고 당신은 프로그래머 일 필요가 없습니다. 환경을 설정하고 make 파일에서 인텔 컴파일러를 가리 키도록 두 줄을 변경하면됩니다.

그럼 당신은 심각한 속도를 얻을 수 있습니다!

1
SwanSword

대부분의 경우 일반 커널은 거의 모든 하드웨어에 적합합니다. 또한 일반적으로 배포 특정 패치를 포함하므로 자체 커널을 컴파일하면 문제가 발생할 수 있습니다.

자신의 커널을 컴파일하는 공명은 다음과 같습니다.

  • 소스 기반 배포판을 사용하므로 '일반적인'커널이 없습니다.
  • 커널 개발자이고 커널을 개발합니다
  • 하드 드라이브가 매우 제한된 임베디드 장치의 경우 예를 들어 커널을 사용자 정의해야합니다.
  • 일부 드라이버는 컴파일되지 않습니다 (매우 드문 경우)
  • 커널을 패치하고 싶다 AND 하고있는 일을 알고있다
  • 커널 컴파일 방법을 배우고 싶다

소스 기반 배포판을 사용하지 않으면 커널을 전혀 컴파일하지 않습니다.

1
Maciej Piechotka