|
PCI 버스에서 데이터를 읽어 올려면.... 뭐냐...
일반적인 윈도우에서는 어려운 일인데요.
즉 윈도우에서 슈퍼유저 권한을 가진 프로그램에서만 읽어 올수 있습니다. 리눅스에서는 관리자 계정이 되겠죠.
윈도우를 예로 든다면 디바이스 드라이버가 그런 권한을 가질수 있습니다. WDM 같은 걸로 가능할 겁니다.
아니면 DOS로 부팅을 하셔야 하죠.
그럼 일단, 슈퍼유저 권한을 가졌다고 생각해 보면..
PCI 버스에 디바이스가 붙으면 그 디바이스는 자신의 하드웨어 정보를 PCI-To-CPU 인터페이스 메모리 영역에 그 정보를 써 넣게 됩니다.
만약 CPU가 메모리를 볼때 0x08000000 이런식으로 본다면, CPU가 PCI 버스를 통해 디바이스를 볼때에는 0xCA000000 뭐 이런 식으로 보게 됩니다. 이때 붙는 디바이스가 0xCA001000 식으로 offset을 두고 메모리에 붙는 식입니다.
이때 디바이스가 0xCA001000 번지에 자신의 정보를 기입할 때는 통상적인 PCI 메모리 인터페이스 구조체로 써놓게 됩니다. 대충 Product ID, Application ID 등 이었던 것 같네요.
이 정보들을 읽으면 자신이 사용할 디바이스가 어떤 종류인지 알게 됩니다. 거기에 맞추어 해당 드라이버를 읽어드리게 되는 거죠.
님이 하고 싶으신 일이 바로 그 드라이버를 만드는 일입니다. 장난아니게 어렵다는 것만 말씀드리고 싶네요.
지원되는 드라이버가 있다면 그것을 사용하시는 것이 최상입니다. 없다면 만들어 쓰셔야 하는데 음.. 배보다 배꼽이 더 큰일입니다. 물론 해당 디바이스의 동작이 간단하다면 모르지만 아무리 간단해도 .... ㅜ.ㅜ
DSP 보드를 사용하신 다면 C에서 사용가능한 드라이버가 있을 겁니다. 통상적으로 그런 보드에서는 기본으로 여러 플랫폼의 드라이버를 같이 shipping하니까요.
도움이 되었기를... ^^
신명준 님이 쓰신 글 :
: 안녕하세요..
:
: DSP보드를 이용해서 전력품질을 측정하는 작업을 하고 있습니다.
: 구석에 굴러다니던 보드를 사용하려고 하는데요
: JTAG때문인지 PC슬롯에 꽃아서 사용하게 되어있습니다.
: 시리얼 통신이 아니라 버스데이터로 읽어와야 하는데요
: 도무지 감이 잡히질 않네요
: 고수님들!! 버스에서 데이터 읽어오는 방법좀 알려주세요
: 윈도우에서는 버스를 마음데로 제어할수 없다는 이야기도 있고
:
: 기타 관련된 필요 환경이나 어떻게 시작해야할지 조언 부탁드립니다.
|