저는 현재 Linux용 장치 개발을 배우고 있습니다. LLD3와 같은 책을 읽었지만.. 장치를 컴퓨터에 연결하면 무슨 일이 일어나는지 아직도 이해할 수 없습니다. 이것이 제가 상상한 것입니다. 포트에서 일어나는 일은 마술적인 방법으로 Linux 커널이 장치 유형을 알고 적절한 모듈의 프로브 기능을 호출하여 모듈에 필요한 장치인지 확인하고 다음 작업은 다음과 같습니다. 마법같은...아무거나 누구든지 이것을 고칠 수 있나요?
답변1
실제로는 마술이 아니라 하드웨어입니다. 주변 장치 이벤트에 대한 정보는 프로그래밍 방식으로(커널 코드에서) 다른 하드웨어에 대한 게이트웨이인 전면 버스를 통해 CPU에 도달합니다.중단 요청(중단 요청).
다음을 순서대로 살펴보세요.
http://en.wikipedia.org/wiki/Northbridge_%28computing%29
http://en.wikipedia.org/wiki/Front_side_bus.
이제 커널이 CPU에서 일어나는 일을 결정한다고 생각해 보세요. 다음:
http://en.wikipedia.org/wiki/interruption
http://en.wikipedia.org/wiki/IRQ
Linux 커널 코드 WRT에 대해 더 구체적으로 설명하기 위해 인터럽트 요청이 수신될 때 실행되는 핸들러를 사용합니다. 그것의 기본 부분은 아키텍처별 asm 코드로 수행되며, 그 중 많은 부분은 (예를 들어) 에서 찾을 수 있습니다 src/arch/x86/kernel
. 나는 asm(files)으로 코딩하지 않기 .S
때문에 불행하게도 이것은 나에게 그리스어로 들리지만 여기서의 아이디어(Wikipedia 항목에 있어야 함)는 IRQ를 받은 후 커널이 IRQ를 처리하기 위해 실행되는 모든 사용자 공간 코드를 선점한다는 것입니다. (어떠한 사용자 공간 프로세스에도 무언가를 전달할 수 있음)