2012-12-03 3 views
5

256 바이트 TLP 페이로드 크기가 필요한 PCIe 보드에서 작업합니다. BIOS에 TLP 페이로드 크기 설정을 제공하지 않는 인텔 마더 보드 인 DX79SR을 지원하는 CPU가 있습니다. 기본적으로 최대 128 바이트의 TLP 페이로드가 있으며이를 BIOS없이 256 바이트로 변경해야합니다. Windows에서이 값을 표시하는 PCIUtils 소프트웨어가 있지만 다용도 휴대용 소프트웨어이며 필요한 항목을 찾기가 너무 복잡합니다.Windows에서 Intel CPU I/O 레지스터에 액세스하는 쉬운 방법

Intel 문서 describe what values CPU I/O 레지스터에 설정해야하며 I/O 위치가 C8Fh 및 CFCh임을 나타내는 another document이 있습니다.

여기는 내가 붙어있어, 내가이 레지스터를 설정하려고한다면 어디서 시작해야할지 모르겠다. 저는 숙련 된 Windows S/W 개발자이지만 드라이버를 한번도 다뤘습니다. 내가 수정할 수있는이 PCIe 보드의 드라이버에 대한 소스 코드가 있지만 빌드 및 실행하지만 인텔 CPU의 I/O 레지스터에 데이터를 쓰는 방법을 알지 못합니다. 나는 _outp() 함수가 사용자 모드에서 작동하지 않는다는 것을 발견했다.

실행 파일 (더 쉽게) 또는 드라이버에서 시작 위치를 알려주십시오. 내가해야 할 일은 실수가 아니라면 I/O 포트 C8Fh와 CFCh에서 읽고 쓰는 것 뿐이라고 생각합니다. Windows XP 32 비트, Win7 x64, Visual Studio 2010 C++ 또는 WDK입니다.

답변

2

기본적으로 수행해야 할 작업은 각각 outin x86 asm 명령어를 사용하는 것입니다. 보호 모드에서는 두 명령어가 잠겨있어 사용자 영역 모드에서는 사용할 수 없습니다.

가장 좋은 곳은 WDK (Windows 드라이버 키트)를 얻고 샘플을 봅니다 (소프트웨어 드라이버가 필요합니다). PCI 보드 용 드라이버가 커널 모드 드라이버 인 경우 DriverEntry 함수에 호출을 추가하고이를 수행하면됩니다.

이것이 옵션이 아니라면 자신 만의 소프트웨어 커널 모드 드라이버를 만들어야합니다. here은 간단한 예제 코드이며 빌드 및 배포 방법에 대한 지침이 나와 있습니다. 커널 모드에서 일부 명령 만 실행하기 때문에 실제 코드는 간단해야합니다.

+0

감사합니다. WDK가 있고이 보드의 드라이버를 컴파일 할 수 있습니다. 필자는 드라이버 항목을 확실히 볼 수 있지만 드라이버가 커널 모드 또는 사용자 모드로 작동하는지 알 수 없습니다. 나는 그 운전자에 익숙하지 않다. 그래서 드라이버의 주 기능에서 드라이버 로딩을 요구할 때 _inp(), 비트를 설정 한 다음 _outp (0xC8F.mydata)를 시도 할 수 있습니다. 여기서 0xC8F는 인텔의 문서 위치입니다. – user1871691

+0

@ user1871691 거의 예. 코드에 'DriverEntry' 메소드가있는 경우 KMDF를 사용합니다.이 메소드는 사용자 모드 드라이버 afaik (다른 드라이버는 사용하지 않습니다)에 대해 다르게 호출됩니다. 코드를 업데이트해야합니다. – Voo

+0

고마워. 그게 효과가 있었어. 나는 DriverEntry에 그것과 같은 4 줄을 넣었다 : _outpd (0xCF8, 0x80000098); 두 가지 장치에 대한 레지스터를 설정해야한다는 유일한 트릭이있었습니다. PCIe 슬롯에 주소가 있습니다. 버스 : 0 장치 : 1 기능 : 0이지만 버스에 대한 TLP 크기도 설정해야합니다. 0 장치 : 0 기능 : 0 (일반 장치 일 것 같습니다) – user1871691

관련 문제