|
Hello All,
Which is the best place to look for the information about the various facts technology about hardware. I am an application programmer with a very limited knowledge of how we access the hardware through software.
Basically what I need to learn is the basic knowledge about various topics as PCI buses (want to undersatand what bus-function-device-offset way of reading PCI space), ISa, SPD, SMBus etc etc.
I am able to download specification documents for each of above mentioend technology bit they are very detailed and indepth. What exactlly I am looking for is brief and to the point stuff for a programmer.
Pleas help
Thanks
|
|
|
|
|
vikrantc1355 wrote: What exactlly I am looking for is brief and to the point stuff for a programmer.
The average programmer doesn't need to know this stuff. The hardware, in conjunction with its driver and the OS, expose an interface to the user-mode world which is used to access the hardware - things like a drive letter, a custom IOCTL, a com port indicator (COMx), ... User-mode programs use that to communicate with the hardware.
If you're looking at actually talking to the hardware, you're entering the realm of writing a device driver. "Brief and to the point stuff" for this subject doesn't exist. How a driver talks to a piece of hardware depends on each piece of hardware, and the operating system it is written for. This is not a simple straight-forward subject.
Here's my usual list that I give when asked about info on device drivers.
The WDK itself - documentation andthe samples are improving but it assumes you already have a good knowledge of the OS
"Programming the Windows Driver Model" 2nd ed by Walter Oney - make sure it is the 2nd edition
"Microsoft Windows Internals, Fourth Edition: Microsoft Windows
Server(TM) 2003, Windows XP, and Windows 2000" by Mark Russinovich and David Solomon
"Windows NT Device Driver Development" by Peter Viscarola and Tony Mason - dated but the stuff they discuss hasn't changed and it's a good foundation.
"Developing Drivers with the Windows® Driver Foundation" by Penny Orwick and Guy Smith - this one is from Microsoft Press and is the only book currently published with a good description of KMDF
This one should be excellent (if they ever get it published) "Introduction to the Windows Driver Foundation Kernel Mode Driver Framework " by Peter Viscarola, Tony Mason, Mark Cariddi, Brenda Ryan, Scott Noone, and OSR
|
|
|
|
|
My requirment is not something related to driver develoment.
The books you menmtioned seems to be specific to that peupose.
Waht I am looking is like I want for example lets assume I want to show the content of PCI Config space to show this I should have a good understanding of PCI spacce and its structure and other stuff. Smilarly for SPD and SMBus etc.
|
|
|
|
|
The problem is, from a coding point of view, that only drivers are allowed to access this information from the hardware. You cannot write a user-mode program to access this directly - the OS flat out won't let you. The content of the PCI config space, for instance, is the way it is described in the spec. You can look in the DDK files to see the data structure(s) used by a driver to query for the config space (search for PCI_COMMON_CONFIG for the PCI stuff). All those tools that show stuff like the config space (I've written some myself) all commmunicate with a driver to actually get that info.
My suggestion to learn about this type of hardware stuff is to look at the specs for each class of hardware and then the appropriate sample drivers in the DDK to see how those data structures and interfaces are manipulated. You can't really draw a line between the knowledge and the driver since the driver is the only one who gets to use it. The knowledge is in the spec and the "how to" use it is in the driver.
If you have access to a Linux box, it is much simpler to write a Linux driver and play with the structures under that OS. However, you have the problem of what piece of hardware to play with since you probably don't have a spare piece of hardware laying around to serve as your guinea pig.
Judy
|
|
|
|
|
extending on what judy said, what information is exposed in userland is exposed via WMI (which in turn is populated by talking to drivers).
Otherwise [Microsoft is] toast in the long term no matter how much money they've got. They would be already if the Linux community didn't have it's head so firmly up it's own command line buffer that it looks like taking 15 years to find the desktop.
-- Matthew Faithfull
|
|
|
|
|
I would start with any A+ certification book and go from there into your specific area of interest.
PS Real computers interface with real hardware - don't let anybody tell you that you do not need hardware knowledge to be a computer geek!
Cheers
Vaclav
|
|
|
|
|
I konw that in windows, with "extended desktop" I can use two monitors to form a big virtual screen.
But, how can I make the two monitors display part of the same screen.
For example:
I have two monitors with the same 1024*768 display mode, if I use windows to set the virtual screen ,it gets 2048*768 display mode.
But now, I want to get the 2024*768 display mode.
The first one displays [top-left](0,0)-[bottom-rigth](1023,767) of virtual screen, and the second one displays [top-left](1000,0)-[bottom-right](2023, 767).
As a result, left of first one and left of the second one displays the same region((1000,0)-(1023,767))
thank you for any suggestion
|
|
|
|
|
Hi,
I am using the following two API (which are in WinDDK, and included in cfgmgr32.h):
res = CM_Locate_DevNode_Ex(pdnDevInst_OUT, hid, CM_LOCATE_DEVNODE_NORMAL, hMachine);
res = CM_Request_Device_Eject_Ex(dnDevInst, NULL, NULL, 0, 0, hMachine );
I tried these APIS (on VC++ 6.0 & WinDDK 1.7) and it is compiling successfully. But I get 2 linker errors as shown below:
error LNK2001: unresolved external symbol __imp__CM_Request_Device_Eject_ExA@24
error LNK2001: unresolved external symbol __imp__CM_Locate_DevNode_ExA@16
Aslo I checked the Tools->Options->Dirctories->Library files, the path for the lib file "cfgmgr32.lib" is included as:
C:\WINDDK\6001.17048\LIB\WXP\I386
I don't understand still why there is this linker error.
Any one know this problem? Any solution for this?
Thanks in Adv...
Thanks & Regards,
Neeraj
|
|
|
|
|
You're trying to use Visual C++ 6.0 to build with the Windows Server 2008 DDK? Something tells me that's not going to work. Use the build environment from the DDK, or Visual Studio 2005. Microsoft have basically abandoned the old tools.
DoEvents : Generating unexpected recursion since 1991
|
|
|
|
|
hi ...
any please help me in finding the correct DDK VERSION for building NT
based driver in windows VISTA
|
|
|
|
|
|
the 2003 DDK is OK for drivers for 2k, XP and Vista, provided its not a Ndis 6 driver. If it isyou need the Vista DDK.
NT 4 has its own DDK too.
Morality is indistinguishable from social proscription
|
|
|
|
|
What's the best solution for fast hard disk access in a home PC? From what I've read it looks like multiple drives in RAID 0 configuration would be best.
|
|
|
|
|
Personally I'm not sure there's much benefit for RAID 0 in a home PC. You only get any benefit from striping if you have multiple concurrent disk accesses which target different disks, which tends to be the case if you have random access I/Os. The vast majority of I/Os in most systems are sequential - we've all written the code, open a file, read it to the end into memory data structures, close the file. When finished editing, open the file for writing, spew out the data structures again, close the file. All sequential.
With sequential I/Os, each drive in a striped array (RAID 0 or 5) effectively becomes active in sequence as the file pointer moves across the disks. Only if you have a lot of concurrent I/Os to different files might you get a benefit, but even then you don't get a lot of advantage.
RAID 0 has the obvious greater risk that if you lose one of the disks, you lose the volume. The probabilities are greater that you'll lose at least one of the disks than if you were to lose a single standalone disk. Compensating for this by using RAID 5 has a large disadvantage in write speeds.
The best place to start is to get disks with high spindle speeds. The higher spindle speed increases maximum bandwidth from the platter, and slightly decreases access times as the desired block will appear under the head more quickly, on average. At the very least get 7200rpm drives, 10,000rpm SATA drives are also available for a premium and generally have lower capacity than 7200rpm drives. (750GB 7200rpm drives are available for about the same price as 150GB 10k rpm drives).
Because of the varied access patterns for different applications and the different loads to which systems are put, it's really difficult to tune the disk subsystem to any degree for a home PC. You might get most benefit from simply throwing lots of memory at the system, so that more data is cached.
DoEvents : Generating unexpected recursion since 1991
|
|
|
|
|
Recently, I've found myself running out of contiguous storage space. (I've got a lot of small drives installed over many computers. Some of them are even lying in my cabinets.) I decided it would be best to have a centralized (or at least portable) storage medium to stuff my files in. I've been hunting around the internet scrutinizing many products being advertised.
My requirements for the products were:
- Does not require installation of packaged software
- Can be accessed using one, any combination, or all of these: Firewire, Ethernet, or eSATA
- RAID-5 support (and by extension, it holds at least 3 hard drives)
- Supports NTFS
- Internal use of SATA preferred over IDE
- Massive amounts of storage (3 to 4 TB preferred)
- Something that is asthetically pleasent (e.g.: no giantic logos or company name carved in cursive…)
iOmega's 2TB Power Pro[^] seem to have hit most of the points. I'm considering getting one.
Does anyone have something that they think is better?
Thanks in advance…
ROFLOLMFAO
|
|
|
|
|
Well, I use a Seagate FreeAgent Desktop, but maybe you would like to look at the pro version of FreeAgent[^] They come in max size 750GB, but the hard disk and controllers are really good. (atleast in my lesser-pro version )
//Johannes
|
|
|
|
|
Thanks. I'll look into it.
ROFLOLMFAO
|
|
|
|
|
Ri Qen-Sin wrote: iOmega's 2TB Power Pro[^]
RAID 5+hot spare Isn't this just RAID6?
--
Join the Campaign to Help Stamp Out and Abolish Redundancy
The preceding is courtesy of the Bureau of Unnecessarily Redundant Repetition Department.
|
|
|
|
|
Nope. RAID 6 protects against double disk failures. If a RAID 5 + spare array, however, would fail if it were to have a double drive failure (failure within the time the first drive fails and the rebuilding process).
Standard RAID Levels on Wikipedia[^]
ROFLOLMFAO
|
|
|
|
|
Hi guys, I just need some general info, and I'm hoping someone can point me in the right direction.
I have an old (like 6 years old) ink-jet printer, and I want to be able to control the page feed so it can print in both directions, instead of always feeding the pages in the same direction.
Is this even possible? If so, how? I'm not looking for a detailed solution, just general information on how I should go about doing this, i.e. do I need to make my own print driver or hack the the hardware or what?
|
|
|
|
|
if what you need is the capability of both portrait and landscape printing, that is
provided by Windows itself. You can control it through the Page Setup or Printer Setup
dialog available in most apps.
Example: MS Word, Page Setup, Paper Size, Orientation
if you need to add landscape printing to your own app, it basically means tell the print
dialog that's what you want, Windows will do the rotation for you, the only thing you must
take care of is applying the page bounds that you get.
Luc Pattyn [Forum Guidelines] [My Articles]
this months tips:
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use PRE tags to preserve formatting when showing multi-line code snippets
|
|
|
|
|
Thanks for the reply, but that's not what I meant
|
|
|
|
|
Some old dot-matrix printers with tractor feed could move the paper in both directions. I don't believe that you can do the same with a sheet-feed printer, the paper would probably jam and ink would smear even if you could order the printer to reverse the paper direction.
|
|
|
|
|
Thanks for the reply
Paperjams and smearing won't be an issue because I'm completely rebuilding the housing structure. I just need to know what approach I should take for reversing the paper direction, if it is possible.
Is it the print driver, commands sent to the printer, or do I have to hack the hardware itself?
|
|
|
|
|
You will have to hack the hardware, and since its probably a simple DC motor that pulls the paper through (atleast on the old ones ive taken apart) then you should be able to reverse the polarity. If it has a stepper motor then im not sure if you can move the wires around to reverse it or not.
You will have to push the paper in backwards though... and it will probably try to push out any paper lying in the paper tray too
What are you going to do this for, it seems funny, a practical joke??
//Johannes
|
|
|
|
|