Microsoft KB Archive/317432

= PRB: CE/PC Ethernet Boot Loader Detects CRC Checksum Failure During Image Download =

Article ID: 317432

Article Last Modified on 12/15/2003

-

APPLIES TO


 * Microsoft Windows CE .NET 4.2

-



This article was previously published under Q317432



SYMPTOMS
When you download an OS image on a CE/PC with a DMA-capable Ethernet controller (with cards that are based on RTL8139, DP83815, and so on), the Ethernet boot loader (Eboot.bin) detects a CRC Checksum failure and displays the following on the debug serial port (COM1): System ready! Preparing for download... Using device name: CEPC60576 Hit ENTER within 3 seconds to enter static IP address

!InitDHCP:: Calling ProcessDHCP ProcessDHCP::DHCP_INIT Got Response from DHCP server, IP address: 192.168.11.107 ProcessDHCP::DHCP IP Address Resolved as 192.168.11.107, netmask: 255.255.255.

Lease time: 7200 seconds Got Response from DHCP server, IP address: 192.168.11.107 No ARP response in 2 seconds, assuming ownership of 192.168.11.107 +EbootSendBootmeAndWaitForTftp Sent BOOTME to 255.255.255.255 Sent BOOTME to 255.255.255.255 Sent BOOTME to 255.255.255.255 Sent BOOTME to 255.255.255.255 Sent BOOTME to 255.255.255.255 Locked Down Link 1 Src IP 192.168.11.107 Port 0800 Dest IP 192.168.0.169 Port 0460 EthDown::TFTPD_OPEN::boot.bin -EbootSendBootmeAndWaitForTftp NOTE: This problem occurs only with a controller that supports DMA. For example, this problem does not occur on an NE2000-compatible controller, and it does not occur on the Geode-based platforms when you use the Geode BSP.
 * Checksum failure on record 2, ABORT!!! *********



CAUSE
The Ethernet boot loader in the CE/PC directory is shared between the CE/PC and the Geode-based platforms. On the CEPC platform, the DMA buffer (which the Ethernet controller uses) conflicts with the OS memory layout as defined in Config.bib. This conflict causes the OS image records to overlay the DMA buffer, and the Checksum fails.



RESOLUTION
To resolve this problem, you can either change the OS memory layout, or you can move the Ethernet Controller DMA buffer. Choose one of the following methods and follow the steps that are described.

Change the OS Memory Layout
The easier of the two resolutions is to change the memory layout that is used by the OS image that you download, which is defined in the %_WINCEROOT%\Platform\Cepc\Files\Config.bib file.

Synchronize the contents of the above file with the version in the %_WINCEROOT%\Platform\Geode\Files\Config.bib file.

Specifically, you can change the default layout from: IF IMGRAM16 ! IF IMGRAM32 ! IF IMGRAM64 ! NK      80200000  00A00000  RAMIMAGE RAM     80C00000  01000000  RAM ENDIF ENDIF ENDIF

to this:

IF IMGRAM16 ! IF IMGRAM32 ! IF IMGRAM64 ! NK      80220000  009E0000  RAMIMAGE RAM     80C00000  01000000  RAM ENDIF ENDIF ENDIF This change reserves a 128-KB buffer at the physical address 0x20.0000. After you change the layout, you must rebuild the platform. You can verify that the OS image has been relocated in memory by observing the output from the makeimg/romimage step (note that values for your environment may differ):

- First DLL code Address: 04000000 Last DLL code Address:  032a0000 First DLL Address:      01ee01ee Last DLL Address:       02000000 Physical Start Address: 80220000   *** This shows that the image beginning of RAM is at 0x22.0000 physical. Physical End Address:   80dd3838 Start RAM:              80de0000 Start of free RAM:      80e04000 End of RAM:             81c00000 -

Move the Ethernet Controller DMA Buffer
Another solution is to move the Ethernet controller DMA buffer to an area that is not in conflict with your OS image. When you open the %_WINCEROOT%\Platform\Cepc\Eboot\Main.c file, you find the following defines: These values determine the base and size of the DMA buffer that is used by the Ethernet controller in the Eboot.bin file (they are provided as arguments to the pfnEDbgInitDMABuffer function callback pointer later in the file).
 * 1) define ETHDMA_BUFFER_BASE         0x00200000
 * 2) define ETHDMA_BUFFER_SIZE         0x00020000

The Checksum problem is resolved when you change the base address to a value that does not conflict with the memory regions that are used by the platform OS (in Config.bib).

After you update the address in the Main.c file, choose one of the following methods to build the Ethernet boot loader, and follow the steps described.

From a Command Prompt

 * 1) Run the command cd %_WINCEROOT%\Platform\Cepc\Eboot.
 * 2) Run the command build -c.
 * 3) Copy the resultant Eboot.bin file to your boot disk from one of the following locations:
 * 4) * $(_TARGETPLATROOT)\target\$(_TGTCPU)\$(WINCEDEBUG)
 * 5) * %_FLATRELEASEDIR% if the value of the WINCEREL environment variable is 1.

From the Platform Builder IDE

 * 1) In the left pane of the integrated development environment (IDE) window, click the Feature View tab, and then click to expand the CEPC: X86 board support package (BSP) node.
 * 2) Right-click the Ethernet boot loader (eboot) icon, and then click Build Selected Features.
 * 3) On the Build menu, click Open Build Release Directory to open the Build Output window.
 * 4) Copy the new Eboot.bin image to your boot disk.

Keywords: kbprb KB317432

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.