나는 KConfig가 Linux 커널 컴파일 시작 시 C 전처리기를 조정하는 데 사용된다는 것을 알고 있습니다. 장치 트리는 런타임에 하드웨어에 대한 설명을 컴파일된 커널에 제공하는 데 사용됩니다.
이 두 가지 구성 가능한 기능은 어떻게 겹치나요?
예를 들어, 둘 다 내부 CPU 세부 정보 및 외부 주변 장치 드라이버에 대한 정보를 제공합니다. 장치 트리에 언급된 모든 주변 장치는 .config 파일에 이전에 선언된 드라이버를 가져와야 한다고 생각합니다. 또한 드라이버가 내장 드라이버로 컴파일된 경우 다시 모듈로 로드되지 않을 것이라고 추측할 수 있습니다. 하지만 더 자세한 내용은 무엇입니까?
답변1
커널 구성은 컴파일 타임에 지정할 수 있습니다.~이든커널 소스 트리에 포함된 모든 표준 드라이버를 포함합니다.어떻게이러한 드라이버는 내장 또는 로드 가능한 모듈로 포함되며 일부 드라이버도 포함됩니다.기타 매개변수커널을 컴파일할 때 사용할 최적화 및 기타 선택 사항과 관련됩니다(예: 특정 CPU 모델에 대한 최적화, 가능한 일반적인 최적화 또는 Spectre/Meltdown 보안 완화와 같은 특정 기능이 기본적으로 활성화되어 있는지 여부).
컴파일 타임 커널 구성이 충분히 일반적으로 설정되면 동일한 프로세서 아키텍처 내의 다양한 시스템에서 동일한 커널을 사용할 수 있습니다.
반면에 장치 트리는 커널이 현재 실행 중인 실제 하드웨어와 관련됩니다. 내장형 시스템 및 자동 감지 기술이 없는 기타 시스템(예: ACPI 또는 PCI(e))의 경우 장치 트리에서 다음을 지정합니다.정확한 I/O 또는 메모리 주소특정 하드웨어 구성 요소는 드라이버가 찾아서 사용할 수 있도록 다음 위치에서 찾을 수 있습니다.
장치 트리에 특정 하드웨어 구성 요소의 존재와 이에 액세스하는 방법이 설명되어 있더라도 필요한 드라이버가 컴파일 타임에 비활성화되면 나중에 드라이버 모듈을 별도로 추가하지 않는 한 커널은 이를 사용할 수 없습니다. 또는 커널이 로드 가능한 모듈 지원 없이 완전히 모놀리식 구성으로 컴파일된 경우 해당 장치에 대한 드라이버가 커널 컴파일에 포함되어 있지 않으면 커널은 특정 장치를 전혀 사용할 수 없습니다.
하드웨어 구성 요소의 드라이버가 커널 구성(내장 또는 로드 가능한 모듈)에 포함되어 있지만 장치 트리에 이에 대한 정보가 없는 경우(하드웨어 아키텍처에 표준 감지 메커니즘이 포함되어 있지 않은 경우) 커널 하드웨어 구성 요소의 존재를 인식하지 못합니다. 예를 들어 장치 트리에서 디스플레이 컨트롤러의 프레임 버퍼 영역을 일반 사용 가능한 RAM으로 잘못 지정하면 디스플레이 컨트롤러의 기본 프레임 버퍼 영역에 저장된 모든 바이트를 뒤죽박죽된 픽셀 "노이즈"로 무작위로 표시할 수 있습니다. 또는 디스플레이 컨트롤러가 작동을 시작하기 위해 특정 초기화가 필요한 경우 출력이 전혀 나오지 않을 수도 있습니다.
즉, 장치 트리의 목적은 시스템의 다양한 하드웨어 기능이 프로세서의 주소 공간에 있는 위치를 커널에 알려주는 것입니다. 이를 통해 커널이 올바른 드라이버를 올바른 물리적 하드웨어에 가리키도록 하고 커널이 다음을 수행할 수 있도록 합니다. 올바른 드라이버를 올바른 물리적 하드웨어로 지정하십시오. 커널이 사용해야 하는 주소 공간의 부분을 알려줍니다.아니요일반 RAM으로 사용해 보세요.