EM-X270: WinCE: Updater
Contents
Introduction
The EM-X270 Updater Framework is based on general CompuLab Updater framework for Windows CE.
Updater Customization for EM-X270
Target Media Layout
The EM-X270 target media is composed from 1Mb NOR flash and 512Mb NAND flash.
The EM-X270 NOR flash includes:
- U-Boot (hardware bootstrap)
- U-Boot environment
- Eboot (WinCE bootloader)
- Splashscreen
The EM-X270 NAND Flash includes:
- Eboot parameters (1 NAND block)
- MBR
- BINFS partition (for NK.bin)
- TFAT partition for user data storage
Updater Flow
The EM-X270 Updater installation flow is slightly different from the generic Updater flow. The Updater application updates the NAND flash media only. The NOR flash media is updated by U-Boot script prior to Updater invocation. The EM-X270 Updater flow is summarized below:
- Primary U-Boot update script is invoked by pressing and holding Sleep/Resume button immediately after the reset.
- The primary U-Boot update script invokes WinCE NOR flash update script (update.img) from USB LiveDisk
- The WinCE NOR flash update script performs the following actions:
- Program Eboot
- Program splashscreen
- Update U-Boot environment variables required for WinCE auto-boot
- Boot of Updater OS
- On Updater OS boot completion the Updater application is automatically started
- The Update application performs the following actions:
- Reserve 1 NAND block for Eboot parameters
- Erase existing partitions
- Create MBR
- Create BINFS partition for NK.bin storage
- Create user data partition
- Format user data partition with TFAT
- Store NK.bin file into BINFS partition
- Update Eboot parameters required for proper NK.bin boot
EM-X270 WinCE NOR Update Script
if usb start; then if fatload usb 0:1 a0010000 eboot.nb0; then echo ===== Update eboot.nb0 ===== cp.b 70000 a0050000 1000 protect off 70000 +40000 erase 70000 +40000 cp.b a0050000 70000 1000 cp.b a0010000 71000 3f000 fi if fatload usb 0:1 a0010000 splashscreen.bmp; then echo ===== Update splashscreen ===== protect off b0000 +50000 erase b0000 +50000 cp.b a0010000 b0000 50000 fi echo ===== Update Enviroment Variables ===== setenv bootdelay 1 setenv boot_mode wince setenv nand_mode off setenv boot_wince "cp.b 71000 a7e00000 3f000; go a7e00000" saveenv if fatload usb 0:1 a0001000 nk_updater.nb0; then echo ===== Launch WincCE Updater ===== go a0002000 fi fi usb stop
EM-X270 Generic Updater XML Script
<updater version="1.0"> <source_storage> <access_information> <device_type>USB</device_type> <device_name>DSK2:</device_name> <mount_path>\Hard Disk</mount_path> </access_information> <logger_information> <updater_logger> <file_name>updater_log.txt</file_name> <append_log>false</append_log> <verbosity>debug</verbosity> </updater_logger> <system_logger> <file_name>system_log.txt</file_name> <append_log>false</append_log> </system_logger> </logger_information> </source_storage> <target_storage> <device id="nand0"> <config type="nand" chipid="0" sectorsize="0x800" blocksize="0x20000" length="detected"></config> <region id="boot_region"> <config type="boot" start="0x0" alignment="blocksize"></config> <entity id="eboot_config"> <config type ="raw" offset="0x0000" length="blocksize" alignment="blocksize"></config> </entity> </region> <region id="os_region"> <config type="os" alignment="blocksize"></config> <source file="os_region.nb0" format="raw"></source> <entity id="os_partition_table"> <config type="partition_table"></config> </entity> <entity id="partition_binfs"> <config type="partition" name="binfs" length="auto" reserve="10%" alignment="sectorsize"></config> <source file="nk.bin" format="bin"></source> </entity> <entity id="partition_system"> <config type="partition" name="system" alignment="sectorsize"></config> </entity> </region> <!-- Compensate for the bad blocks variance among differnt NAND chips --> <region id="reserve_region"> <config type="reserve" length="blocksize" replication="10" alignment="blocksize"></config> </region> </device> </target_storage> <actions> <action type="reserve"> <target id="reserve_region" alignment="blocksize"></target> <params oem_attribute="reserved_readonly"></params> </action> <action type="reserve"> <target id="eboot_config" alignment="blocksize"></target> <params oem_attribute="reserved_readonly"></params> </action> <action type="erase"> <target id="os_region"></target> </action> <action type="partition_create"> <target id="partition_binfs"></target> <params part_type="binfs" part_active="true"></params> </action> <action type="partition_create"> <target id="partition_system"></target> <params part_type="dos32_fat" part_active="false"></params> </action> <action type="partition_format"> <target id="partition_system"></target> </action> <action type="store" subtype="raw"> <target id="partition_binfs"></target> </action> <action type="update_parameter" subtype="offset"> <target id="eboot_config"></target> <params param_offset="0" param_length="4" param_value="0xabcdef01" param_type="number"></params> <params param_offset="4" param_length="4" param_value="kernel_start" param_type="reserved" image_entity="partition_binfs"></params> <params param_offset="8" param_length="4" param_value="image_start" param_type="reserved" image_entity="partition_binfs"></params> <params param_offset="12" param_length="4" param_value="kernel_length" param_type="reserved" image_entity="partition_binfs"></params> </action> <action type="reset" subtype="cold"></action> </actions> </updater>