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


101

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


이점무엇인지에 대한 간단한 질문 은 모호 하거나 컨텍스트에서 매우 빨리 제거됩니다. What are the pros and cons of compiling your own kernel? Cons = 쉽지 않고 많은 상황에 부가가치 를 요구 하지 않는 것이 좋습니다 . 장점 = 보안, 성능, 당신이하고있는 일을 알고 있다면 NAS 장치는 예를 들어 리눅스를 사용하여 하드웨어를 작동시키고 네트워킹 및 그래픽 기능을 가지고 있습니다.
ron

답변:


73

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

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

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

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

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

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


25
학습 경험을 위해 자신 만의 커널을 만들고 싶다면 Gentoo 나 Linux From Scratch와 같은 소스 기반 Linux 배포판을 사용하여 수행한다고 주장합니다. 젠투 2 단계 설치 문서는 커널에서 리눅스를 빌드하는 것이 무엇을 의미하는지 이해하기위한 훌륭한 안내서입니다.
Sandy

합의 ...이 두 프로젝트는 이런 유형의 작업을 위해 만들어졌습니다.
개브.

물론 당신은 당신이 실제로 당신의 대답에 모순되는 것을 알고 있습니다. 커널을 컴파일하는 것의 유일한 이점이 그것을하는 방법을 배우는 것이라면 쓸모가 없을 것입니다-가치가 없습니다. 그러나 몇 마디 후에 당신은 그것이 귀중한 것이라고 말합니다 ...
rozcietrzewiacz

@rozcietrzewiacz 지식은 최고의 가치입니다. 커널을 컴파일하면 지식을 확장하는 데 도움이됩니다. 지식은 힘, 사람들은 권력을 얻기 위해 좋은 돈을 지불하고, 돈이 전이 속성에 의해, 그래서 오늘날의 세계에서 가치를 보유 ... - 당신이 구입하지 않는 경우, 여기입니다 : P
lunchmeat317

동의합니다. 얻은 지식에 대해서만 가치가 있습니다.
1100110

35

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

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

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

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

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


8
+1. 요즘 아이들은 'make menuconfig'가 무엇을 의미하는지조차 알지 못하고 스크립트 키디가 숨기지 않도록 커널 네트워크 코드를 패치하지 않아도됩니다. 다행히도 그 시절은 대부분 사라졌습니다.
axel_c

2
bisect버그가 어디서 도입되었는지 찾아 보려면 ing을 추가해야합니다 .
xenoterracide

1
이 의견이 OP의 질문과 관련이 없을 때 투표에 참여한 방법에 놀랍습니다. "대부분의 사용자는하지 않습니다 ..." OP의 질문은 혜택을 알고 싶어한다는 점에서 매우 분명합니다. "대부분의 사용자"가 여기저기서하는 일에 대한 귀하의 의견이 아닙니다.
Eric

30

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


15
대부분의 답변에 동의하지만 "상당히 더 빠름"에 대한 몇 가지 어려운 사실에 대해 궁금합니다. 새로운 사용자에게 데스크탑이 수작업으로 만든 커널을 사용하여 일반적으로 더 빠르게 실행될 것이라는 인상을주고 싶지 않습니다. 부팅 속도의 증가를 수량화 할 수 있습니까?
Sandy

2
이 답변은 15 년 전에 사실 이었지만 오늘날에는 실제로 관련이 없습니다. 대부분의 드라이버는 어쨌든 모듈로 제공되므로 메모리가 아닌 디스크의 공간 만 차지합니다. (또는 일부 배포판은 여전히 ​​initrd없이 제공됩니까? initrd없이 커널은 부팅해야하는 모든 드라이버를 포함해야합니다.) 부팅 시간과 같이 존재하지 않는 하드웨어를 감지하는 데 1 밀리 초 이상을 소비하는 드라이버는 비활성화 될 수 있습니다. 커널 부팅 옵션으로.
Gilles

1
@Michael 그것이 확인되지 않은 가정이라면, 대답에서 "상당히 더 빠른"을 "잠재적으로 더 빠른"로 바꾸는 것이 좋은 생각 일 것입니다 ... n00bs가 잘못 전달되지 않도록하는 것이 좋습니다. :-)
Sandy

3
@ Sandy Agreed, 그 n00bs 중 하나 인 것처럼 보이기 때문에 :). 수정
Michael Mrozek

2
부팅 시간에 대해 이야기하고있는 경고를 통해 "상당히 더 빠른"속도가 실제로 정당화된다고 생각합니다. 스톡 배포판 커널은 내가 사용하지 않을 하드웨어를 찾지 않기 위해 제거 한 것을 부팅하는 데 5-10 초가 더 오래 걸립니다. 런타임 속도는 아마도 무시할 만합니다. 실제로 그 속도를 안정적으로 측정 할 수는 없습니다.
Caleb

24

여기서 받아 들여진 대답은 "더 많은 속도 / 메모리 / xxx를 위해해야 ​​할 일이 아닙니다"라고 말하는 것으로 시작됩니다.

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

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

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


3
받아 들여진 대답의 주된 요점은 대부분의 하드웨어에서 자신의 커널을 컴파일하여 얻은 성능은 그것을 수행하는 방법을 배우는 데 필요한 시간이 아니며 옵션의 의미를 배우는 데 가치가 없다는 것입니다. 그것은 아마도 경험적 일 것입니다 : 이것에 대한 숫자를 찾는 것이 좋을 것입니다.
Andres Riofrio

그렇다면 원래 질문에 이것을 언급하지 않고 주장하는 근거에 대한 답변을 받아들이는 것이 불쾌합니다.
Eric

2
글쎄, 내 대답이 받아 들여진 것은 내 잘못이 아니다. 그리고 그렇습니다. 커널을 컴파일하면 "성능을 잃어 버리거나"저전력 머신에서 실행하는 데 도움이되는 경우가 있지만, 원래 질문이 특정 사용자가 아닌 사람이 요청한 것으로 가정했습니다 미리 컴파일해야하며 커널 컴파일의 이점이 무엇인지에 대한 일반적인 의미에서 궁금했습니다. 특정 요구 사항을 염두에두고있는 사람 만 커널 조정을 통해 이점을 얻을 수 있다고 주장합니다. 내 대답이 승인 된 이후 나는 사용자 정의 커널에 대한 더 많은 전력 사용자 이유를 해결하기 위해 그것을 개선거야
게이브.

14

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

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

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

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

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

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

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

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


모두 사실입니다. 그러나 모듈 로딩을 제거하면 부팅시 문제가 발생할 수 있습니다. 오늘날 대부분의 배포판에서는 모듈을로드해야한다고 가정합니다. 마지막으로 모듈을 끄면 Red Hat 부팅 과정에서 많은 오류 메시지가 나타납니다.
Mei

7

자신의 커널을 컴파일하면 커널 드라이버 개발 프로세스에 참여할 수 있습니다. 기존 드라이버에 PCI / USB 장치 ID를 제공하는 것과 같은 간단한 방법이든, 새로운 장치를 사용할 수있게 해줄 수도 있습니다. 커널 개발.

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

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


6

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

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

그러나 조심하십시오. 토끼 구멍을 뛰어 내리는 것이 의심 할 여지없이 상쾌한 이유는 생각보다 밤과 주말을 더 많이 잃을 것입니다!


3

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

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


2

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

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

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

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

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

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

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

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

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


1

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

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

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

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


1

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


1

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

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

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

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


-1

매우 특별한 하드웨어에 리눅스를 설치하려면, DS 보다 더 이국적이라고 말하면 , 자신의 커널을 크로스 컴파일해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.