Search by Tags

Load drivers from internal flash

 
Applicable for

Subscribe for this article updates

On Vybrid Windows CE images the internal flash filesystem is mounted asynchronously during boot, this means that it's not granted that a file on the internal flash (mounted as FlashDisk like on all the other Colibri platforms) is accessible during the first seconds of the system startup.
This prevented drivers that are not included in the OS image from being loaded directly (by putting their settings under a subkey of the HKEY_LOCAL_MACHINE\Drivers\Builtin key) or by a bus controller like USB or SD.
This restrictions applies also to touch screen drivers or other drivers loaded by GWES, the graphic subsystem of Windows CE.
If you need to load drivers at startup you can configure their registry entries and then add two additional parameters in the registry:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Wait4FlashDisk]
"Order"=dword:128
"Flags"=dword:0

Those changes will force the system to load a driver that waits until the internal flash filesystem is mounted before loading other drivers.
This behaviour is disabled by default because it may impact boot time, settings the "flags" entry to 0 will enable it, allowing the OS to load drivers stored on the internal flash.
The "Order" key can be used to decide the loading order of the driver. All the drivers loaded before must be stored inside the OS image, drivers with no value for the "Order" entry inside their subkey or with a value higher than the one specified for the Wait4FlashDisk driver may be loaded from flash.
If you need to load from flash an USB driver "Order" of Wait4FlashDisk must be set to 0x14 or less.
If you need to load an SD driver you should set "Order" of Wait4FlashDisk to 0x32 or less.
You shouldn't set the parameter to 0 because in this way the system may try to load the driver before the NAND flash driver, leading to a deadlock.
If you plan to install your driver using a CAB file you can simply add the above registry entries to your setup script and ensure that your driver binaries are stored in the \FlashDisk\System folder (don't use a subfolder because it will not be searched when looking for executable files) or use an absolute path to reference your driver in its configuration registry entries.
This method works only for files stored in the internal flash, it will not work for files stored on other storage devices like SD cards or USB thumbdrivers.
After you add the key you have to save the registry and reboot your system to enable the feature.