사용자 공간에서 하드웨어에 직접 접근이 가능한가요?

사용자 공간에서 하드웨어에 직접 접근이 가능한가요?

직장에는 DOS 소프트웨어로 제어되는 내장 장치가 있습니다. 나의 임무는 차세대 하드웨어에서 DOS 대체 운영 체제로 Linux의 사용을 평가하는 것입니다. 내 연구 결과에 따르면 DOS는 선택에 따라 잠재적으로 위험한 작업을 수행할 수 있는 완전히 다른 유형의 운영 체제일 뿐입니다. 내가 이해한 바에 따르면, 하드웨어에 직접 액세스하려면 사용자 정의 드라이버를 작성해야 합니다. 상사의 호기심을 충족시키려면 다음 사항을 알아야 합니다.사용자 공간에서 하드웨어에 직접 접근이 가능한가요???

내 추측은 '아니오'이지만, 나보다 더 많은 지식을 갖고 있는 분들의 의견을 듣고 싶습니다.

답변1

예, 하지만 거의 유용하지 않습니다. 32비트 x86 시스템에서는 ioperm(2)시스템 호출을 사용하여 현재 프로세스가 포트 I/O를 직접 수행할 수 있도록 설정할 수 있습니다. 나는 이것이 64비트 시스템에서는 작동하지 않는다고 생각합니다. lseek/read/write콤보 도 할 수 있는데 /dev/port, 제 생각에는 휴대성이 떨어집니다. 바라보다http://tldp.org/HOWTO/IO-Port-Programming-2.html자세한 내용을 알아보세요. 물론 두 접근 방식 모두 장치 드라이버를 작성하는 것보다 훨씬 느리고 유연성이 떨어집니다( /dev/port가장 느림) . 물론 이러한 사용자 공간 메커니즘 중 어느 것도 인터럽트나 그와 유사한 것을 처리할 수 없습니다. 성능이 문제라면 결국 장치 드라이버를 작성하게 될 것입니다.

답변2

당신의 추측이 정확합니다. 커널은 하드웨어 요청을 보낼 수 있는 유일한 소프트웨어입니다. 이는 Linux에만 적용되는 것이 아닙니다. 실제로 DOS보다 최신 운영 체제에서는 하드웨어에 직접 액세스할 수 없습니다. 왜냐하면 이는 매우 위험하기 때문입니다.

하지만 자신만의 드라이버를 작성하는 데에는 문제가 없으며 많은 문서가 제공됩니다. 예를 들어,이 튜토리얼은 xatlantis에 있습니다.최근의 것 같고(중요합니다!) 좋은 소스인 것 같습니다.

답변3

사용자 공간에서 하드웨어에 접근하는 것은 확실히 가능합니다. 특히 하드웨어 레지스터가 메모리 매핑된 경우. 예를 들어,우이오.

관련 정보