Linux는 프로세서 주변의 하드웨어와 어떻게 통신합니까?

Linux는 프로세서 주변의 하드웨어와 어떻게 통신합니까?

내 질문은 관리 자체보다는 Unix/Linux 개발과 더 관련이 있습니다.

나는 이것이 관리자보다는 Unix/Linux 저수준 시스템 프로그래머를 위한 것이라고 생각합니다. 커널 개발을 시작하거나 Linux 시스템 개발을 이해하는 데 도움이 됩니다.

Linux가 하드웨어 주변 장치 및 모듈과 상호 작용하는 방법을 배우기 시작하려면 하드웨어에 대해 구체적으로 어떤 정보가 필요합니까? 예를 들어 버스 아키텍처 및 컨트롤러와 통신하는 방법이 있습니다.

또한 이제 대부분의 환경에서 Linux가 실행되는 곳은 가상 머신이라는 점을 말씀드리고 싶습니다. 그래서, 그 아래의 OS에서 보이는 것이 바로 제가 의미한 것입니다.

몇 가지 참고 자료가 필요하거나 이에 대해 학습을 시작하는 방법이 필요합니다.

나는 기본적인 x86 지침을 알고 있지만 프로세서 자체 주변의 메모리 및 버스 컨트롤러에 대한 질문이 더 많습니다. 프로그래머 모델은 현대 병렬 프로그래밍 환경을 의미합니다.

답변1

작동 방식은 아키텍처/머신에 따라 많이 달라집니다. Linux(커널)는 사용 가능한 장치와 부팅 시 연결을 매핑하는 트리를 생성합니다(플러그인된 장치가 나타나거나 사라지는 경우). 정보의 출처는 기본 하드웨어에 따라 다릅니다.

동일한 시스템에서 실행되는 다른 운영 체제에는 이를 수행하는 고유한 방법이 있습니다. 이식성이 매우 뛰어나다면 아마도 비슷한 접근 방식을 사용할 것입니다.

예를 들어 원래 PC(또는 에뮬레이션)를 가지고 돌아다니면 다양한 기능에 액세스할 수 있습니다.결정된장치, 일부에서 액세스결정된(또는 거의) 방법. 일부 Unices는 시스템용 개체 코드와 함께 제공되어 기뻤습니다. 장치를 추가/재구성하려면 일부 C 파일을 편집하고 커널을 다시 컴파일하고 다시 연결해야 했습니다. 정말 재미있습니다.

답변2

z80 프로토타이핑 보드와 같은 것을 구입하여 직렬 포트에서 비트뱅을 시도하거나 dos로 에뮬레이트된 ibm PC를 실행하고 DOS irq를 사용하여 동일한 작업을 수행하십시오.

메모리 매핑된 텍스트 표시가 있는 기존 Z80 시스템에서는 최소한 텍스트를 표시하는 것이 쉽습니다.

어셈블러, Pascal, Ada, C(이것을 위해 C++를 사용하는 이유), BASIC 및 상당히 많은 다른 언어를 사용하여 이와 같은 작업을 수행하는 것이 (쉽거나 조금 더 어렵거나 비실용적) 가능합니다. 일하다!

상당한 양의 메모리를 지원할 수 있는 최신 프로세서의 경우 C/Assembler/Ada(i 파스칼을 생각해보세요.) 제가 이렇게 말하는 이유는 그 프로세서 제품군이 상당히 단순한 메모리 아키텍처를 갖고 있기 때문입니다.

grub의 소스를 확인해 보세요!

부팅 시 프로그램(부트 로더)을 로드하는 방법에 관심이 있거나 Space Invaders(베어 메탈에서 실행되는 Space Invaders의 복제품)와 같은 그럽화된 게임을 확인하십시오.

가상 머신에서 grub-invader를 부팅할 수 있습니다그럽 인베이더를 참조하세요

관련 정보