WinDriver is a kernel-independent, cross-platform development toolkit that enables developers to write user-mode drivers for PCIe, PCI, and USB devices. It supports Windows, Linux, Linux ARM, Windows ARM, and macOS, enabling developers to build drivers with a unified codebase for multiple platforms.
For PCIe devices, WinDriver handles low-level kernel programming, providing developers with a clean, consistent API for:
Developers can use DriverWizard, a GUI tool bundled with WinDriver, to automatically generate code skeletons by scanning the PCIe device, reading the PCI configuration space, and mapping the BARs. This eliminates manual setup, accelerates development, and reduces errors.
PCIe driver development typically includes:
Additionally, PCIe drivers often need to pass Windows Hardware Lab Kit (HLK) certification or meet embedded system reliability standards, requiring extensive testing, logging, and documentation.
These requirements make PCIe driver development a specialized field, with steep learning curves and long development cycles. Any mismanagement of memory, synchronization, or interrupts can lead to critical system-level failures. This is where Jungo’s WinDriver becomes a powerful asset.
User-Mode Driver Framework: Create drivers entirely in user space with no need for kernel-mode code. This reduces development time and system risk.
DMA Support: WinDriver supports Scatter-Gather & Contiguous DMA and simplifies DMA setup, including buffer management, synchronization, and performance tuning.
Interrupt Management: Handle level-sensitive, edge-triggered, and MSI/MSI-X interrupts safely, without delving into low-level kernel interfaces.
Cross-Platform Codebase: Develop once and deploy on Windows, Linux, ARM, and macOS with minimal changes.
Code Generation Tools: DriverWizard scans your PCIe hardware and generates code for C, C#, .NET, Python, Java & Powershell
Debugging and Monitoring Tools: WinDriver includes tools to monitor PCIe traffic, log errors, and profile performance in real-time.
WHQL/HLK Test Support: As an additional service for Windows environments, WinDriver facilitates driver signing and compliance with Microsoft’s HLK tests.
After installing WinDriver, use DriverWizard to detect your PCIe device:
Verify device detection
Open DriverWizard, scan for your PCIe device.
Generate a custom driver project based on your device configuration.
Perform basic read/write tests to confirm connectivity.
Optionally generate a driver installation file (INF) for Windows.
Use the generated project or create one using WinDriver’s API documentation.
Identify your device’s memory regions (BARs) and decide if you need interrupts or DMA.
Use tools like Visual Studio (Windows) or Makefiles (Linux) to compile.
Ensure your application is correctly configured to communicate with your device.
Run your application with administrator/root privileges.
Confirm that your device is correctly detected and responding.
Use WinDriver tools (e.g., WDDEBUG) to monitor device interaction, verify read/write operations, and troubleshoot if needed.
For Windows:
For Linux:
In terms of licensing; Jungo offers:
Windows
Developing PCI device drivers on Windows can be complex, requiring knowledge of the Windows Driver Model (WDM) or Windows Driver Frameworks (WDF).
Jungo WinDriver removes these challenges, offering a powerful user-mode solution that speeds up device driver development while ensuring compatibility with various Windows versions, including Windows 10 and 11.
Linux
Developing drivers on Linux requires in-depth knowledge of the kernel, device tree configurations, and system-level APIs, often necessitating direct interaction with low-level hardware interfaces.
Jungo WinDriver makes the process much easier by allowing user-mode driver development. As a result, developers can avoid complex kernel modifications and reduce system crashes. Available across x86, AMD64 and ARM architectures.
macOS
Developing drivers for macOS involves navigating Apple’s I/O Kit framework, which requires proficiency in Objective-C or C++ and a solid grasp of the macOS kernel environment.
Jungo WinDriver simplifies macOS driver development by eliminating the need to work directly with the complex I/O Kit framework and kernel-level code, enabling stable user-mode development using standard C/C++ APIs.
IMPORTANT – READ CAREFULLY: THIS SOFTWARE LICENSE AGREEMENT (“AGREEMENT”) IS A LEGAL AGREEMENT BETWEEN YOU AND JUNGO CONNECTIVITY LTD. (“JUNGO”), FOR THE WINDRIVER SOFTWARE PRODUCT ACCOMPANYING THIS LICENSE (THE “SOFTWARE”). BY INSTALLING, COPYING OR OTHERWISE USING THE SOFTWARE, YOU AGREE TO BE LEGALLY BOUND BY THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT, DO NOT INSTALL, COPY, OR OTHERWISE USE THE SOFTWARE.
– Individuals: Jungo grants you, as an individual, a personal, non-exclusive, “single-user” license to use the Software on a single computer, in the manner provided below, at the site for which the license was given.
– Entities: If you are an entity, Jungo grants you the right to designate one individual within your organization (and only one) to have the right to use the Software on a single computer, in the manner provided below, at the site for which the license was given.
– License Scope: A single user license allows usage of WinDriver and redistribution of certain components (as defined below) within a single end product SKU, for a single device (identified by its VID/PID (USB) or VID/DID (PCI)), and without SDK/API capabilities. If you need extended license or distribution rights, please contact Jungo.
RESTRICTIONS ON USE AND TRANSFER
(a) You may not distribute, or otherwise transfer or assign, any portion of the Software, including any of the headers or source files that are included in the Software, unless otherwise expressly permitted in this Agreement, subject to the provisions of Section 4 above.
(b) Subject to your full and continued compliance with the terms of this Agreement, including the ongoing payment of annual license fees, you may distribute the following files:
Windows:
-windrvr1640.sys
-windrvr1640_legacy.sys
-windrvr1640.inf
-windrvr1640.cat
-wdapi1640.dll
-wdapi1640_32.dll
-wdapi1640_arm64.dll
-wdapi_dotnet1640.dll
-wdapi_dotnet1640_32.dll
-wdapi_netcore1640.dll
-wdapi_java1640.dll
-wdapi_java1640.jar
-wdreg.exe
-difxapi.dll
-devcon.exe
-windrvr1630.sys
-windrvr1630.inf
-wd1630.cat
-wdapi1630.dll
-wdapi_dotnet1630.dll
-wdapi_java1630.dll wdapi_java1600.jar
-windrvr1220.dll
-wdapi1220.dll
Linux:
-windrvr_gcc_v3.o_shipped
-windrvr_gcc_v3_regparm.o_shipped
-kp_linux_gcc_v3.o
-kp_linux_gcc_v3_regparm.o
-libwdapi1640.so libwdapi1640_32.so
-libwdapi_java1640.so
-libwdapi_java1640_32.so
-wdapi_java1640.jar
-wdapi_netcore1640.dll
-kp_wdapi1640_gcc_v3.o_shipped
-kp_wdapi1640_gcc_v3_regparm.o_shipped
-linux_wrappers.c
-linux_wrappers.h
-wdusb_linux.c
-wdusb_interface.h
-wd_ver.h
-linux_common.h
-windrvr.h
-windrvr_usb.h
-wdsriov_interface.h
-wdsriov_linux.c
-wdreg
-configure makefile.in
-configure.wd makefile.wd.in
-makefile.wd.kbuild.in
-configure.usb
-makefile.usb.in
-makefile.usb.kbuild.in
-setup_inst_dir
-windrvr_gcc_v2.a windrvr_gcc_v3.a windrvr_gcc_v3_regparm.a
-kp_linux_gcc_v2.o kp_linux_gcc_v3.o kp_linux_gcc_v3_regparm.o
-libwdapi1630.so
-libwdapi_java1630.so wdapi_java1600.java
-kp_wdapi1630_gcc_v2.a kp_wdapi1600_gcc_v3.a kp_wdapi1600_gcc_v3_regparm.a
-linux_wrappers.c linux_wrappers.h wdusb_linux.c
-wdusb_interface.h wd_ver.h linux_common.h windrvr.h windrvr_usb.h
-configure.wd makefile.wd.in makefile.wd.kbuild.in
-configure.usb makefile.usb.in makefile.usb.kbuild.in
macOS:
-libwdapi1640.dyld
-libwdapi_java1640.jar
-libwdapi_java1640.dyld
-wdapi_netcore1640.dll
-WinDriver1640.kext
-WinDriver1640.dext
-wd_mac_install.sh
-wd_mac_uninstall.sh
(c) The files listed in Section 5.b above may be distributed only as part of a complete application that you distribute under your organization name, and only if they significantly contribute to the functionality of your application. For avoidance of doubt, each organization distributing these files as part of the organization products is required to have valid license(s) under the organization name/VID, irrespective of the party who actually performed the product development. Licenses granted to subcontractors do not grant distribution or other rights to the organizations for which they are developing.
(d) The distribution of the windrvr.h header file is permitted only on Linux.
(e) You may not modify the distributed files specified in Section 5.b of this Agreement.
(f) You may not distribute any header file that describes the WinDriver functions, or functions that call the WinDriver functions and have the same basic functionality as that of the WinDriver functions.
Web site: https://www.jungo.com
Email: [email protected]
Use, duplication, or disclosure by the Government is subject to restrictions set forth in subparagraph (c)(1) of The Rights in Technical Data and Computer Software clause at DFARS 252.227-7013 or subparagraphs (c)(1)(ii) and (2) of Commercial Computer Software – Restricted Rights at 48 CFR 52.227-19, as applicable.