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

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

여기서 내가 특히 관심을 갖고 있는 것은 기본 하드웨어에 관계없이 Linux 커널이 모든 다른 PC에서 작동하는 방식입니다.

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

내 의심을 설명하는 시나리오는 다음과 같습니다. PC-2와 비교하여 PC-1은 Bluetooth, 키보드, Wi-Fi 및 기타 구성이 다르며 다른 제조업체에서 개발했습니다. 이 모든 하드웨어가 제대로 작동하려면 커널에 이 하드웨어를 활성화하는 하드웨어별 코드가 있어야 한다고 생각합니다. 커널에 장치 드라이버 계층이 있다고 생각하는데, 이 하드웨어를 활성화하려면 어디에서 해야 합니까? 아니면 다른 곳에서 장치별 펌웨어를 로드하는 것입니까? 커널에서 하드웨어 특정 코드는 정확히 어디에 있습니까? 그리고 궁금증을 해소하던 중 HAL, BSP를 만났습니다. 이것들은 무엇이며 이러한 레이어는 커널의 어디에 있습니까?

답변1

여기서 특히 궁금한 점은 기본 하드웨어에 관계없이 Linux 커널이 모든 다른 컴퓨터에서 어떻게 작동하는지입니다.

첫째, 커널이 특정 아키텍처에 맞게 컴파일되는 한 모든 PC에서 실행됩니다. 범용 컴퓨터의 경우 아키텍처는 동일한 경향이 있지만(x86_64/amd64), 이는 임베디드 장치를 다룰 때 변경됩니다.

장치 트리

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

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

장치 트리는 커널이 컴파일된 방식에 따라 다양한 방법으로 저장될 수 있지만 일반적으로 /proc/device-tree계층 구조는 /sys/firmware/devicetree/base.

USB 장치와 같은 경우 이는 모두 USB 드라이버에 의해 처리됩니다. 커널에는 키보드나 마우스 같은 것을 제어하기 위한 기본 코드가 있습니다. 일부 공급업체에서는 사용자 정의 드라이버를 가지고 장치와 함께 제공합니다.

기준 치수

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

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

브라질

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

HAL(Hardware Abstraction Layer)은 BSP와 동의어일 수 있습니다. Linux 세계에서는 그렇게 많이 사용되는 것을 본 적이 없지만 마이크로 컨트롤러에 들어가면 꽤 많이 사용됩니다. 기본적으로 HAL은 하드웨어에 액세스하기 위한 라이브러리 세트로, 하드웨어와의 인터페이스를 더 쉽게 만듭니다. 예를 들어 WiFi 칩을 사용하면 AP 연결, 네트워크 검색, 액세스 포인트 생성 등의 기본 루틴을 제공합니다. 그런 의미에서 드라이버와 약간 비슷합니다.

관련 정보