NVMe SSD detected in lspci but missing in lsblk (Missing kmod-nvme & Kernel Mismatch)

Hi everyone,

I recently purchased a Banana Pi BPI-R4 Pro and I am facing a persistent issue with getting my NVMe SSD to work. I’m hoping someone can point me to the correct firmware image or a workaround.

The Issue: The system physically detects the NVMe controller (visible in lspci), but the block device is not created (not visible in lsblk). It seems the necessary kernel modules (kmod-nvme) are missing from the image, and I cannot install them via opkg due to a kernel version mismatch with the official snapshots.

Hardware Setup:

  • Board: Banana Pi BPI-R4 Pro
  • Storage: 128GB NVMe SSD (Silicon Motion Controller)
  • Current OS: OpenWrt (Vendor Snapshot Image, Kernel 6.6.x - dated approx Nov 25, 2024)

Diagnostics & Logs:

  1. LSPCI (Hardware is detected): The controller is clearly visible here, so the hardware connection is fine.root@OpenWrt:~# lspci 0003:01:00.0 Non-Volatile memory controller: Silicon Motion, Inc. SM2263EN/SM2263XT (DRAM-less) NVMe SSD Controllers (rev 03)
  2. LSBLK (No disk found): Only the eMMC (mmcblk0) and system partitions are visible. nvme0n1 is missing.root@OpenWrt:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS mmcblk0 179:0 0 7.3G 0 disk ... (only emmc partitions)
  3. Missing Modules: I searched for the module manually, but it returns nothing.root@OpenWrt:~# find /lib/modules -name "*nvme*" (no output)
  4. OPKG Install Fails (Kernel Mismatch): When I try to install kmod-nvme from the official repos, it fails because the kernel version of the vendor image does not match the official snapshot repository.`root@OpenWrt:~# opkg install kmod-nvme Unknown package ‘kmod-nvme’.
  • opkg_install_cmd: Cannot install package kmod-nvme.*I even tried using –force-dependsand–nodeps`, but since the kernel magic string is different, it refuses to load the module.*

What I have tried so far:

  • Verified the SSD works by formatting it (ExFAT) on a PC via USB. It works perfectly.
  • Tried updating opkg lists and installing pciutils, nvme-cli, block-mount (these installed fine, but the driver kmod-nvme is the issue).
  • I cannot simply flash the official mainline OpenWrt BPI-R4 image because I need the 2.5G ports to work (which are specific to the Pro model).

My Request: Is there a specific “Full” or “SD-Media” image for the BPI-R4 Pro that comes with kmod-nvme pre-installed/built-in? Or is there a compatible repository where I can pull the correct kernel modules for the Sinovoip vendor kernel?

Any link to a working image for the Pro model with NVMe support would be greatly appreciated.

Thanks in advance!

My personal opinion:

This might be caused by the failure to increase the driver. It would be better to add the necessary configuration by yourself and recompile from the BSP.

Thanks for the reply.

Honestly, I’m a bit confused and worried here. You are saying the official image provided by the manufacturer doesn’t support the onboard NVMe hardware? The release notes only mentioned that 5G modules are currently non-functional. There was absolutely no warning about NVMe issues.

I am not a developer who can just “recompile from BSP”. I just bought this product and I expect the basic hardware to work, or at least be installable. I tried installing kmod-nvme via opkg many times, but it fails because of the kernel version mismatch in your image.

Also, I’m starting to suspect my unit might be physically defective because of other strange behaviors:

  1. Boot Switches: They are acting totally weird. They work in the opposite position of what the Wiki says.
  2. LEDs: The mPCIe status LED stays ON even when I physically switch it OFF.
  3. Second Slot: When I try the second M.2 slot (CN44), lspci shows absolutely nothing. Even if it is a different Key type, shouldn’t there be at least some detection?

Is this really just a software issue, or did I receive a faulty board? Could you please provide a link to a “Full” image that actually includes the NVMe drivers? I just want to verify that my hardware is not broken.

Thanks.

The m.2 slots (1 key-b and one key-e) sharing pcie lane which is switched with a gpio. So if in one slot card is detected the card in the other does not.

My mainline dts is using key-m as default and uses devicetree overlay to switch to the key-e slot. Not sure how this is done in bpi image.

So, are you saying that I won’t be able to use this device properly until an official OpenWrt release is available? Because I certainly don’t know how to compile it myself.

If bl2 says sdmmc it boots correct device. Your error is in uboot maybe because loading with higher speed fails. This is the sdmmc issue i had,so i reduced speed in uboot and linux dts to have this stable. For this and nvme you have to compile source by yourself. But you do not need to wait for official openwrt,you can do this with bpi source too.