PCIe issue


The lspci output is empty on my Jetson TX1 board. I understand that PCIe slot should be somehow enabled but I didn’t find the way how to do it.


Do you have a card plugged in? Also the PCIe x1 from the M.2E slot should be working.

I got the same issue with gentoo, empty lspci output.

In gentoo the naming scheme for ethernet devices is following the pcie addresses. On the TK1 this worked, showing me enp1s0 and enp4s0 but on the TX1 it is named eth0, as if the ethernet adapter was no pcie device.

Any tips?

The eth0 versus enp1s0 type naming is likely a result of a udev rule, and not the bus. The lack of lspci output for the realtek ethernet is probably due to non-PCI connect for the NIC.

The Ethernet RTL8153 on P2180 board/CVM is a USB3.0 device instead of PCIE device.
The Ethernet RTL8111 on JTK1 is a PCIE device.

I was looking into the pcie as well, but for the pciehp, hp is for hot plug. There’s a nice description to get the hot plug enabled, here,


but the X1 doesn’t have the hot plug pcie kernel. any ideas for how to get the kernel modified to add the pciehp kernel? the link goes on to describe how to do that, with grub, which the tx1 doesn’t do.

Happy to hear any pointers.


On your running TX1, save a copy of /proc/config.gz to your x86 host. Probably rename it as “config-$(uname -r).gz”. Note that in this config is a CONFIG_LOCALVERSION which will need to have the uname -r suffix added, e.g. “-g3a5c467”. If your new kernel configuration changes only modules, this should remain constant. If you add something as a non-module, you’ll want to increment this to something custom, e.g., “-g3a5c467_1”.

Your host will need to cross compile the kernel using this config as the starting point (defconfig works but doesn’t set CONFIG_LOCALVERSION). From here, see the kernel cross compile docs in the docs which accompany the L4T R23.1 software (“Tegra_Linux_Driver_Package_Documents_R23.1.1.tar”).

Normally only one tool chain is used for a kernel cross-compile, but currently L4T is going through a transition of mixing 32-bit and 64-bit.

I have not completely tested newer Linaro for all configurations, but for base kernel compile I found these Linaro tool chains worked, whereas the suggested/documented tool chain did not include 64-bit (I use these because I have Fedora and tool chains are not available via normal repositories…instead use your Ubuntu package manager if you can):

For the kernel you will want the aarch64-linux-gnu and arm-linux-gnueabihf, where aarch64 is the 64-bit and gnueabihf is the 32-bit (either the equivalent Ubuntu packages or via Linaro). Unless you compile more than a kernel, you only need the gcc-linaro binaries…the others are for cross-compiling other user space software or supporting user space.

If you need more information just ask…lots of details.

Note: You can “make menuconfig” but you must include the cross compile information which the docs apply during actual compile, e.g., the output directory location, etc.