Goed, ik ben dus bezig met een stukje hardwareontwikkeling. Ik heb een kaart ontworpen waar onder andere een PCI interface opzit, en ik wil, voor het debuggen, eenvoudig communiceren met dat kaartje. Hiervoor zou ik het liefste vanuit een eenvoudig usermode programmaatje bij de door de kaart geexporteerde blokken geheugen kunnen, zonder dat ik eerst 25000 kernelmode-driver parameters op exact de goede waarde moet zien te krijgen.
Dezelfde vraag iets technischer:
De kaart heeft de volgende 3 adresspaces gedefinieerd:
- BAR0 wijst naar een 4MB blok (prefetchable)
- BAR1 wijst naar een 8MB blok (non-prefetchable)
- BAR2 wijst naar een 16-byte blok (I/O)
De kaart heeft de volgende Vendor-ID: 0x1321
De kaart heeft de volgende Device-ID: 0x8000
Wat ik wil is dus eigenlijk zoiets:
Erg simpel, zou je zeggen. Alleen moet je standaard in windhoos de kerneldriver-dans uitvoeren voordat je zoiets eindelijk een keer mag.
Iemand een eenvoudige oplossing? Google struikelt over de kerneldriver development kit bedrijfjes, maar veel nuttigs komt er niet uit.
Btw, mocht het nog iets uitmaken, ik draai w2k Professional, checked build op de testmachine, en ik heb er een bak naaststaan met daarop de kernel debugger.
Dezelfde vraag iets technischer:
De kaart heeft de volgende 3 adresspaces gedefinieerd:
- BAR0 wijst naar een 4MB blok (prefetchable)
- BAR1 wijst naar een 8MB blok (non-prefetchable)
- BAR2 wijst naar een 16-byte blok (I/O)
De kaart heeft de volgende Vendor-ID: 0x1321
De kaart heeft de volgende Device-ID: 0x8000
Wat ik wil is dus eigenlijk zoiets:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| #include "my_easypci.h"
int main()
{
// Get the contents of Base Address Register 0
DWORD *BAR0 = GetBAR0 (0x1321, 0x8000);
// Get the contents of Base Address Register 1
DWORD *BAR1 = GetBAR1 (0x1321, 0x8000);
// Get the contents of Base Address Register 2
DWORD *BAR2 = GetBAR0 (0x1321, 0x8000);
// Now, do something useful. For example, see if
// configuration succeeded by reading bit 2 of the
// status register at *(BAR2 + 0x00)
if (BAR2[0] & 0x04)
printf ("Yezzz!!! It worked!\n");
else
printf ("Dammit! This sucks..\n");
} |
Erg simpel, zou je zeggen. Alleen moet je standaard in windhoos de kerneldriver-dans uitvoeren voordat je zoiets eindelijk een keer mag.
Iemand een eenvoudige oplossing? Google struikelt over de kerneldriver development kit bedrijfjes, maar veel nuttigs komt er niet uit.
Btw, mocht het nog iets uitmaken, ik draai w2k Professional, checked build op de testmachine, en ik heb er een bak naaststaan met daarop de kernel debugger.
edit:
het [ code ] blok verknoeide de layout. Even aangepast
het [ code ] blok verknoeide de layout. Even aangepast