|
Thanks.
I have edited the original post to include the code involved. Comments would be appreciated.
|
|
|
|
|
Looks OK. Your definitions fit with the code, time to run it up and see if it crashes!
"The whole idea that carbon dioxide is the main cause of the recent global warming is based on a guess that was proved false by empirical evidence during the 1990s." climate-models-go-cold
|
|
|
|
|
Yes, I must now put together a WinXP system to test it. Take me a day or so. This code is in the kernel driver. The corresponding user mode driver in this configuration does not as best as I can tell contain a path that calls the function in question so I just needed it to compile (I hope). O/w I am pretty sure it will crash for lack of an actual buffer.
If it works my next chore is to port it to Win7 x64, so I may be back! Appreciate the support to date.
Thanks.
George
|
|
|
|
|
Try using SIZE_T for pointers, they automatically map to 32 and 64 bit addresses depending on which platform you compile for.
"The whole idea that carbon dioxide is the main cause of the recent global warming is based on a guess that was proved false by empirical evidence during the 1990s." climate-models-go-cold
|
|
|
|
|
Thanks Mr. Muchies for clues and hints. I have it actually working now. Turned out the DMA part was crucial. Now the trick is to port to Windows 7. Any advice or good links you have? Seems like eliminating the HAL calls will be a large part.
Thanks again.
|
|
|
|
|
Whats it running on now, XP?
THe 32 bit image will run on win7 (unless its USB, in which case it might need a tweak or two).
As for 64 bit, all your pointers are going to need looking at to make sure they are compatible, that's why I suggested using SIZE_T as it macros to the right size automatically.
Apart form thagt its just a case of building it in the 64 bit env and running it up the pole to see what happens
"The whole idea that carbon dioxide is the main cause of the recent global warming is based on a guess that was proved false by empirical evidence during the 1990s." climate-models-go-cold
|
|
|
|
|
It is running in XP, but I was suspicious when the DDK seemed to be making a Win7 x86 driver. Gave lots of "deprecated" warnings but built anyway [these warnings did not trigger the "warning same as error" switch]. It worked in XP, but Win7 x86 did not like my inf file. Anyway, on a hunch I installed Windows 7 32 bit on my test rig and gave it a try. So far it won't work but I am working on my inf file.
It is a simple driver that maps memory to my device where I have memory mapped control/status areas and some DMA memory for i/o. I am hopeful that may work since it is not USB or storage or network.
As for Win7 x64, thanks for the SIZE_T suggestion. I am sure it will help. Not so sure what to do about the Hal_xxx calls which are not defined in the amd64/x64 model.
Anyway, still plugging. To run on Win7 x86 would be a step forward since my customers don't like running XP anymore. Thanks for your input!
|
|
|
|
|
So it looks like you used the win7 32 bit build env, why not use the XP32 bit one?
Ad for the inf file, run it through chkinf, its a tool that's part of the DDK, it will tell you whats missing.
Hal_xxx? Ah, you could be screwed then. Are you calling x86 specific hal funcs? THey shouldn't be visible, are you sure they are part of the allowed api or are they a hidden func? If you are calling them MSFT wont sign your driver. If you stick to the allowed api it should be the same for all hardware platforms. NT4 used to run on Dec Alphas, Mips, x86, all sorts of stuff.
"The whole idea that carbon dioxide is the main cause of the recent global warming is based on a guess that was proved false by empirical evidence during the 1990s." climate-models-go-cold
|
|
|
|
|
"So it looks like you used the win7 32 bit build env, why not use the XP32 bit one? >>> Actually I got confused building an XP driver and when it worked in XP I was really confused. Gave me the idea to try Win7 x86.
"Ad for the inf file, run it through chkinf, its a tool that's part of the DDK, it will tell you whats missing." >>> I did do that and it was helpful. Apparently not all things are required, though, such as the CAT (certificate). Just have to confirm at install time.
"Hal_xxx? Ah, you could be screwed then. Are you calling x86 specific hal funcs?" >>> Yes. As I said, I did get deprecation warnings but it ran in XP. It may run in Win7 x86 if I can fix it. Seems to be having trouble with initialization. I do use the registry functions also and that is where my current efforts lie.
When I try to build for Win7 x64 the Hal_xxx deprecation warnings turn to undefined errors. So I am guessing that Hal_xxx functions are present in Win7 x86. Maybe Win7 x86 is really a jazzed up XP? Can't find any info about that.
My current efforts now turn to setting up a debug environment so I can trace what is going wrong. The device manager is flagging the initialization, but that covers a lot of ground. Thanks for suggestions.
|
|
|
|
|
Ah, win 7 signing, cat files.
OK, for win7 32 bit run a command shell and type bcdedit -set testsigning on and bcdedit -set loadoptions DDISABLE_INTEGRITY_CHECKS
When you restart you should see 'TestMode' appear in the bottom right.
For win7 64 bit you need to test sign the driver, and do the above. Look at test signing on loine, you need to use inf2cat and signtool and import the certificate into certstore.
Debugging looks daunting at first, but when you get it going its a doddle. WUndbg, and I use firewire, it is quicker than serial. Look at symSrv for MSFTs public symbols, they are very useful.
As for Hal, I wasn't aware they had dropped some funcs from the kernel API, but perhaps they have, or they were forbidden funcs. Look in the DDK documentation, if you cant find them, they are forbidden.
"The whole idea that carbon dioxide is the main cause of the recent global warming is based on a guess that was proved false by empirical evidence during the 1990s." climate-models-go-cold
|
|
|
|
|
As far as signing, the Device Manager driver install hassled me with Q&A about did I really want to do it this and then seemed to try to install. That is when I got the init error.
"DDISABLE_INTEGRITY_CHECKS" >>> I put in both DDISABLE_INTEGRITY_CHECKS and DISABLE_INTEGRITY_CHECKS to be sure. Both were accepted and it worked, system booted in test mode as you said.
I use Remote Desktop to run the target test machine and I have a 1 Gb Ethernet connection. I will have to read the docs to figure out how to run debugger. For regular apps I install the Visual Studio remote debugger on the target and hook Visual Studio to it over the LAN. Pretty sure this will not work for kernel mode debugging.
Sorry, I did not understand your debugging suggestion. Any good docs, links, etc. you would recommend?
And thank you very much for your support. It is appreciated. I figure I will baby step my way to a full Win7 x64 driver. Win7 x86 is a good stepping stone I think.
Thanks again.
|
|
|
|
|
GeorgeMayfield wrote: regular apps I install the Visual Studio remote debugger on the target and hook
Visual Studio to it over the LAN. Pretty sure this will not work for kernel mode
debugging
It wont.
You need to enable debug in the kernel, its the ini file on XP, or system configuration on win7. I like firewire, its quick, but not all machines have it, but you can get firewore pccards and pic cards. For info on this just google it, MSDN will be a good source, OSR online is another great kernel source, very good n fact.
Have fun! Its the bitchiest learning curve in the world, but when you master the windows kernel, everything else is childs play!
"The whole idea that carbon dioxide is the main cause of the recent global warming is based on a guess that was proved false by empirical evidence during the 1990s." climate-models-go-cold
|
|
|
|
|
Thank you Mr. Munchies. I am a newbie at this and did not understand most of your debugging input. I have Ethernet and hope that will work for remote. Or I will install tools directly on my target and just work locally. I will see what DDK docs say.
I do appreciate the input. I will probably not have anything to say for awhile since now I must also do my taxes. I am a schedule C guy and that takes time.
Thanks.
|
|
|
|
|
GeorgeMayfield wrote: I have Ethernet and hope that will work
No, you cant use it. Has to be firewire or com port. You cant work locally either, because when you break the kernel, the whole machine locks.
It is easy once you first do it, load symbols, load your code, step through it, see it working, and its a very powerful debugger too, windbg, very powerful. Once you get used to it you will use it for user mode debugging too and only use VS as a code editor. Seriously.
"The whole idea that carbon dioxide is the main cause of the recent global warming is based on a guess that was proved false by empirical evidence during the 1990s." climate-models-go-cold
modified 10-Apr-14 19:15pm.
|
|
|
|
|
OK, that sucks. My dev system is a laptop but I think it has firewire (sort of a trapezoid connector and USBish sized ???) and NO com or printer ports. My target is an industrial single board but with a PCI (not PCIx) bus and COM ports. Maybe I can use a USB to serial card for the laptop and hook that way.
As we speak I am downloading the checked version of Win7 x86 and Win7 x64. More as I read the docs.
Thanks.
|
|
|
|
|
COM ports are rare these days, firewire less so but you can use a serial to USB (star, prolific) to put aa COMN port on a laptop. Firewire is quicker though, be aware of that.
A firewire PCI card will be about the same as a usb-Serial converter (20 euros/25 dollars).
Checked versions of the OS are useful when you really have to debug into the OS, but otherwise not, and I have never used them (I once downloaded just a checked ndis.sys though.) You can turn on debugging in various components of the kernel.
Be ware of one thing, on 7 you need to enable debug printing, so google adding 'Debug Print Filter' to the registry.
And when debugging your driver enable Verifier on it, selecting all but the ;low resource simulation' setting. You will get a lot of bugs probably, but these are all real bugs that need fixing, its just that verifier finds them before your customers do. SOS use it. Religiously,
And when you have done all that, you want to sign the driver. And that, is another whole can of worms, believe me.
"The whole idea that carbon dioxide is the main cause of the recent global warming is based on a guess that was proved false by empirical evidence during the 1990s." climate-models-go-cold
|
|
|
|
|
Thanks for tips. Take awhile to set this up. More when I know it.
|
|
|
|
|
What would interfere or cause an interupt? Windows xp pro, usb to serial with prolific 1.8 drivers (I think... sorry tried three diff versions thus far), legacy hardware enabled, power disabled on usb root, serial mouse detection turned off (uses usb mouse anyway and PS2 connected keyboard). 232 data converter to usb to serial and the application is based on .Net 2.0 / Visual Fox Pro (not my app). Besides the monitor, no other connected devices for i/o. Has all updates.
Everything seems to test fine. (Telnet to 232 works as well) I am at my end of knowledge or just missing the obvious.
Suggestions? It works about an hour'ish and then just stops.
|
|
|
|
|
|
I did not catch anything of significance. I did find that I would get a contious receive. I think the dc is bad.
However, with all of this I did switch machines (so to speak ... hit the junk pile and built one from pieces and parts) and had the same problem. After some time, I had a light-bulb go off inside my head. Update the chip set drivers. It worked.
Stupid me. I should have considered drivers on the previous machine. It just never even crossed my mind that they could have updated or needed to update with a Win Update. Ouch ... such a newbie mistake.
|
|
|
|
|
Hi to all,
Is there an official way to propose a new chapter and forum section? Or is it enough to say that I want a new chapter for Arduino articles? Or may I want it in this forum
|
|
|
|
|
|
|
Such as a USB keyboard to press a key, an interrupt is generated.
thanks muuuuuch
|
|
|
|
|
I'm not sure about how to simulate one, but I remember using the standard PC keyboard interrupt to trigger events in a C++ (state machine) program assignment I wrote. My lecturer just loaded it onto his PC with all his work on it to try it out and it worked and importantly then returned normal function to the keyboard interrupt I'd used - Interrupt 9. I used a book 'The undocumented PC for information which is/was very good for this sort of stuff.
As you mention a USB device, try looking at devices that provide Inputs and Outputs - they often have one or more inputs that can be set to trigger an interrupt when their input state is changed - by say a switch. I've used mostly internal PC I/O cards which can trigger interrupts but also USB devices which provide the same functionality. Serial Port connected devices also have/had this functionality - even if your PC may no longer have a 9 pin serial port.
|
|
|
|