How to Check Which Kernel Driver Is in Use for a Device in Ubuntu Using lspci

When configuring hardware acceleration, diagnosing missing Wi-Fi interfaces, or verifying whether proprietary GPU drivers (such as NVIDIA) have superseded open-source drivers (such as Nouveau) in Ubuntu, you must confirm which Linux kernel driver is actively managing your physical hardware. Physical PCI and PCIe devices communicate with the Linux kernel through dedicated loadable kernel modules (LKMs).

The standard tool for querying PCI bus architecture and associated kernel drivers in Linux is the lspci utility. By leveraging specific flags, you can quickly determine both the driver actively controlling a device and all alternative modules compiled into your system.

Using the lspci -k Flag to Reveal Kernel Drivers

By default, running lspci displays basic device vendor and model strings. Adding the -k (kernel) flag instructs the utility to display the driver and kernel module bindings beneath each peripheral:

  1. Open your terminal by pressing Ctrl + Alt + T.
  2. Execute the command:
lspci -k

For each hardware device connected to your motherboard, lspci will print three distinct lines of information:

  • Device Identifier & Name: Shows the bus address, vendor name, and chipset model.
  • Kernel driver in use: The specific driver currently bound to the device by the running Linux kernel. If this line is missing, the kernel has no active driver controlling the hardware (often indicating missing firmware or uninstalled proprietary packages).
  • Kernel modules: All available drivers compiled into the kernel or installed in /lib/modules/ that declare support for that hardware’s PCI vendor and device ID.

Filtering Specific Hardware Subsystems

Because modern computers contain dozens of PCI bridges, host controllers, and system timers, piping lspci -k into grep allows you to focus immediately on critical hardware components:

1. Check Graphics Card (GPU) Drivers

To inspect your display adapter and check whether NVIDIA, AMDGPU, or Intel i915 drivers are active, run:

lspci -k | grep -EA3 'VGA|3D|Display'

Example output for an NVIDIA discrete GPU:

01:00.0 VGA compatible controller: NVIDIA Corporation GA106 [GeForce RTX 3060] (rev a1)
	Subsystem: Micro-Star International Co., Ltd. [MSI] Device 3971
	Kernel driver in use: nvidia
	Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia

In this example, Kernel driver in use: nvidia confirms that the official proprietary NVIDIA driver is actively driving the GPU, while nouveau remains unattached.

2. Check Wireless (Wi-Fi) and Ethernet Adapters

If network connectivity is failing or you need to verify Intel or Realtek wireless firmware binding:

lspci -k | grep -EA3 'Network|Ethernet'

Example output for an Intel Wi-Fi card:

00:14.3 Network controller: Intel Corporation Alder Lake-P PCH CNVi WiFi (rev 01)
	Subsystem: Intel Corporation Wi-Fi 6E AX211 160MHz
	Kernel driver in use: iwlwifi
	Kernel modules: iwlwifi

3. Check Audio Controllers

To inspect sound card driver bindings when troubleshooting missing microphone or speaker output:

lspci -k | grep -EA3 'Audio'

Inspecting Driver Details with modinfo

Once you identify the name from the Kernel driver in use: line, you can query detailed module metadata, such as its version, author, file path, license, and configurable parameters, using the modinfo command:

modinfo iwlwifi

This outputs the exact .ko module file path, firmware dependencies, and runtime parameters that can be passed via /etc/modprobe.d/.

Using lspci -k gives you rapid, conclusive hardware verification without parsing system log files or installing external diagnostic tools on Ubuntu.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.