Linux 커널은 플랫폼에 관계없이 어떻게 작동합니까?

Linux 커널은 플랫폼에 관계없이 어떻게 작동합니까?

여기서 특히 알고 싶은 것은 기본 하드웨어에 관계없이 Linux 커널이 모든 다른 PC에서 작동하는 방법에 관한 것입니다.

또는 일반적으로 PC 하드웨어 구성에 관계없이 모든 커널(Microsoft의 NT 커널, Mac OS 및 Linux)이 모든 PC에서 작동할 수 있는 방법입니다.

여기에 내 의심을 설명하기 위한 시나리오가 있습니다. PC-2와 비교하여 PC-1의 블루투스, 키보드, Wi-Fi 등은 구성이 다르며 제조업체가 다릅니다. 이러한 모든 하드웨어가 작동하게 하려면 커널에 해당 하드웨어를 활성화하는 하드웨어별 코드가 있어야 한다고 생각합니다. 커널에 이러한 하드웨어를 활성화해야 하는 장치 드라이버 계층이 있다고 생각합니까? 아니면 다른 곳에서 장치별 펌웨어를 로드합니까? 커널에서 하드웨어 관련 코드가 정확히 어디에 있습니까? 또한 의심을 해소하는 동안 HAL, BSP를 발견했습니다. 이것들은 무엇이며 커널의 어디에 이러한 레이어가 있습니까?

답변1

여기서 제가 특히 알고 싶은 것은 기본 하드웨어에 관계없이 Linux 커널이 모든 다른 PC에서 작동하는 방식에 관한 것입니다.

무엇보다도 커널은 특정 아키텍처용으로 컴파일된 한 모든 PC에서 실행될 수 있습니다. 범용 컴퓨터의 아키텍처는 동일한 경향이 있지만(x86_64/amd64) 임베디드 장치를 다룰 때는 변경됩니다.

장치 트리

컴파일 외에 커널 자체는 하드웨어에 구애받지 않습니다. 나는 당신에게장치 트리!

Linux 커널이 검색할 수 없는 하드웨어를 처리하는 방식은 장치 트리를 통하는 것입니다. 이는 CPU, 메모리, 버스, I2C를 통해 연결된 장치, SPI 등에 대한 커널 정보를 알려줍니다. 장치 레이아웃을 하드 코딩하는 대신 장치 트리를 통해 변경할 수 있습니다. 당신이 그것을 이해하면 그것은 모두 정말 마술적입니다. 장치 트리는 또한 매개 compatible변수를 통해 특정 장치에 사용해야 하는 드라이버를 커널에 알려줍니다.

장치 트리는 커널이 어떻게 컴파일되었는지에 따라 다양한 방식으로 저장될 수 있지만 일반적으로 계층 구조는 /proc/device-tree또는 아래에서 볼 수 있습니다 /sys/firmware/devicetree/base.

USB 장치와 같은 경우 USB 드라이버가 모두 처리합니다. 커널에는 키보드나 마우스 같은 것을 제어하기 위한 기본 코드가 있습니다. 일부 공급업체에는 장치와 함께 제공되는 맞춤형 드라이버가 있습니다.

모듈

드라이버의 경우 Linux 커널은 다음을 사용합니다.커널 모듈. 모든 모듈은 아래에서 찾을 수 있습니다 /lib/modules. 모듈에는 로드 가능한 모듈과 내장 모듈이라는 두 가지 유형이 있습니다. 명령 을 사용하여 로드된 모든 모듈을 볼 수 있습니다 lsmod. 커널이 장치 트리에서 특정 장치를 찾거나 장치를 주변 장치에 연결하는 경우에도 해당 장치에 대해 로드할 수 있는 모듈이 있는지 확인하고 해당 모듈이 해당 장치의 드라이버가 됩니다.

로드 가능한 모듈의 좋은 점은 커널 이미지를 더 작게 유지한다는 것입니다. 모듈은 별도로 컴파일될 수 있습니다. 내장 모듈이 커널로 컴파일되어 실제 이미지 크기가 늘어납니다. 커널이 실행되는 동안 모듈을 컴파일하고 커널에 로드할 수도 있지만 이는 완전히 다른 주제입니다.

BSP

공급업체가 자체 하드웨어(프로세서 및 연결된 하드웨어 포함)에 대한 특정 모듈과 커널을 제공할 때 BSP(보드 지원 패키지)를 받게 됩니다. 때때로 공급업체는 기존 모듈을 변경하거나 커널과 함께 사용자 정의 모듈을 제공합니다. 일부 공급업체에서는 커널 자체를 변경하여 전체 사용자 정의 패키지가 BSP가 됩니다. 임베디드 세계에서는 이런 일이 많이 발생합니다.

HAL(Hardware Abstraction Layer)은 BSP와 동의어일 수 있습니다. Linux 세계에서는 그다지 많이 사용되는 것을 본 적이 없지만 마이크로 컨트롤러에 들어가면 꽤 자주 사용됩니다. 기본적으로 HAL은 하드웨어에 액세스하는 데 사용되는 라이브러리 모음이므로 하드웨어와의 인터페이스가 훨씬 쉬워집니다. 예를 들어 Wi-Fi 칩을 사용하면 AP에 연결하고, 네트워크를 검색하고, 액세스 포인트를 생성하는 등의 기본 루틴을 제공합니다. 그런 의미에서 드라이버 역할을 합니다.

관련 정보