OSDev.org https://forum.osdev.org/ |
|
absence of PXE+ structure https://forum.osdev.org/viewtopic.php?f=15&t=33804 |
Page 1 of 1 |
Author: | eminus [ Thu Aug 01, 2019 2:08 am ] |
Post subject: | absence of PXE+ structure |
Hi, I faced issue about PXE structure. I couldn't found !PXE in pxe pointer of PXENV+ structure. My structure for PXENV+: Code: // The Signature of the PXENV+ structure - contains "PXENV+". uint8_t Signature[6]; // The MSB contains the Major version number, while the LSB contains the minor version number. uint16_t Version; // The Length and the checksum of the structure, used for calculating the checksum. uint8_t Length; uint8_t Checksum; // A Far Pointer to the real mode PXE API entry point. uint32_t RMEntry; // 32-bit offset to the protected mode API entry point. Instead of this, the !PXE structure is recommended. uint32_t PMOffset; // The rest of the fields don't matter much, and the Specifications can be referred. uint16_t PMSelector; uint16_t StackSeg; uint16_t StackSize; uint16_t BCCodeSeg; uint16_t BCCodeSize; uint16_t BCDataSeg; uint16_t BCDataSize; uint16_t UNDIDataSeg; uint16_t UNDIDataSize; uint16_t UNDICodeSeg; uint16_t UNDICodeSize; // This is a far pointer to the "!PXE" structure, only present when the structure is present. uint32_t PXEPtr; When I was in the Protected mode, I switched to real mode for PXE interrupt. After that es and ebx registers got the address of PXENV+ structure. Then I want to use PXEPtr that has incorrect address. But there is correct Signature, Length, Checksum in PXENV+ structure but PXEPtr has incorrect address or in VMWare workstation PXEPtr has address of PXENV+ structure. |
Author: | Octocontrabass [ Thu Aug 01, 2019 2:50 am ] |
Post subject: | Re: absence of PXE+ structure |
Did you tell your compiler that the PXENV+ structure doesn't follow C struct alignment rules? |
Author: | eminus [ Thu Aug 01, 2019 4:15 am ] |
Post subject: | Re: absence of PXE+ structure |
Yes, I've configured like this: Code: struct __attribute__((__packed__)) PXE_ENV{
// The Signature of the PXENV+ structure - contains "PXENV+". uint8_t Signature[6]; // The MSB contains the Major version number, while the LSB contains the minor version number. uint16_t Version; // The Length and the checksum of the structure, used for calculating the checksum. uint8_t Length; uint8_t Checksum; // A Far Pointer to the real mode PXE API entry point. uint32_t RMEntry; // 32-bit offset to the protected mode API entry point. Instead of this, the !PXE structure is recommended. uint32_t PMOffset; // The rest of the fields don't matter much, and the Specifications can be referred. uint16_t PMSelector; uint16_t StackSeg; uint16_t StackSize; uint16_t BCCodeSeg; uint16_t BCCodeSize; uint16_t BCDataSeg; uint16_t BCDataSize; uint16_t UNDIDataSeg; uint16_t UNDIDataSize; uint16_t UNDICodeSeg; uint16_t UNDICodeSize; // This is a far pointer to the "!PXE" structure, only present when the structure is present. uint32_t PXEPtr; }; |
Author: | eminus [ Thu Aug 01, 2019 4:44 am ] |
Post subject: | Re: absence of PXE+ structure |
I found a problem. I have to translate segment:offset to physical address in this field (PXEPtr). That's worked well! Thanks. |
Page 1 of 1 | All times are UTC - 6 hours |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |