LUFA Library
Operating System Drivers

Most of the USB classes supported by LUFA are also supported natively in most operating systems, without extra drivers being required. However, in some cases, a driver file is required in order for the device to enumerate and function correctly.

Operating System USB Class Support

The table below lists the supported LUFA USB classes, and their associated native support on modern operating systems.

USB Class Android Windows Linux OS X
Android Open Accessory 2.3.4+ N/A N/A N/A
Audio 1.0 N/A XP+ 2.6.?+ 10.?+
CDC-ACM N/A XP+ 2.6.?+ 10.?+
HID 3.?+ XP+ 2.6.?+ 10.?+
MIDI N/A XP+ 2.6.?+ 10.?+
Mass Storage N/A XP+ 2.6.?+ 10.?+
Printer N/A XP+ 2.6.?+ 10.?+
RNDIS N/A XP+ 2.6.?+ N/A
Still Image N/A XP+ 2.6.?+ 10.?+

Windows INF Drivers

Windows uses INF driver files to associate a USB device of a specific class, VID/PID ID pair, Windows Compatibility ID or other characteristic to a kernel driver. In most cases these files are build into the operating system, and no special user action or driver files are required for a device using a standard USB class to enumerate. However, for some classes, a specific INF driver must be created and given to the operating system for the device to enumerate.

Those USB classes requiring a custom INF driver file in Windows are listed below, along with a basic INF template for each class.

Windows CDC INF Template

This template is required for all CDC-ACM devices on Windows XP or newer.

;     Windows LUFA CDC ACM Setup File
; Copyright (c) 2000 Microsoft Corporation

[DefaultInstall]
CopyINF="LUFA CDC-ACM.inf"

[Version]
Signature="$Windows NT$"
Class=Ports
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
Provider=%MFGNAME%
DriverVer=7/1/2012,10.0.0.0

[Manufacturer]
%MFGNAME%=DeviceList, NTx86, NTamd64, NTia64

[SourceDisksNames]

[SourceDisksFiles]

[DestinationDirs]
DefaultDestDir=12

[DriverInstall]
Include=mdmcpq.inf
CopyFiles=FakeModemCopyFileSection
AddReg=DriverInstall.AddReg

[DriverInstall.Services]
Include=mdmcpq.inf
AddService=usbser, 0x00000002, LowerFilter_Service_Inst

[DriverInstall.AddReg]
HKR,,EnumPropPages32,,"msports.dll,SerialPortPropPageProvider"

;------------------------------------------------------------------------------
;  Vendor and Product ID Definitions
;------------------------------------------------------------------------------
; When developing your USB device, the VID and PID used in the PC side
; application program and the firmware on the microcontroller must match.
; Modify the below line to use your VID and PID.  Use the format as shown below.
; Note: One INF file can be used for multiple devices with different VID and PIDs.
; For each supported device, append ",USB\VID_xxxx&PID_yyyy" to the end of the line.
;------------------------------------------------------------------------------
[DeviceList]
%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2044

[DeviceList.NTx86]
%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2044

[DeviceList.NTamd64]
%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2044

[DeviceList.NTia64]
%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_2044

;------------------------------------------------------------------------------
;  String Definitions
;------------------------------------------------------------------------------
;Modify these strings to customize your device
;------------------------------------------------------------------------------
[Strings]
MFGNAME="http://www.lufa-lib.org"
DESCRIPTION="LUFA CDC-ACM Virtual Serial Port"

Windows RNDIS INF Template

This template is required for all RNDIS devices on Windows XP or newer.

;     Windows LUFA RNDIS Setup File
; Copyright (c) 2000 Microsoft Corporation

[DefaultInstall]
CopyINF="LUFA RNDIS.inf"

[Version]
Signature="$Windows NT$"
Class=Net
ClassGuid={4d36e972-e325-11ce-bfc1-08002be10318}
Provider=%MFGNAME%
DriverVer=7/1/2012,10.0.0.0

[Manufacturer]
%MFGNAME%=DeviceList, NTx86, NTamd64, NTia64

[ControlFlags]
ExcludeFromSelect=*

[DriverInstall]
Characteristics=0x84 ; NCF_PHYSICAL + NCF_HAS_UI
BusType=15
include=netrndis.inf
needs=Usb_Rndis.ndi
AddReg=Rndis_AddReg_Vista

[DriverInstall.Services]
include=netrndis.inf
needs=Usb_Rndis.ndi.Services

;------------------------------------------------------------------------------
;  Vendor and Product ID Definitions
;------------------------------------------------------------------------------
; When developing your USB device, the VID and PID used in the PC side
; application program and the firmware on the microcontroller must match.
; Modify the below line to use your VID and PID.  Use the format as shown below.
; Note: One INF file can be used for multiple devices with different VID and PIDs.
; For each supported device, append ",USB\VID_xxxx&PID_yyyy" to the end of the line.
;------------------------------------------------------------------------------
[DeviceList]
%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204C

[DeviceList.NTx86]
%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204C

[DeviceList.NTamd64]
%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204C

[DeviceList.NTia64]
%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204C

;------------------------------------------------------------------------------
;  String Definitions
;------------------------------------------------------------------------------
;Modify these strings to customize your device
;------------------------------------------------------------------------------
[Strings]
MFGNAME="http://www.lufa-lib.org"
DESCRIPTION="LUFA RNDIS USB Ethernet Adapter"