System designTroubleshooting

media0 with no video0 device node: the sensor driver never probed

/dev/media0 with no /dev/video0: the CSI receiver probed but the sensor driver never bound. Find it in the dmesg trail, fix the overlay, verify the device node.

LumaSpec Vision10 min read Share on LinkedIn

On this page 9 sections
  1. 01What /dev/media0 proves, and what it does not
  2. 02Read the dmesg trail first
  3. 03Why the sensor driver never probed
  4. 04Fix it in this order
  5. 05Verify the fix held
  6. 06Worked example: a 12 fps belt need met by a 120 fps USB3 board camera
  7. 07When switching interfaces beats more driver work
  8. 08Prevention for the next project
  9. 09Questions

You boot the board with the camera module seated, and Linux creates /dev/media0 but no /dev/video0. Every capture tool then finds nothing to open, and the camera looks dead. That pair of facts is a precise diagnosis rather than a mystery: the receiver side of the camera interface probed, and the sensor driver never bound. This page shows you how to read the boot trail to confirm which layer failed, the fix order for the common case, and the point at which switching to a USB3 or GigE board camera beats more driver work. Everything here runs from a shell on the target board, so you can work through it over a serial console.

What /dev/media0 proves, and what it does not

Two different kernel drivers create those two nodes. The CSI receiver, the silicon block that terminates the camera lanes, is a media controller: its driver registers /dev/media0 as soon as it probes at boot, whether or not a camera is connected. The video node is different. It appears only after a sensor driver binds to the receiver, registers its subdevice, and completes the capture pipeline. Only then does the kernel create /dev/video0.

So media0 with no video0 is the kernel telling you plainly: the receiver probed, and the sensor driver did not. The camera was never detected, because no driver ever asked for it.

Three related failures sit one layer apart, and they have different fixes:

The empty trail is the first case, and it is the most common outcome when a module meets a board whose vendor never shipped that sensor's driver.

Read the dmesg trail first

One command separates "never probed" from "probed and failed". For an IMX219 module, the trail check is exactly what the module name suggests:

dmesg | grep imx219

On any other sensor, grep its part number instead, because the driver's probe lines carry it. Read the result against three signatures:

Reseating the ribbon cable does nothing for the empty trail. The media node is the evidence: the receiver, the part the cable plugs into, probed fine.

Why the sensor driver never probed

A sensor driver runs its probe only when two things are true at once: the driver is present in the kernel, and a device-tree node exists for it to bind to. Miss either one and the boot log stays silent.

  • Driver missing: the SoC vendor's board-support package decides which sensor drivers are built in or shipped as modules. A sensor the package does not know simply has no code on the board.
  • Node missing: the device tree must describe the sensor on the correct I2C bus, with the address and the compatible string the driver matches, and with status enabled. Vendors ship this as an overlay, and the module vendor's instructions are explicit that you edit the device tree file for your hardware setup before boot.
  • Pairing mismatch: an overlay built for a different module or a different camera connector leaves the node where no driver looks. The camera device tree overlay CSI mapping troubleshooting guide shows how the connector mapping goes wrong in practice.

None of these is a hardware fault, which is why the cable, the connector and the module usually turn out to be fine.

Fix it in this order

  1. Name the sensor. Take the part number from the module's data sheet; it is the string your grep and your device tree both need.
  2. Ask the module vendor for the driver package for your exact board. It should contain the sensor driver and a matching overlay. If the vendor publishes no package for your board, that answer decides the rest of the project; the worked example below turns it into a decision.
  3. Apply the overlay the package ships, editing the device tree for your hardware setup exactly as the package's own instructions describe. Change one variable at a time; do not hand-edit a vendor overlay for a different module first.
  4. Reboot and rerun the grep. You now expect probe lines that name the sensor and end in a successful bind.
  5. List the video nodes again. The video node appears once the sensor subdev binds to the receiver and the pipeline completes.
  6. Query the node: point v4l2-ctl at it with -d /dev/video0 and read the format the driver reports. Then capture one frame and look at it.
  7. If frames arrive but look wrong, raw, green or shifted, the sensor layer is done and the faults move downstream. The CSI camera with no ISP: what raw sensor output means guide explains the raw case.

Verify the fix held

Three checks, in order, and each one gates the next:

  • The grep now returns the sensor's probe line. An empty trail after a driver change means the overlay did not apply; check the bootloader stage applied it before blaming the driver.
  • The video node exists where your capture application looks. If the kernel sees the sensor but your libcamera-based stack still lists nothing, the gap between kernel and user space is what the kernel detects the sensor but libcamera lists no camera device guide addresses.
  • One captured frame opens and shows the scene. Boards whose ISP needs its own driver make this step literal: a walkthrough of capturing raw IMX219 frames during ISP driver setup shows what a working raw path looks like before the ISP is in place.

Record what worked. The sensor part number, the kernel version and the overlay file belong on one line of your build notes, because the next board you image will need the identical triple.

Worked example: a 12 fps belt need met by a 120 fps USB3 board camera

Suppose the vendor answer at step 2 comes back empty: no driver for your board, none in the board-support package, none planned. The decision is now build versus switch, and the inspection rate sets the terms.

Inputs:

  • Belt speed 0.3 m/s with one part every 25 mm: example line values, typical of small-part sorting.
  • One frame per part, parts moving while exposed: the shutter must be global.
  • Candidate replacement: a USB3 board camera, because its bring-up is USB enumeration rather than device-tree work.

Rule in words: the camera must deliver at least one frame per part, so its frame rate must meet the parts-per-second rate, and motion rules out a rolling shutter.

parts per second = belt speed / part pitch = 0.3 m/s / 0.025 m = 12 parts per second required frame rate >= 12 fps

On the switch side, the LS-BCM-0003 prints 120 fps at 3.1 MP on a 1/1.8" global-shutter IMX252 sensor with a C-mount. The margin is 120 fps / 12 fps = 10x, which absorbs a belt speed up to 3.0 m/s before the rate binds again, and the global shutter answers the motion constraint. Bring-up becomes a USB enumeration problem: the host controller's own stack, no overlay, no kernel rebuild.

Decision: with no sensor driver available, switch the interface rather than port the driver. This example's line needs 12 fps and the USB3 module provides 120 fps, ten times over.

Board-level cameras3.1 MP USB3 board-level camera, IMX252, 1/1.8" global shutter, 120 fps (LS-BCM-0003)LS-BCM-0003
Sensor format
1/1.8"
Lens mount
C-mount
Interface
USB3
Resolution
5 MP
$690.00View partBuild a system with it

When switching interfaces beats more driver work

The rule from the worked example generalizes: the interface question is decided by driver availability first, and only then by cable length and bandwidth.

  • USB3 board cameras for short runs. The host controller enumerates the camera through its own stack, with no overlay and no kernel rebuild, and USB3 carries multi-megapixel streams at industrial frame rates. The MV-CB060-10UM-B ships as a bare board: a 6 MP USB3 camera on an IMX178 mono sensor with no lens mount, so you fit the optics the machine needs. The failure modes move to user space too; the UVC camera not detected: identify the device node first checks are configuration work, not kernel work.
  • GigE board cameras for long runs. A CSI ribbon run is short, while a GigE link runs 100 m over copper as 1000BASE-T defines it. The MV-CB016-10GM-M-W covers that case: a 1.6 MP GigE board camera on a global-shutter IMX296 sensor with an M12 mount.
  • Full-size cameras when the module's sensor or optics no longer fit the task. Industrial cameras speak GigE or USB3 natively, so the CSI driver question disappears; compare in the area scan cameras category. The MV-CS200-10UM is a 20 MP USB3.0 camera on a 1" IMX183 sensor with a C-mount and a rolling shutter.
Board-level camerasHikrobot MV-CB060-10UM-B 6 MP Board Level Camera, USB3, IMX178, Mono, Bare Board, V4MV-CB060-10UM-B
Sensor format
1/1.8"
Interface
USB3
$239.00View part
Board-level camerasHikrobot MV-CB016-10GM-M-W 1.6 MP GigE board-level camera, IMX296, Mono, M12 lens mount, WTB GigE portMV-CB016-10GM-M-W
Sensor format
1/2.9"
Lens mount
M12
$559.00View part
Area scan camerasHikrobot MV-CS200-10UM 20 MP Area Scan Camera, USB3.0, IMX183, 2nd Gen., MonoMV-CS200-10UM
Sensor format
1"
Lens mount
C-mount
$759.00View part

Browse the board-level cameras category for the other module options, or filter by interface and shutter in the camera finder.

Prevention for the next project

Driver availability is a purchasing question, so ask it before the purchase:

More diagnostics from this area sit on the systems topic page. If you want a second opinion on the driver question for a specific module-and-board pairing, ask through the contact page before you order: expert support comes with every order, and it costs far less than a week of kernel archaeology. To move straight to a chain that enumerates without overlay work, start the camera configurator at the camera step.

Questions

Why does /dev/media0 appear when no camera is connected?

The media controller node belongs to the CSI receiver, not to the camera. The receiver's driver registers /dev/media0 when it probes at boot, camera present or not, because the receiver is part of the board. The video node is different: the kernel creates it only after a sensor driver binds and the capture pipeline completes. That asymmetry is exactly why media0 alone proves nothing about the camera.

Does an empty dmesg grep always prove the driver is missing?

On a board that boots normally, yes, and the exceptions are minor. The grep pattern may not match the driver's log spelling, so search case-insensitively on the sensor part number. The boot log may have rotated, so read it soon after boot. And a kernel built with the driver but without any matching device-tree node also gives an empty trail, which has the same fix either way: supply the pair the vendor package ships.

Once the video node appears, what can still stop the frames?

Four things, all downstream of the driver: the sensor power rails, the pixel clock feeding the sensor, the lane mapping between module and connector, and the format negotiation in the pipeline. Those failures show a probe line followed by streaming errors, which is a later and different fault than the empty trail this page covers.

When is a USB3 board camera the better answer than fixing CSI?

When no maintained driver exists for your sensor on your board's board-support package and no vendor package is coming. Porting a sensor driver is kernel work you then own through every future kernel update. A USB3 board camera enumerates through the host controller's own stack, so bring-up is configuration rather than driver development. Ask about driver availability before you buy, not after the trail comes back empty.

How do I tell the sensor's entity from the receiver's in the media graph?

Read the entity names in the graph the media controller prints. The sensor entity carries the sensor's part number, the receiver entity carries the receiver silicon's name, and the capture video node sits at the end of the chain. If the graph shows the receiver and the ISP but no sensor entity, the sensor driver never registered its subdevice: the same empty-trail diagnosis, seen from the graph side.