답변:
내 마음에, 당신이 정말로 자신의 리눅스 커널을 컴파일함으로써 얻는 유일한 이점은 :
자신의 리눅스 커널을 컴파일하는 방법을 배웁니다.
더 빠른 속도 / 메모리 / xxx를 위해 해야 할 일은 아닙니다 . 그것이 당신이 개발에 있다고 느끼는 단계라면 할 가치가 있습니다. 이 "오픈 소스"전체가 무엇인지, 커널의 다른 부분이 어떻게 그리고 무엇인지에 대해 더 깊이 이해하고 싶다면 갈 수 있어야합니다. 부팅 시간을 3 초로 단축하려고한다면 ... 요점은 ... ssd를 구입하십시오. 궁금한 점이 있다면 배우고 싶다면 커널을 컴파일하는 것이 좋습니다.
그렇게 말하면 자신의 커널을 컴파일하는 것이 적절한 몇 가지 이유가 있습니다 (여러 사람이 다른 답변에서 지적했듯이). 일반적으로 다음과 같은 특정 결과에 대한 특정 요구에서 발생합니다.
문제는 모든 것이 이미 정상적으로 작동 할 때 자신의 커널을 컴파일하는 데 본질적인 이점이 있다는 생각에 있습니다. 저는 그렇게 생각하지 않습니다. 필요하지 않은 것들을 비활성화하고 조정할 수있는 것들을 수정하는 데 많은 시간을 할애 할 수는 있지만, 리눅스 커널은 이미 대부분의 사용자 상황에서 ( 배포에 의해) 잘 조정되어 있습니다 .
대부분의 사용자는 자신의 커널을 컴파일 할 필요가 없으며, 배포가이 작업을 수행했습니다. 일반적으로 배포판에는 배포판 작동 방식의 특정 부분, 장치 드라이버의 백 포트 및 최신이지만 출시되지 않은 커널 버전 또는 사용자와 함께 개척하는 기능의 수정본과 통합 할 수있는 패치 세트가 포함됩니다.
자신의 커널을 컴파일 할 때 몇 가지 옵션이 있으며, 공식 Linus Torvalds 커널을 컴파일 할 수 있습니다. 배포판에 의해 추가 된 패치 나 사용자 지정 내용은 포함되지 않습니다 (좋거나 나쁠 수 있음). 배포판 재구성 도구를 사용하여 자신 만의 커널을 만드십시오.
커널을 재 구축하려는 이유는 다음과 같습니다.
많은 개발자들이 특수 장치 드라이버가 필요하거나 필요하지 않은 기능을 제거하려는 임베디드 시스템 또는 셋톱 박스 용 커널의 사용자 정의 버전도 생성하기 위해이 도구를 사용합니다.
bisect
버그가 어디서 도입되었는지 찾아 보려면 ing을 추가해야합니다 .
커널을 직접 컴파일하면 컴퓨터와 관련된 부분 만 포함 할 수 있으므로 부팅시 특히 작고 빠를 수 있습니다. 일반 커널은 가능한 한 많은 하드웨어를 지원해야합니다. 부팅 할 때 컴퓨터에 어떤 하드웨어가 연결되어 있는지 감지하고 적절한 모듈을로드하지만, 코드를 커널에 직접 굽는 대신 모든 것을 수행하는 데 시간이 걸리고 동적 모듈을로드해야합니다. 컴퓨터에 커널이 하나만있을 때 커널이 400 개의 서로 다른 CPU를 지원할 이유가 없거나 블루투스 마우스가없는 경우 지원할 수있는 공간이 없기 때문에 공간을 모두 확보 할 수 있습니다
여기서 받아 들여진 대답은 "더 많은 속도 / 메모리 / xxx를 위해해야 할 일이 아닙니다"라고 말하는 것으로 시작됩니다.
이것은 완전히 거짓입니다. 필자는 불필요한 코드를 제거하고 주로 하드웨어와 관련된 성능 향상 코드를 포함하도록 커널을 사용자 정의 빌드합니다. 예를 들어, 일부 구형 하드웨어를 실행하고이 내장 기능이있는 일부 구형 MoBos에서 HPT36x 칩셋 지원과 같은 거의 사용되지 않는 커널 드라이버를 활성화하여 성능을 향상시킬 수 있습니다.
또 다른 예로, Slackware의 BIG SMP가 기본값이며 Dell 2800의 경우 예를 들어 GFSD (커널 모듈이 아님)와 같은 작업을 실행하기 위해 상당한 크기의 풋 프린트를 사용하여 I를 위해 CPU 틱을 소비합니다. 필요하지 않습니다. 마찬가지로 NFSD와 다른 모든 사람들이 리눅스를 상자에 넣고 실행하려고하지만 "속도 / 메모리 / xxx 무엇이든"에 관심이 있다면 이러한 모든 문제를 해결하기 위해 모든 정신을 기쁘게합니다. .
모든 프로덕션 박스는 커스텀 커널입니다. Dell 시리즈 (2800, 2850, 2900 등) 하드웨어와 같은 일반적인 하드웨어를 사용하는 경우 커널의 .config 파일을 각 상자에 복사하고 커널을 컴파일하고 설치하는 것은 간단합니다.
자신의 커널을 컴파일하면 도움이되는 상황은 다음과 같습니다.
모듈 로딩이 비활성화 된 커널이 더 안전합니다. 이를 위해서는 모듈로 컴파일하는 대신 필요한 모듈을 선택하여 커널의 일부로 포함시켜야합니다.
보안을 위해 / dev / kmem에 대한 지원을 비활성화하거나 적절한 컴파일러 옵션을 사용하여이를 지원하는 것이 좋습니다. 나는 대부분의 배포판이 기본적 으로이 작업을 수행한다고 생각합니다.
가능하면 initrd를 사용하지 않는 것이 좋습니다. 커널을 부팅하는 하드웨어에 맞게 사용자 정의하면 initrd가 제거됩니다.
때로는 최신 커널 버전에 필요한 기능이 있지만 오늘날에는 매우 드 rare니다. 데비안을 처음 사용했을 때 2.4 커널을 사용하고 있었지만 udev 지원을 위해서는 2.6 커널이 필요했습니다.
필요없는 네트워킹 프로토콜 / 옵션을 비활성화하면 TCP / IP 성능을 향상시킬 수 있습니다.
필요하지 않은 옵션을 비활성화하면 커널의 메모리 공간이 줄어 듭니다. 이는 RAM이 적은 환경에서 중요합니다. 256MB RAM 시스템을 라우터로 사용하면 도움이됩니다.
나는 일반적으로 직렬 또는 ssh를 통해서만 로그인하는 시스템에서 / dev의 모든 "tty"장치를 성가 시게합니다.
자신의 커널을 컴파일하면 커널 드라이버 개발 프로세스에 참여할 수 있습니다. 기존 드라이버에 PCI / USB 장치 ID를 제공하는 것과 같은 간단한 방법이든, 새로운 장치를 사용할 수있게 해줄 수도 있습니다. 커널 개발.
또한 하드웨어에서 개발 커널을 테스트하고 회귀가 발견되면 피드백을 제공 할 수 있습니다. 이것은 드문 하드웨어가있는 경우 특히 다른 사람에게 도움이 될 수 있습니다. 배포판 커널을 기다리는 경우 문제 보고서의 수정 사항이 새 배포판 커널 필터로 필터링되는 데 시간이 걸릴 수 있습니다.
또한 개인적으로 내가 보유한 하드웨어 만 지원하도록 커널을 컴파일하고 싶습니다. 배포판 커널을 실행하고의 출력을 보면 lsmod(8)
보유하지 않은 하드웨어에 대해 많은 모듈이로드 된 것을 볼 수 있습니다. 이것은 모듈 목록, / proc, / sys 및 로그를 오염 시켜서 무언가를 검색 할 때 노이즈 사이에 숨길 수 있습니다. 또한 해당 모듈이 진단하려는 문제에 영향을 미치지 않는다는 것을 100 % 확신 할 수 없습니다.
두 번째 gabe.의 답변 (내 의견이 너무 길어서 답변으로 게시하고 있습니다).
고도로 전문화 된 목적 (예 : 임베디드 머신, 엄격한 보안 프로파일 링)이 없다면, 커널이 어떻게 수행되는지 보는 것 외에는 자신의 커널을 컴파일하는 데 실질적인 이점이 없습니다. 옵션을 체계적으로 검토하여 서로 상호 작용하여 시스템을 구축하는 방법을 보는 것은 시스템 작동 방식을 이해하는 좋은 방법입니다. 수행하려는 작업에 목적이없는 것으로 보이는 구성 요소를 제거하려고 할 때 알아 낸 것이 놀랍습니다.
그러나 조심하십시오. 토끼 구멍을 뛰어 내리는 것이 의심 할 여지없이 상쾌한 이유는 생각보다 밤과 주말을 더 많이 잃을 것입니다!
이 글타래는 오래되었지만 질문이 제기되었을 때와 마찬가지로 오늘날에도 유효합니다!
답은 다음과 같습니다. 필요와 요구 사항에 따라 원하는 Linux 커널을 컴파일합니다.
많은 시나리오가 유효합니다 :
엔지니어는 시스템의 성능 및 보안 요구 사항 / 요구 사항을 충족하기 위해 빌드를 요구하고 지정된 기준을 충족하거나 능가하도록 재 컴파일합니다.
귀하는 일반 사용자이며 가능한 한 오래 계속 사용하고 싶은 기존 시스템을 보유하고 있으며 기존 시스템을 최적화하기 위해 구성 요소를 추가 / 제거하기 위해 다시 컴파일합니다.
귀하는 최신 하드웨어를 가진 일반 사용자이며 충분한 메모리 / RAM을 가지고 있습니다. 다시 컴파일 할 필요는 없지만 시스템에 대해 조금 더 배우고 싶다면 여전히 할 수 있습니다.
귀하는 Microsoft 및 / 또는 Mac의 일상적인 사용자가되기를 원하고 재 컴파일하지 말고 업스트림 배포판의 업데이트를 사용하십시오.
시나리오가 계속 온다 :-)
Mac / Windows 사용자와 달리 Linux가 제공하는 것은 선택입니다. 요구 사항에 맞게 시스템을 쉽게 사용하거나 최적화 할 수 있습니다.
대부분의 경우 일반 커널은 거의 모든 하드웨어에 적합합니다. 또한 일반적으로 배포 특정 패치를 포함하므로 자체 커널을 컴파일하면 문제가 발생할 수 있습니다.
자신의 커널을 컴파일하는 공명은 다음과 같습니다.
소스 기반 배포판을 사용하지 않으면 커널을 전혀 컴파일하지 않습니다.
커스텀 커널을 컴파일하는 이유를 언급 한 사람이 아무도 없습니다.
다른 C / C ++ 컴파일러를 사용하고 싶기 때문입니다. GCC는 리눅스 커널을 컴파일하는데 아주 좋습니다. 그러나 매우 뛰어난 컴파일러가 있습니다! GCC의 최적화는 인텔의 C / C ++ 컴파일러보다 약간 뒤떨어져 있습니다. 그리고 인텔은 고성능 리눅스 커널을 만드는 데 필수적인 성능 프리미티브 라이브러리와 vtune 도구를 제공합니다. GCC와 G ++로만 얻을 수 있습니다. 실제로 결과에 상관없이 컴파일러에 의해 결과가 제한됩니다. 그래서 나는 Intel 컴파일러와 성능 라이브러리를 사용합니다. 약 1.5GB 다운로드이지만 좋은 컴파일러에 무엇이 포함되어 있는지 조금 알 수 있습니다.
인텔의 C / C ++ 컴파일러는 비상업적 용도로 무료로 제공됩니다. 그러나 인텔 웹 사이트를 검색하기위한 비 상업 라이센스 인텔 c ++ 컴파일러 다운로드 페이지를 구글로 검색하는 것이 더 쉽습니다. 나는 보통 아무것도 GCC / G ++를 사용하지 않습니다. 그리고 당신은 프로그래머 일 필요가 없습니다. 환경을 설정하고 make 파일에서 인텔 컴파일러를 가리 키도록 두 줄을 변경하면됩니다.
그럼 당신은 심각한 속도를 얻을 수 있습니다!
What are the pros and cons of compiling your own kernel?
Cons = 쉽지 않고 많은 상황에 부가가치 를 요구 하지 않는 것이 좋습니다 . 장점 = 보안, 성능, 당신이하고있는 일을 알고 있다면 NAS 장치는 예를 들어 리눅스를 사용하여 하드웨어를 작동시키고 네트워킹 및 그래픽 기능을 가지고 있습니다.