2011-01-21 2 views
0

Mac OS X의 PCI 장치에서 정보를 얻는 방법을 배우려고합니다. 지금까지 sysctl (3)에서이 장치에 대한 정보를 찾을 수 없었습니다. BSD의 오래된 devinfo (3) 기능을 사용할 수없는 것으로 보입니다.Mac OS X, C PCI 장치 정보 읽기 기능

Objective C 용 I/O 키트 프레임 워크가 있지만이 기능을 사용할 수 없다는 것을 알고 있습니다.

내가 쓴 특정 정보는 기본적으로 벤더 및 장치 ID입니다.

답변

1

I/O 키트 입니다. 장치 정보 용 시스템 프레임 워크입니다. Objective-C API가 아닙니다. 대신 Apple은 C++의 제한된 하위 집합을 사용합니다. I/O Kit Fundamentals 문서를 인용하면,

애플은 I/O Kit을위한 몇몇 프로그래밍 언어를 고려하고 제한된 C++ 서브셋을 선택했다.

여러 가지 이유로 C++가 선택되었습니다. C++ 컴파일러는 성숙했으며 언어는 시스템 프로그래밍을 지원합니다. 또한 이미 C++ 경험이있는 매킨토시 (및 BSD) 개발자의 대규모 커뮤니티가 있습니다.

제한된 일부는

  • 다중 상속
  • 템플릿

    • 예외를 포함하여 C++의 특정 기능을 허용하지
    • 런타임 타입 정보 (RTTI) 년 - I/O 키트의 자신의 구현을 사용합니다 런타임 타이핑 시스템

    이러한 기능은 un로 간주되어 삭제되었습니다 다중 스레드 커널 내에서 사용하기에 적합합니다. 이러한 기능이 필요하다고 생각되면 디자인을 재고해야합니다. 이러한 제한이있는 I/O Kit를 사용하여 필요한 드라이버를 작성할 수 있어야합니다.

  • C++을 사용할 수없는 경우 C 프로그램에서 /usr/bin/ioreg을 호출하고 결과를 구문 분석 할 수 있습니다.


    편집 : 당신이 Accessing Hardware from Applications 문서를 살펴 할 수 있습니다. I/O 레지스트리에 액세스하는 것이 Core Foundation의 일부로 C 코드 (대부분은 아닐지라도)로 수행 될 수있는 것처럼 보입니다.

    +0

    감사합니다. 매우 귀중한 정보입니다. 기다리지 않고 아무도 다른 사람의 목소리가 들리지 않는다면 나는 C가 아닌 다른 언어를 사용하지 않는 이것을 할 수있는 시설이 없다고 가정 할 것입니다. –

    +0

    @Hjemmedyrker 마지막으로 편집 한 것을보십시오. I/O 레지스트리 검색은 C++을 전혀 필요로하지 않을 수도 있습니다. –