PRB: CE/PC Ethernet Boot Loader Detects CRC Checksum Failure During Image Download (317432)



The information in this article applies to:

  • Microsoft Windows CE .NET Operating System

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
****** Checksum failure on record 2, ABORT!!! *********
				
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.

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:
#define ETHDMA_BUFFER_BASE          0x00200000
#define ETHDMA_BUFFER_SIZE          0x00020000
				
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).

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:
    • $(_TARGETPLATROOT)\target\$(_TGTCPU)\$(WINCEDEBUG)
    • %_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.

Modification Type:MinorLast Reviewed:12/15/2003
Keywords:kbprb KB317432