How to use HIDdev device on Jetson Nano 4GB

Hello to Everyone,

I own Nvidia Jetson Nano 4GB board running latest available Jetson Nano Developer Kit SD Card Image 4.6.1 2022/02/23 on it. I need to use USB Dongle license on this board, device is visible if I use “lsusb” terminal command but their SDK can not open device. USB Dongle manufacturer does say they require HIDdev protocol support in Linux kernel. Is it possible to use HIDdev device on Nvidia Jetson Nano? If so, how can I do it, how to add this support?

The HID drivers are present on a Jetson. I don’t know if HIDdev is an extension of that. However, if you monitor “dmesg --follow”, and then plug in the dongle, what new log lines appear?

Also, under lsusb, what shows up? There will be an “ID”, e.g., an example would be “0955:7020”. You can use that to limit an lsusb query to just that device. I’ll use 0955:7020 for my example, but try to get and post a fully verbose log of this (substitute the real ID) via:
sudo lsusb -d 0955:7020 -vvv 2>&1 | tee log_lsusb.txt

Note that sometimes, even though the drivers used are perfectly standard, the udev system might be used to rename something in USB. If you were to perform the exact same observations on a desktop PC from which the dongle works as expected, and post those logs, this might help. Be sure to identify which log goes to PC versus Jetson.

Also, mention if this is a USB2 or USB3 dongle.

Here is Compare It! HTML report for the same commands “dmesg -follow” and “lsusb” on Jetson Nano left hand side and Raspberry Pi 4 Model B right hand side.

report.html (24.1 KB)

As per manufacturer, it is USB 2.0

Nice formatting!

Before I begin, I want to describe something related to this. Device special files (such as “/dev/hidraw0”) are not real files. These “pseudo” files are drivers pretending to be a file to allow reading or writing to the driver using a simple file write/read (or IOCTL calls). When a device special file is present (or not) it is an indicator that the driver is present. Some of those device special files might exist even if there is no related hardware, whereas others will enumerate and grow only as the hardware loads the driver (e.g., “/dev/ttyUSB0” would only exist if an FTDI brand/chipset of serial USB UART is present).

When you get an initial USB plugin the log tends to tell you identifying information. In your case the vendor ID is 0x1bc0, and device ID is 0x8101. This is broadcast to “hot plug” layers, which in turn results in drivers which think they are compatible stepping up and taking ownership of that hardware. The “hot plug” includes something known as “udev”.

Normally udev doesn’t do much other than just broadcast the information from lsusb to drivers (really it’ll just be a subset of that data, but the driver can then get more details if it wants them). Sometimes udev though will have rules other than to pass on information verbatim. An example might be to alter the name of the device special file before passing on (an example would be a company using a standard FTDI USB UART, but wanting to rename it to their brand name; the function would not differ, but the drivers interested in the device might change).

I don’t see any udev modification in the RPi case which works normally.

The drivers which responded to the working case are for hidraw and hiddev, but there was only hidraw in the Jetson case. You’ve already guessed this, but the Jetson is simply missing the hiddev driver. The same architecture of RPi succeeds, and so we know the driver does exist. One thing we don’t know yet is what kernel release the RPi is using…perhaps it is a newer release and the driver does not yet exist in the older Nano kernel release (not likely, but we’ll consider it). What kernel release version is used on the RPi (e.g., use “uname -a”)?

When running the RPi with this device running on it, what do you see from “lsmod”? The same question exists for the Nano…what do you see from “lsmod” for the Nano when the device is connected? Do note that not all drivers are in the form of a module, so this might not be relevant, but it’s a good place to start.

The more exact answer is that the kernel needs configuration of “CONFIG_USB_HIDDEV.

Depending on kernel configuration you might conveniently have the ability to see the kernel config via:
zcat /proc/config.gz

For the Jetson, what do you see from:
zcat /proc/config.gz | grep 'CONFIG_USB_HIDDEV'

My bet is that on the Jetson you see this:
# CONFIG_USB_HIDDEV is not set

If you have that file on the RPi, then more likely you will see one of these:

  • CONFIG_USB_HIDDEV=m
  • CONFIG_USB_HIDDEV=y
    (you don’t really need to know this, the fact that hiddev shows up for USB device plugin says one of them is true, but I’m curious if the RPi uses a module format or not)

Assuming this is not configured on the Nano, you’ll need to get the kernel source for that release, configure the source to match the existing Nano, and then build either:

  • The entire kernel if module format is not supported, and then install the new kernel and modules.
  • Just the modules, and copy the correct module to the correct location.

It is much easier to install if it is a module, in which case you merely copy a single file and you’re done. Rebuilding the kernel itself implies installation is more complicated. The instructions in the Jetson documentation don’t mention the easier module installation methods. If the RPi says that module format is supported (and “=y” does not guarantee module format is not available, but “=m” does say that module format is supported), then we’ll go from there.

1. What kernel release version is used on the RPi (e.g., use “uname -a”)?
Here is output of “uname -a” for Jetson Nano vs. RPI 4

jetson@192.168.1.115:~$ uname -a
Linux nano 4.9.253-tegra #1 SMP PREEMPT Mon Jul 26 12:13:06 PDT 2021 aarch64 aarch64 aarch64 GNU/Linux

ubuntu@192.168.1.113:~$ uname -a
Linux ubuntu 5.13.0-1031-raspi #34-Ubuntu SMP PREEMPT Thu Jun 2 00:58:22 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux

2. what do you see from “lsmod”?
Here is output of “lsmod” for Jetson Nano vs. RPI 4
2_lsmod.txt (4.7 KB)

3. For the Jetson, what do you see from:zcat /proc/config.gz | grep 'CONFIG_USB_HIDDEV'
Here is output pf “config.gz” for Jetson Nano vs. RPI 4

jetson@192.168.1.115:~$ zcat /proc/config.gz | grep 'CONFIG_USB_HIDDEV'
# CONFIG_USB_HIDDEV is not set

ubuntu@192.168.1.113:~$ zcat /proc/config.gz | grep 'CONFIG_USB_HIDDEV'
gzip: /proc/config.gz: No such file or directory

4. Just the modules, and copy the correct module to the correct location.
This method would be preferred due to the simplicity.

The RPi is running a much newer kernel (a full major release difference). This should not be an issue provided the driver exists in the 4.x kernel. For anything HID I’d say 4.x has everything and it won’t be an issue. If you do build a kernel module, then you’ll need to make sure that you use the kernel source for that L4T release (see “head -n 1 /etc/nv_tegra_release”, and find source and documentation for that at https://developer.nvidia.com/linux-tegra). The “CONFIG_LOCALVERSION” will be:
CONFIG_LOCALVERSION="-tegra"

You’d match the existing kernel config, add in that CONFIG_LOCALVERSION, and enable CONFIG_USB_HIDDEV through a menu editor, e.g., via nconfig (which has a symbol search function, so you could search for “hiddev”). Make sure you enable as a module.

The RPi did not enable seeing config via “/proc/config.gz”, which is sad, but it won’t matter. We see the module from lsmod, so we know it had this built.

You’d make sure the configuration is propagated throughout the source. One way to do this, but takes time, is to build the Image target. This is a nice test to see if things are set up correctly. Alternately, you could build the modules_prepare target.

Note that you can find your L4T release version via “head -n 1 /etc/nv_tegra_release”. You can then go here to find the downloads page for that specific release:
https://developer.nvidia.com/linux-tegra

The kernel source is a subpackage within the source package (you can extract that and then throw away the rest of that download). Documentation for cross compile is also in that web page. If you need more information you can always ask here (if you need more information be sure to mention your L4T release version).

Thanks a lot for your effort and time spent for the answers, but unfortunately, your now it is out of my knowledges, I have completely no clue what I have to download and how to compile Linux kernel with amended modules.
1. Are there any way to check is hiddev supported or not in Jetson Nano Developer Kit SD Card Image 4.6.1 2022/02/23 image?
2. Who compiled this image, how to get answer from Nvidia team?
3. Why there is no newest version of Jetson Nano image with fresh kernel version? Is it Jetson Nano board reached end of life and not supported anymore?
P.S. Actually, it wasn’t supported in a proper way, you can purchase board, but you are not able to get any answers from Nvidia. Here is their answer by e-mail: “Unfortunately, our support is limited to windows and support for Jetson is available on the forum, please write a request on the forum here: Jetson & Embedded Systems - NVIDIA Developer Forums

You’ve already verified the driver is missing:

jetson@192.168.1.115:~$ zcat /proc/config.gz | grep 'CONFIG_USB_HIDDEV'
# CONFIG_USB_HIDDEV is not set

(this is part of the kernel, and the particular content can be created as a loadable module; this allows you to avoid building an entire kernel, and simplifies install; don’t use the install docs for the module, it is simpler than that, but you can use the NVIDIA docs for building a kernel and modules)

Most of the time the kernel is the “/boot/Image” file. Sometimes though this is stored in other locations, although for an SD card Nano this is all you need to worry about. The location where loadable modules are found (which are part of the kernel, but they can be added or removed as the system runs, and have fewer consequences if they fail) is at this location:
/lib/modules/$(uname -r)/kernel

Just to see what I’m talking about, do this:

cd /lib/modules/$(uname -r)/kernel
apt-get install tree
tree -d

The tree of directories which shows up there will be an exact match to most of the subdirectories in the kernel source code. Modules there are any file with the extension “.ko” (or a compressed “.ko” in some cases). If you build that feature/driver in the kernel as a module, then in some subdirectory you will that file named after the feature with the extension “.ko”.

Kernel build seems difficult, but so much effort has gone into simplifying it that if you’ve done it once, and if you’ve downloaded the kernel source, then it becomes easier.

A newer Jetson release won’t add this since it isn’t added by default. It’s just a driver for a special case. The original Image file is built by NVIDIA. Their official documentation shows how to cross compile it on a Linux host PC (it is also possible to compile it directly on a Jetson if you have enough disk space).

This is not about a “fresh” version. A general explanation is that there are many drivers out in the world which the Linux kernel supports. There are drivers for various items you will probably never have, e.g., custom studio sound mixers, 100 Gb/s backbone network cards, custom touchpad screens, specialty programmable keyboards (for the programming half), lots of video cards you won’t use (do you want all of the AMD video drivers? all of the Matrox drivers for video cards long obsolete?), proprietary dongles to software costing many thousands of dollars, so on. Not even desktop Linux includes those by default.

Disk space on a desktop PC is much more unlimited in comparison to a small embedded system. The choice of what to install by default is more limited due to that more limited disk space. HID raw is a “standard”, and so is HID dev, but almost everyone uses HID raw. HID dev does some extra parsing that most HID applications do themselves. It would be reasonable for NVIDIA to include HID dev by default, but it is actually somewhat rare that someone needs it (I’ve been answering questions on this forum since the TK1 in 2013, and this is the first time I’ve seen anyone request HID dev).

One nice thing about Windows is that when it detects a device which needs a driver, then they have a database of various drivers, and can automatically install it. Windows is no different in the fact that they also do not include the driver, but it is more convenient if the package system automatically installs the driver. Of course, not all devices are plug-n-play, and so even on Windows this would require a manual install of the driver.

Add to this that Linux is open source. A few commands and a bit of time and there is no driver you cannot install. It doesn’t matter if the company which made the hardware or created the software went out of existence long before, you have it. If something goes wrong with Windows, then you need to be on the telephone (if they allow it) to Microsoft, the hardware vendor, the sales partners, so on. I promise you that in the Windows world this is not so easy. If you need to see source code, then Microsoft charges a hefty fee and lots of non-disclosure to see their kernel source code (I remember long ago when I still tolerated Windows being quoted around $100k USD to get what I needed to fix a bug nobody wanted to fix). For developers, Linux makes a lot more sense. For someone just getting started it means there is a learning curve.

So far as new software releases go, the System on a Chip (SoC) the Nano is built on is the TX1. This is quite old. For a long time only the 32-bit ARM CPUs existed, and when 64-bit came out, nobody had ever written 64-bit ARM code. The kernel, the drivers…everything…had to be rewritten. The TX1 has the first 64-bit hardware that was ever used (I think it might have been around the year 2014?). This is how 64-bit met efficient power and physical size. All drivers, 100%, had to be rewritten, although there was a 32-bit compatibility mode (which is terribly slow, to the point of not being worthwhile).

By the time the TX2 got here it was much more refined. That too was long ago. When the Xavier got here the system was much faster and much more complete. Much of the architecture of various parts changed over time. The software got much better. Both TX1 and TX2 were quite old then (this was many years ago as well). About this time the GPU had changed so much, and the performance (even including power use) was so improved that the TK1 (32-bit), TX1 (first 64-bit), and TX2 were maintained, but no new features added (support up to and include L4T R32.x). Up until now the Xavier (L4T R34.x+, current R35.x+) has received all new features, but next major release will exclude anything Xavier. Only Orin will go beyond R35.x. It isn’t advertised, but NVIDIA has been working on the next generation for quite some time.

All of these, all the way back to 32-bit, support HID dev. It just has to be enabled.

Linux itself is something most developers learn to love if and only if they need to get into the lower level. If you only want to download and install, then some distributions (such as Ubuntu) are still fairly well supported. However, whatever is supported must be compiled for the architecture (a desktop PC is amd64/x86_64 architecture, modern Jetsons are aarch64/arm64 architecture). The maintainers don’t put those recompiled version on the ARM servers unless they have that hardware (sometimes there are volunteers to port them). If that were the case, then you could simply install this with an “apt” command. If this were Windows, you would have no hope to get an ARM version which the vendor does not want to provide. In your case, all you have to do is download source code, configure it, and compile. Then copy a file. This beats paying $100k USD for attention when you’d still have to port it yourself.

Do you have a desktop PC (preferably with Ubuntu 18.04, but most Linux distributions work)? On the Jetson I suggest you write down the output of the command “uname -r”. Note the suffix, which is probably “-tegra”.

Then find your L4T release version (Ubuntu plus NVIDIA drivers): “head -n 1 /etc/nv_tegra_release”.

Go to the document page. Look up your release here:
https://developer.nvidia.com/linux-tegra

I will pretend your release is R32.7.3, but use whatever it actually is. Going to that page you will find the Nano versions of:

  • Driver Package (BSP) Sources
  • Jetson Nano Developer Kit User Guide
  • OR the alternate docs online version “Jetson Linux Developer Guide (online version)”.

Within the documentation the part you want to find is “Kernel Customization”. This explains most of what you need to build a kernel. Ignore the install advice as this is for installing to the flash setup such that the changes occur upon flash; you don’t need to reflash, you just need to copy one file, but you still have to build it.

Download the source code (the Driver Package BSP Sources). The file you get will be an archive of many things. The file name is “public_sources.tbz2” (trivia: this is a bzip2 compressed tar archive). The package within this package which you are interested in is the “kernel_src.tbz2” (another bzip2 tar archive within an archive; once extracted you can throw out the rest of it).

One way to see the content of an archive:
bunzip2 < public_sources.tbz2 | tar --list (there are options to include bunzip2directly in thetar` command, but I’m illustrating combining commands without needing to know lots of options)

To extract kernel_src.tbz2 (you have to include the subdirectory, so it is really “Linux_for_Tegra/source/public/kernel_src.tbz2”):

bunzip2 < public_sources.tbz2 | tar -xv Linux_for_Tegra/source/public/kernel_src.tbz2

Note that you could do this with options instead of that long command, e.g., the “-j” option implies bzip2 compression:

tar xvfj public_sources.tbz2 'Linux_for_Tegra/source/public/kernel_src.tbz2'

(you’ll find the root of the source at "`Linux_for_Tegra/source/public/)

Once you have this, you can delete “public_sources.tbz2”. All you need is the “kernel_src.tbz2”, and this will be decompressed via:

tar xvfj kernel_src.tbz2

Techinically, you could delete the “kernel_src.tbz2” now, but I advise saving it. This in turn expands into subdirectories. The directory you will work in now exists, and is:
kernel/kernel-4.9/

This location is normally know as the “TOP” of the tree, and often one will do this:

cd kernel/kernel-4.9/
export TOP=`pwd`
echo $TOP

(you could now reference that location within that terminal as “$TOP”)

Read the documents on kernel compile. This is where you start. I will say though that the docs cover things you don’t need. Sometimes that is good, other times it just confuses people. You don’t need to build the “Image” target, but if you only build “modules”, then you need to propagate configuration throughout the source first (and Image target does this for you, plus it is something of an acid test for whether it is correct).

The part where most people fail is not understanding to configure first. The configuration “make tegra_defconfig” does this, but then you’d “make modules_prepare” before you do anything else. Unfortunately, there is one other detail most people miss, and you must do this prior to either building Image or modules_prepare: You must set CONFIG_LOCALVERSION to “-tegra”. There are many ways to do this.

Also, one can set up a separate location for intermediate files and keep the original source code pristine and untouched. Read the documents. Here is a bit of a shortcut to documents:

# Compile commands start in $TOP, thus:
cd $TOP

# Create a temporary content output location:
mkdir ~/output

# Set an environment variable to this:
export TEGRA_KERNEL_OUT=~/output

# Do not forget to provide a starting configuration.
make O=$TEGRA_KERNEL_OUT tegra_defconfig

# Now put the CONFIG_LOCALVERSION of "-tegra" in. More than one way.
# For this and this only, I suggest you edit this file:
# ~/output/.config
#
# In that file, find "CONFIG_LOCALVERSION". Set it up to be:
CONFIG_LOCAVERSION="-tegra"

# Now us an editor to look for and enable CONFIG_USB_HIDDEV:
make O=$TEGRA_KERNEL_OUT nconfig
# nconfig has a symbol search function, search for KERNEL_OUT.
# Once found, enable it as a module via the "m" key.
# Save the configuration. You're ready to build Image if you choose,
# but if you build modules, then you need to first propagate the
# configuration.

# Note that the "-j 6" option says to use 6 CPU cores during build. If you
# have 12 cores, then you could use "-j 12". If you have 1 core, then just
# "-j 1".

# Be sure you are at $TOP.

# If building the kernel Image:
make -j 6 O=$TEGRA_KERNEL_OUT Image

# If you did not build Image, but are building modules:
make -j 6 O=$TEGRA_KERNEL_OUT modules_prepare

# To build modules:
make -j 6 O=$TEGRA_KERNEL_OUT modules

# It is good to create a temporary output location for modules. For that:
mkdir ~/modules
export TEGRA_MODULES_OUT=~/modules

# To put modules in "$TEGRA_MODULES_OUT":
make -j 6 O=$TEGRA_KERNEL_OUT INSTALL_MOD_PATH=$TEGRA_MODULES_OUT modules_install

You will find a subdirectory if you “cd $TEGRA_MODULES_OUT”. Note that “uname -r” is from the Jetson, and not from the host PC, so you’d have to substitute for what “uname -r” is on the Jetson:

cd $TEGRA_MODULES_OUT
cd lib/modules/$(uname -r)/kernel
tree -d

Only one of the files in that tree is of interest, and I don’t know the exact file name, but here is a search from that location which can probably find the right file (ask if it isn’t, and I’ll find the exact file name):

find . -type f -iname '*hid*.ko' | grep -i 'dev'

I’m going to pretend the proper file is:
lib/modules/4.9.140-tegra/drivers/usb/something-usbdev.ko

Copy the file "``lib/modules/4.9.140-tegra/drivers/usb/something-usbdev.ko" to your Jetson. Move it to "/lib/modules/4.9.140-tegra/drivers/usb/" (you'll now find something-usbdev.kothere). Tell the system to update its list of modules:sudo depmod -a`

Preferably, reboot, but it might just load and work upon plugin of the device. Whatever that file is, assuming it works, it will show up in the list of modules via lsmod (only if it is loaded).

The general theme:

  • Download and unpack kernel source.
  • Make temporary output locations for source and for modules.
  • Configure to match the old system. It just happens that the “tegra_defconfig”, combined with updating “CONFIG_LOCALVERSION” to “-tegra” does this. There are other ways as well.
  • Propagate configuration. Either do this by building Image, or via modules_prepare. The latter is slow, but much faster than Image. This might take hours. The former Image, even if not using it, if preferable for the first build. I say this because there are errors which you will catch when building Image which won’t be caught when building modules.
  • Now actually build whatever you are building.
  • Send modules to the temporary module location.
  • Copy the module .ko file to the correct subdirectory of “/lib/modules/$(uname -r)/kernel/”.
  • Update the module list with “sudo depmod -a”.
  • Enjoy.
  • Ask more questions if it doesn’t go well.

All this information seems intimidating. However, you’ll find that the steps make sense after you’ve done it a couple of times. You can then use any driver, from any architecture (sometimes there are hiccups), and without any manufacturer or outside developer needed. Most of the time “it just works”.

Note that sometimes drivers are available via the apt mechanism, but those only occur in mainline PCs most of the time. Jetsons don’t have a BIOS, and their entire boot setup is custom. Anything related to boot is often not standard, and thus missing automated install via apt. This is why kernel and drivers might need extra work (they’re often part of boot; that particular driver is not, but the kernel as a whole is).

Thank you for detailed instruction, I am stuck on the step above with following error:

jetson@192.168.1.115:~/Downloads/Linux_for_Tegra/source/public/kernel/kernel-4.9/$TOP$ make O=$TEGRA_KERNEL_OUT nco
nfig
  HOSTCC  scripts/kconfig/nconf.o
In file included from scripts/kconfig/nconf.c:13:
scripts/kconfig/nconf.h:18:10: fatal error: curses.h: No such file or directory
 #include <curses.h>
          ^~~~~~~~~~
compilation terminated.
make[1]: *** [scripts/Makefile.host:118: scripts/kconfig/nconf.o] Error 1
make: *** [Makefile:575: nconfig] Error 2
jetson@192.168.1.115:~/Downloads/Linux_for_Tegra/source/public/kernel/kernel-4.9/$TOP$

That’s a common error from a missing package on the computer you are working with. This should solve the problem:
sudo apt-get install libncurses5-dev

I am doing everything on my Jetson Nano 4GB with 64GB micro-sd card installed and partition expanded. After executing this command on Jetson Nano, I’ve pressed “F8 SymSearch” button and tried to search for KERNEL_OUT string and it does not provide any results “No matches found”, then I have pressed F8 SymSearch button again and tried to search for HIDDEV and found a path to it:

So I went through the menu and found this settings, checked both “PID device support” and “/dev/hiddev raw HID device support” as per screenshot and pressed “F6 Save” button:

Please comment is it the same thing that you mean with enable CONFIG_USB_HIDDEV?

After this, I have tried to go all the next steps by building modules, not kernel Image. After process is finished, I have tried to search for required file and can not find anything similar to *usbdev.ko:

jetson@192.168.1.115:~/modules/lib/modules/4.9.299-tegra/kernel$ find . -type f -iname '*hid*.ko' | grep -i 'dev'
jetson@192.168.1.115:~/modules/lib/modules/4.9.299-tegra/kernel$

Full tree of modules folder below:

jetson@192.168.1.115:~$ tree modules/
modules/
└── lib
    ├── firmware
    │   ├── 3com
    │   │   └── typhoon.bin
    │   ├── acenic
    │   │   ├── tg1.bin
    │   │   └── tg2.bin
    │   ├── bnx2
    │   │   ├── bnx2-mips-06-6.2.1.fw
    │   │   ├── bnx2-mips-09-6.2.1a.fw
    │   │   ├── bnx2-rv2p-06-6.0.15.fw
    │   │   ├── bnx2-rv2p-09-6.0.17.fw
    │   │   └── bnx2-rv2p-09ax-6.0.17.fw
    │   ├── bnx2x
    │   │   ├── bnx2x-e1-6.2.9.0.fw
    │   │   ├── bnx2x-e1h-6.2.9.0.fw
    │   │   └── bnx2x-e2-6.2.9.0.fw
    │   ├── cpia2
    │   │   └── stv0672_vp4.bin
    │   ├── cxgb3
    │   │   ├── ael2005_opt_edc.bin
    │   │   ├── ael2005_twx_edc.bin
    │   │   ├── ael2020_twx_edc.bin
    │   │   ├── t3b_psram-1.1.0.bin
    │   │   └── t3c_psram-1.1.0.bin
    │   ├── e100
    │   │   ├── d101m_ucode.bin
    │   │   ├── d101s_ucode.bin
    │   │   └── d102e_ucode.bin
    │   ├── emi26
    │   │   ├── bitstream.fw
    │   │   ├── firmware.fw
    │   │   └── loader.fw
    │   ├── emi62
    │   │   ├── bitstream.fw
    │   │   ├── loader.fw
    │   │   ├── midi.fw
    │   │   └── spdif.fw
    │   ├── kaweth
    │   │   ├── new_code.bin
    │   │   ├── new_code_fix.bin
    │   │   ├── trigger_code.bin
    │   │   └── trigger_code_fix.bin
    │   └── yamaha
    │       ├── ds1_ctrl.fw
    │       ├── ds1_dsp.fw
    │       └── ds1e_ctrl.fw
    └── modules
        └── 4.9.299-tegra
            ├── build -> /home/jetson/output
            ├── kernel
            │   ├── crypto
            │   │   ├── authencesn.ko
            │   │   ├── authenc.ko
            │   │   ├── deflate.ko
            │   │   ├── des_generic.ko
            │   │   ├── md4.ko
            │   │   ├── md5.ko
            │   │   ├── michael_mic.ko
            │   │   ├── tcrypt.ko
            │   │   └── xor.ko
            │   ├── drivers
            │   │   ├── bcma
            │   │   │   └── bcma.ko
            │   │   ├── block
            │   │   │   ├── nbd.ko
            │   │   │   └── zram
            │   │   │       └── zram.ko
            │   │   ├── bluetooth
            │   │   │   ├── ath3k.ko
            │   │   │   ├── bcm203x.ko
            │   │   │   ├── bfusb.ko
            │   │   │   ├── bpa10x.ko
            │   │   │   ├── btbcm.ko
            │   │   │   ├── btintel.ko
            │   │   │   ├── btmrvl.ko
            │   │   │   ├── btmrvl_sdio.ko
            │   │   │   ├── btqca.ko
            │   │   │   ├── btrtl.ko
            │   │   │   ├── btusb.ko
            │   │   │   ├── hci_uart.ko
            │   │   │   ├── hci_vhci.ko
            │   │   │   └── realtek
            │   │   │       └── rtk_btusb.ko
            │   │   ├── char
            │   │   │   └── hw_random
            │   │   │       ├── cavium-rng.ko
            │   │   │       ├── cavium-rng-vf.ko
            │   │   │       └── rng-core.ko
            │   │   ├── gpu
            │   │   │   ├── drm
            │   │   │   │   └── tegra_udrm
            │   │   │   │       └── tegra-udrm.ko
            │   │   │   └── nvgpu
            │   │   │       └── nvgpu.ko
            │   │   ├── hid
            │   │   │   ├── hid-alps.ko
            │   │   │   ├── hid-appleir.ko
            │   │   │   ├── hid-aureal.ko
            │   │   │   ├── hid-belkin.ko
            │   │   │   ├── hid-betopff.ko
            │   │   │   ├── hid-cherry.ko
            │   │   │   ├── hid-chicony.ko
            │   │   │   ├── hid-cmedia.ko
            │   │   │   ├── hid-corsair.ko
            │   │   │   ├── hid-cp2112.ko
            │   │   │   ├── hid-cypress.ko
            │   │   │   ├── hid-elo.ko
            │   │   │   ├── hid-ezkey.ko
            │   │   │   ├── hid-gembird.ko
            │   │   │   ├── hid-gfrm.ko
            │   │   │   ├── hid-gt683r.ko
            │   │   │   ├── hid-icade.ko
            │   │   │   ├── hid-jarvis-remote.ko
            │   │   │   ├── hid-kensington.ko
            │   │   │   ├── hid-led.ko
            │   │   │   ├── hid-lenovo.ko
            │   │   │   ├── hid-logitech-dj.ko
            │   │   │   ├── hid-logitech-hidpp.ko
            │   │   │   ├── hid-logitech.ko
            │   │   │   ├── hid-microsoft.ko
            │   │   │   ├── hid-monterey.ko
            │   │   │   ├── hid-penmount.ko
            │   │   │   ├── hid-plantronics.ko
            │   │   │   ├── hid-raven.ko
            │   │   │   ├── hid-rmi.ko
            │   │   │   ├── hid-sensor-custom.ko
            │   │   │   ├── hid-sensor-hub.ko
            │   │   │   ├── hid-steelseries.ko
            │   │   │   └── hid-xinmo.ko
            │   │   ├── i2c
            │   │   │   ├── algos
            │   │   │   │   └── i2c-algo-pca.ko
            │   │   │   ├── busses
            │   │   │   │   ├── i2c-ali1535.ko
            │   │   │   │   ├── i2c-ali1563.ko
            │   │   │   │   ├── i2c-ali15x3.ko
            │   │   │   │   ├── i2c-amd756.ko
            │   │   │   │   ├── i2c-amd8111.ko
            │   │   │   │   ├── i2c-cadence.ko
            │   │   │   │   ├── i2c-cbus-gpio.ko
            │   │   │   │   ├── i2c-designware-core.ko
            │   │   │   │   ├── i2c-designware-pci.ko
            │   │   │   │   ├── i2c-designware-platform.ko
            │   │   │   │   ├── i2c-diolan-u2c.ko
            │   │   │   │   ├── i2c-emev2.ko
            │   │   │   │   ├── i2c-gpio.ko
            │   │   │   │   ├── i2c-i801.ko
            │   │   │   │   ├── i2c-isch.ko
            │   │   │   │   ├── i2c-nforce2.ko
            │   │   │   │   ├── i2c-nomadik.ko
            │   │   │   │   ├── i2c-ocores.ko
            │   │   │   │   ├── i2c-pca-platform.ko
            │   │   │   │   ├── i2c-piix4.ko
            │   │   │   │   ├── i2c-rk3x.ko
            │   │   │   │   ├── i2c-simtec.ko
            │   │   │   │   ├── i2c-sis630.ko
            │   │   │   │   ├── i2c-tegra194-slave.ko
            │   │   │   │   ├── i2c-tegra-slave.ko
            │   │   │   │   └── i2c-viapro.ko
            │   │   │   ├── i2c-slave-eeprom.ko
            │   │   │   ├── i2c-smbus.ko
            │   │   │   └── i2c-stub.ko
            │   │   ├── iio
            │   │   │   ├── accel
            │   │   │   │   └── hid-sensor-accel-3d.ko
            │   │   │   ├── common
            │   │   │   │   └── hid-sensors
            │   │   │   │       ├── hid-sensor-iio-common.ko
            │   │   │   │       └── hid-sensor-trigger.ko
            │   │   │   └── gyro
            │   │   │       └── hid-sensor-gyro-3d.ko
            │   │   ├── infiniband
            │   │   │   ├── core
            │   │   │   │   ├── ib_cm.ko
            │   │   │   │   ├── ib_core.ko
            │   │   │   │   ├── ib_umad.ko
            │   │   │   │   ├── ib_uverbs.ko
            │   │   │   │   ├── iw_cm.ko
            │   │   │   │   ├── rdma_cm.ko
            │   │   │   │   └── rdma_ucm.ko
            │   │   │   ├── hw
            │   │   │   │   ├── mlx4
            │   │   │   │   │   └── mlx4_ib.ko
            │   │   │   │   ├── mlx5
            │   │   │   │   │   └── mlx5_ib.ko
            │   │   │   │   └── mthca
            │   │   │   │       └── ib_mthca.ko
            │   │   │   ├── sw
            │   │   │   │   ├── rdmavt
            │   │   │   │   │   └── rdmavt.ko
            │   │   │   │   └── rxe
            │   │   │   │       └── rdma_rxe.ko
            │   │   │   └── ulp
            │   │   │       ├── ipoib
            │   │   │       │   └── ib_ipoib.ko
            │   │   │       └── srp
            │   │   │           └── ib_srp.ko
            │   │   ├── input
            │   │   │   ├── input-polldev.ko
            │   │   │   ├── keyboard
            │   │   │   │   ├── adp5588-keys.ko
            │   │   │   │   ├── adp5589-keys.ko
            │   │   │   │   ├── atkbd.ko
            │   │   │   │   ├── bcm-keypad.ko
            │   │   │   │   ├── cap11xx.ko
            │   │   │   │   ├── gpio_keys_polled.ko
            │   │   │   │   ├── lkkbd.ko
            │   │   │   │   ├── lm8323.ko
            │   │   │   │   ├── lm8333.ko
            │   │   │   │   ├── matrix_keypad.ko
            │   │   │   │   ├── max7359_keypad.ko
            │   │   │   │   ├── mcs_touchkey.ko
            │   │   │   │   ├── mpr121_touchkey.ko
            │   │   │   │   ├── newtonkbd.ko
            │   │   │   │   ├── omap4-keypad.ko
            │   │   │   │   ├── opencores-kbd.ko
            │   │   │   │   ├── qt1070.ko
            │   │   │   │   ├── qt2160.ko
            │   │   │   │   ├── samsung-keypad.ko
            │   │   │   │   ├── stowaway.ko
            │   │   │   │   ├── tca6416-keypad.ko
            │   │   │   │   ├── tca8418_keypad.ko
            │   │   │   │   ├── tegra-kbc.ko
            │   │   │   │   └── xtkbd.ko
            │   │   │   ├── matrix-keymap.ko
            │   │   │   ├── mouse
            │   │   │   │   ├── appletouch.ko
            │   │   │   │   ├── bcm5974.ko
            │   │   │   │   ├── cyapatp.ko
            │   │   │   │   ├── gpio_mouse.ko
            │   │   │   │   ├── sermouse.ko
            │   │   │   │   ├── synaptics_i2c.ko
            │   │   │   │   ├── synaptics_usb.ko
            │   │   │   │   └── vsxxxaa.ko
            │   │   │   └── serio
            │   │   │       └── libps2.ko
            │   │   ├── leds
            │   │   │   └── leds-bd2802.ko
            │   │   ├── media
            │   │   │   ├── common
            │   │   │   │   └── v4l2-tpg
            │   │   │   │       └── v4l2-tpg.ko
            │   │   │   ├── i2c
            │   │   │   │   ├── imx185.ko
            │   │   │   │   ├── imx185_v1.ko
            │   │   │   │   ├── imx274.ko
            │   │   │   │   ├── ov5693.ko
            │   │   │   │   └── tc358840.ko
            │   │   │   ├── platform
            │   │   │   │   ├── tegra
            │   │   │   │   │   ├── camera
            │   │   │   │   │   │   └── tests
            │   │   │   │   │   │       └── sensor_kernel_tests.ko
            │   │   │   │   │   └── tpg
            │   │   │   │   │       ├── nvhost-vi-tpg.ko
            │   │   │   │   │       └── nvhost-vi-tpg-t19x.ko
            │   │   │   │   ├── tegra-vivid
            │   │   │   │   │   └── tegra-vivid.ko
            │   │   │   │   └── vivid
            │   │   │   │       └── vivid.ko
            │   │   │   ├── usb
            │   │   │   │   ├── cpia2
            │   │   │   │   │   └── cpia2.ko
            │   │   │   │   ├── gspca
            │   │   │   │   │   ├── gl860
            │   │   │   │   │   │   └── gspca_gl860.ko
            │   │   │   │   │   ├── gspca_benq.ko
            │   │   │   │   │   ├── gspca_conex.ko
            │   │   │   │   │   ├── gspca_cpia1.ko
            │   │   │   │   │   ├── gspca_dtcs033.ko
            │   │   │   │   │   ├── gspca_etoms.ko
            │   │   │   │   │   ├── gspca_finepix.ko
            │   │   │   │   │   ├── gspca_jeilinj.ko
            │   │   │   │   │   ├── gspca_jl2005bcd.ko
            │   │   │   │   │   ├── gspca_kinect.ko
            │   │   │   │   │   ├── gspca_konica.ko
            │   │   │   │   │   ├── gspca_main.ko
            │   │   │   │   │   ├── gspca_mars.ko
            │   │   │   │   │   ├── gspca_mr97310a.ko
            │   │   │   │   │   ├── gspca_nw80x.ko
            │   │   │   │   │   ├── gspca_ov519.ko
            │   │   │   │   │   ├── gspca_ov534_9.ko
            │   │   │   │   │   ├── gspca_ov534.ko
            │   │   │   │   │   ├── gspca_pac207.ko
            │   │   │   │   │   ├── gspca_pac7302.ko
            │   │   │   │   │   ├── gspca_pac7311.ko
            │   │   │   │   │   ├── gspca_se401.ko
            │   │   │   │   │   ├── gspca_sn9c2028.ko
            │   │   │   │   │   ├── gspca_sn9c20x.ko
            │   │   │   │   │   ├── gspca_sonixb.ko
            │   │   │   │   │   ├── gspca_sonixj.ko
            │   │   │   │   │   ├── gspca_spca1528.ko
            │   │   │   │   │   ├── gspca_spca500.ko
            │   │   │   │   │   ├── gspca_spca501.ko
            │   │   │   │   │   ├── gspca_spca505.ko
            │   │   │   │   │   ├── gspca_spca506.ko
            │   │   │   │   │   ├── gspca_spca508.ko
            │   │   │   │   │   ├── gspca_spca561.ko
            │   │   │   │   │   ├── gspca_sq905c.ko
            │   │   │   │   │   ├── gspca_sq905.ko
            │   │   │   │   │   ├── gspca_sq930x.ko
            │   │   │   │   │   ├── gspca_stk014.ko
            │   │   │   │   │   ├── gspca_stk1135.ko
            │   │   │   │   │   ├── gspca_stv0680.ko
            │   │   │   │   │   ├── gspca_sunplus.ko
            │   │   │   │   │   ├── gspca_t613.ko
            │   │   │   │   │   ├── gspca_topro.ko
            │   │   │   │   │   ├── gspca_touptek.ko
            │   │   │   │   │   ├── gspca_tv8532.ko
            │   │   │   │   │   ├── gspca_vc032x.ko
            │   │   │   │   │   ├── gspca_vicam.ko
            │   │   │   │   │   ├── gspca_xirlink_cit.ko
            │   │   │   │   │   ├── gspca_zc3xx.ko
            │   │   │   │   │   ├── m5602
            │   │   │   │   │   │   └── gspca_m5602.ko
            │   │   │   │   │   └── stv06xx
            │   │   │   │   │       └── gspca_stv06xx.ko
            │   │   │   │   ├── pwc
            │   │   │   │   │   └── pwc.ko
            │   │   │   │   ├── s2255
            │   │   │   │   │   └── s2255drv.ko
            │   │   │   │   ├── stkwebcam
            │   │   │   │   │   └── stkwebcam.ko
            │   │   │   │   ├── usbtv
            │   │   │   │   │   └── usbtv.ko
            │   │   │   │   ├── uvc
            │   │   │   │   │   └── uvcvideo.ko
            │   │   │   │   └── zr364xx
            │   │   │   │       └── zr364xx.ko
            │   │   │   └── v4l2-core
            │   │   │       ├── videobuf-core.ko
            │   │   │       └── videobuf-vmalloc.ko
            │   │   ├── mfd
            │   │   │   └── lpc_sch.ko
            │   │   ├── misc
            │   │   │   ├── bluedroid_pm.ko
            │   │   │   ├── cb710
            │   │   │   │   └── cb710.ko
            │   │   │   ├── eeprom
            │   │   │   │   └── eeprom_93cx6.ko
            │   │   │   ├── mods
            │   │   │   │   └── mods.ko
            │   │   │   ├── tifm_7xx1.ko
            │   │   │   └── tifm_core.ko
            │   │   ├── mmc
            │   │   │   └── host
            │   │   │       ├── cb710-mmc.ko
            │   │   │       ├── mmc_spi.ko
            │   │   │       ├── mtk-sd.ko
            │   │   │       ├── of_mmc_spi.ko
            │   │   │       ├── tifm_sd.ko
            │   │   │       ├── toshsd.ko
            │   │   │       ├── usdhi6rol0.ko
            │   │   │       ├── ushc.ko
            │   │   │       ├── via-sdmmc.ko
            │   │   │       └── vub300.ko
            │   │   ├── mtd
            │   │   │   └── ubi
            │   │   │       └── ubi.ko
            │   │   ├── net
            │   │   │   ├── can
            │   │   │   │   ├── can-dev.ko
            │   │   │   │   ├── cc770
            │   │   │   │   │   ├── cc770_isa.ko
            │   │   │   │   │   ├── cc770.ko
            │   │   │   │   │   └── cc770_platform.ko
            │   │   │   │   ├── c_can
            │   │   │   │   │   └── c_can.ko
            │   │   │   │   ├── m_can
            │   │   │   │   │   └── m_can.ko
            │   │   │   │   ├── mttcan
            │   │   │   │   │   └── native
            │   │   │   │   │       └── mttcan.ko
            │   │   │   │   ├── sja1000
            │   │   │   │   │   ├── ems_pci.ko
            │   │   │   │   │   ├── kvaser_pci.ko
            │   │   │   │   │   ├── plx_pci.ko
            │   │   │   │   │   ├── sja1000_isa.ko
            │   │   │   │   │   ├── sja1000.ko
            │   │   │   │   │   └── sja1000_platform.ko
            │   │   │   │   ├── slcan.ko
            │   │   │   │   ├── softing
            │   │   │   │   │   └── softing.ko
            │   │   │   │   ├── spi
            │   │   │   │   │   └── mcp251x.ko
            │   │   │   │   ├── usb
            │   │   │   │   │   ├── ems_usb.ko
            │   │   │   │   │   ├── esd_usb2.ko
            │   │   │   │   │   ├── gs_usb.ko
            │   │   │   │   │   ├── kvaser_usb.ko
            │   │   │   │   │   ├── peak_usb
            │   │   │   │   │   │   └── peak_usb.ko
            │   │   │   │   │   └── usb_8dev.ko
            │   │   │   │   └── vcan.ko
            │   │   │   ├── ethernet
            │   │   │   │   ├── 3com
            │   │   │   │   │   └── typhoon.ko
            │   │   │   │   ├── 8390
            │   │   │   │   │   ├── 8390.ko
            │   │   │   │   │   └── ne2k-pci.ko
            │   │   │   │   ├── agere
            │   │   │   │   │   └── et131x.ko
            │   │   │   │   ├── alteon
            │   │   │   │   │   └── acenic.ko
            │   │   │   │   ├── altera
            │   │   │   │   │   └── altera_tse.ko
            │   │   │   │   ├── aquantia
            │   │   │   │   │   └── atlantic
            │   │   │   │   │       └── atlantic.ko
            │   │   │   │   ├── atheros
            │   │   │   │   │   ├── alx
            │   │   │   │   │   │   └── alx.ko
            │   │   │   │   │   ├── atl1c
            │   │   │   │   │   │   └── atl1c.ko
            │   │   │   │   │   ├── atl1e
            │   │   │   │   │   │   └── atl1e.ko
            │   │   │   │   │   └── atlx
            │   │   │   │   │       ├── atl1.ko
            │   │   │   │   │       └── atl2.ko
            │   │   │   │   ├── broadcom
            │   │   │   │   │   ├── b44.ko
            │   │   │   │   │   ├── bnx2.ko
            │   │   │   │   │   ├── bnx2x
            │   │   │   │   │   │   └── bnx2x.ko
            │   │   │   │   │   ├── bnxt
            │   │   │   │   │   │   └── bnxt_en.ko
            │   │   │   │   │   └── cnic.ko
            │   │   │   │   ├── brocade
            │   │   │   │   │   └── bna
            │   │   │   │   │       └── bna.ko
            │   │   │   │   ├── cavium
            │   │   │   │   │   ├── liquidio
            │   │   │   │   │   │   └── liquidio.ko
            │   │   │   │   │   └── thunder
            │   │   │   │   │       ├── nicpf.ko
            │   │   │   │   │       ├── nicvf.ko
            │   │   │   │   │       ├── thunder_bgx.ko
            │   │   │   │   │       └── thunder_xcv.ko
            │   │   │   │   ├── chelsio
            │   │   │   │   │   ├── cxgb
            │   │   │   │   │   │   └── cxgb.ko
            │   │   │   │   │   ├── cxgb3
            │   │   │   │   │   │   └── cxgb3.ko
            │   │   │   │   │   ├── cxgb4
            │   │   │   │   │   │   └── cxgb4.ko
            │   │   │   │   │   └── cxgb4vf
            │   │   │   │   │       └── cxgb4vf.ko
            │   │   │   │   ├── cisco
            │   │   │   │   │   └── enic
            │   │   │   │   │       └── enic.ko
            │   │   │   │   ├── dlink
            │   │   │   │   │   └── dl2k.ko
            │   │   │   │   ├── emulex
            │   │   │   │   │   └── benet
            │   │   │   │   │       └── be2net.ko
            │   │   │   │   ├── hp
            │   │   │   │   │   └── hp100.ko
            │   │   │   │   ├── intel
            │   │   │   │   │   ├── e1000
            │   │   │   │   │   │   └── e1000.ko
            │   │   │   │   │   ├── e100.ko
            │   │   │   │   │   ├── fm10k
            │   │   │   │   │   │   └── fm10k.ko
            │   │   │   │   │   ├── i40e
            │   │   │   │   │   │   └── i40e.ko
            │   │   │   │   │   ├── i40evf
            │   │   │   │   │   │   └── i40evf.ko
            │   │   │   │   │   ├── ixgb
            │   │   │   │   │   │   └── ixgb.ko
            │   │   │   │   │   └── ixgbevf
            │   │   │   │   │       └── ixgbevf.ko
            │   │   │   │   ├── jme.ko
            │   │   │   │   ├── marvell
            │   │   │   │   │   ├── skge.ko
            │   │   │   │   │   └── sky2.ko
            │   │   │   │   ├── mellanox
            │   │   │   │   │   ├── mlx4
            │   │   │   │   │   │   └── mlx4_core.ko
            │   │   │   │   │   ├── mlx5
            │   │   │   │   │   │   └── core
            │   │   │   │   │   │       └── mlx5_core.ko
            │   │   │   │   │   └── mlxsw
            │   │   │   │   │       └── mlxsw_pci.ko
            │   │   │   │   ├── natsemi
            │   │   │   │   │   ├── natsemi.ko
            │   │   │   │   │   └── ns83820.ko
            │   │   │   │   ├── neterion
            │   │   │   │   │   ├── s2io.ko
            │   │   │   │   │   └── vxge
            │   │   │   │   │       └── vxge.ko
            │   │   │   │   ├── netronome
            │   │   │   │   │   └── nfp
            │   │   │   │   │       └── nfp_netvf.ko
            │   │   │   │   ├── packetengines
            │   │   │   │   │   ├── hamachi.ko
            │   │   │   │   │   └── yellowfin.ko
            │   │   │   │   ├── qlogic
            │   │   │   │   │   ├── netxen
            │   │   │   │   │   │   └── netxen_nic.ko
            │   │   │   │   │   ├── qed
            │   │   │   │   │   │   └── qed.ko
            │   │   │   │   │   ├── qede
            │   │   │   │   │   │   └── qede.ko
            │   │   │   │   │   ├── qla3xxx.ko
            │   │   │   │   │   ├── qlcnic
            │   │   │   │   │   │   └── qlcnic.ko
            │   │   │   │   │   └── qlge
            │   │   │   │   │       └── qlge.ko
            │   │   │   │   ├── qualcomm
            │   │   │   │   │   ├── emac
            │   │   │   │   │   │   └── qcom-emac.ko
            │   │   │   │   │   └── qcaspi.ko
            │   │   │   │   ├── realtek
            │   │   │   │   │   ├── 8139cp.ko
            │   │   │   │   │   └── 8139too.ko
            │   │   │   │   ├── samsung
            │   │   │   │   │   └── sxgbe
            │   │   │   │   │       └── samsung-sxgbe.ko
            │   │   │   │   ├── sfc
            │   │   │   │   │   └── sfc.ko
            │   │   │   │   └── stmicro
            │   │   │   │       └── stmmac
            │   │   │   │           ├── dwmac-generic.ko
            │   │   │   │           ├── stmmac.ko
            │   │   │   │           └── stmmac-platform.ko
            │   │   │   ├── macvlan.ko
            │   │   │   ├── macvtap.ko
            │   │   │   ├── phy
            │   │   │   │   ├── mdio-cavium.ko
            │   │   │   │   ├── mdio-thunder.ko
            │   │   │   │   └── microchip.ko
            │   │   │   ├── usb
            │   │   │   │   ├── catc.ko
            │   │   │   │   ├── cx82310_eth.ko
            │   │   │   │   ├── dm9601.ko
            │   │   │   │   ├── gl620a.ko
            │   │   │   │   ├── kaweth.ko
            │   │   │   │   ├── lan78xx.ko
            │   │   │   │   ├── mcs7830.ko
            │   │   │   │   ├── pegasus.ko
            │   │   │   │   ├── plusb.ko
            │   │   │   │   ├── rndis_host.ko
            │   │   │   │   ├── rtl8150.ko
            │   │   │   │   ├── smsc75xx.ko
            │   │   │   │   ├── smsc95xx.ko
            │   │   │   │   ├── sr9700.ko
            │   │   │   │   └── sr9800.ko
            │   │   │   ├── veth.ko
            │   │   │   └── wireless
            │   │   │       ├── ath
            │   │   │       │   ├── ar5523
            │   │   │       │   │   └── ar5523.ko
            │   │   │       │   ├── ath10k
            │   │   │       │   │   ├── ath10k_core.ko
            │   │   │       │   │   └── ath10k_pci.ko
            │   │   │       │   ├── ath6kl
            │   │   │       │   │   ├── ath6kl_core.ko
            │   │   │       │   │   ├── ath6kl_sdio.ko
            │   │   │       │   │   └── ath6kl_usb.ko
            │   │   │       │   ├── ath9k
            │   │   │       │   │   ├── ath9k_common.ko
            │   │   │       │   │   ├── ath9k_htc.ko
            │   │   │       │   │   ├── ath9k_hw.ko
            │   │   │       │   │   └── ath9k.ko
            │   │   │       │   ├── ath.ko
            │   │   │       │   ├── carl9170
            │   │   │       │   │   └── carl9170.ko
            │   │   │       │   ├── wcn36xx
            │   │   │       │   │   └── wcn36xx.ko
            │   │   │       │   └── wil6210
            │   │   │       │       └── wil6210.ko
            │   │   │       ├── atmel
            │   │   │       │   ├── at76c50x-usb.ko
            │   │   │       │   └── atmel.ko
            │   │   │       ├── bcmdhd
            │   │   │       │   └── bcmdhd.ko
            │   │   │       ├── bcmdhd_pcie
            │   │   │       │   └── bcmdhd_pcie.ko
            │   │   │       ├── broadcom
            │   │   │       │   ├── b43
            │   │   │       │   │   └── b43.ko
            │   │   │       │   └── b43legacy
            │   │   │       │       └── b43legacy.ko
            │   │   │       ├── intel
            │   │   │       │   └── iwlwifi
            │   │   │       │       ├── dvm
            │   │   │       │       │   └── iwldvm.ko
            │   │   │       │       ├── iwlwifi.ko
            │   │   │       │       └── mvm
            │   │   │       │           └── iwlmvm.ko
            │   │   │       ├── intersil
            │   │   │       │   ├── orinoco
            │   │   │       │   │   └── orinoco.ko
            │   │   │       │   └── p54
            │   │   │       │       ├── p54common.ko
            │   │   │       │       ├── p54pci.ko
            │   │   │       │       └── p54usb.ko
            │   │   │       ├── marvell
            │   │   │       │   ├── mwifiex
            │   │   │       │   │   ├── mwifiex.ko
            │   │   │       │   │   ├── mwifiex_pcie.ko
            │   │   │       │   │   ├── mwifiex_sdio.ko
            │   │   │       │   │   └── mwifiex_usb.ko
            │   │   │       │   └── mwl8k.ko
            │   │   │       ├── mediatek
            │   │   │       │   └── mt7601u
            │   │   │       │       └── mt7601u.ko
            │   │   │       ├── ralink
            │   │   │       │   └── rt2x00
            │   │   │       │       ├── rt2500usb.ko
            │   │   │       │       ├── rt2800lib.ko
            │   │   │       │       ├── rt2800mmio.ko
            │   │   │       │       ├── rt2800pci.ko
            │   │   │       │       ├── rt2800usb.ko
            │   │   │       │       ├── rt2x00lib.ko
            │   │   │       │       ├── rt2x00mmio.ko
            │   │   │       │       ├── rt2x00pci.ko
            │   │   │       │       ├── rt2x00usb.ko
            │   │   │       │       └── rt73usb.ko
            │   │   │       ├── realtek
            │   │   │       │   ├── rtl818x
            │   │   │       │   │   └── rtl8187
            │   │   │       │   │       └── rtl8187.ko
            │   │   │       │   ├── rtl8812au
            │   │   │       │   │   └── rtl8812au.ko
            │   │   │       │   ├── rtl8814au
            │   │   │       │   │   └── rtl8814au.ko
            │   │   │       │   ├── rtl8821au
            │   │   │       │   │   └── rtl8821au.ko
            │   │   │       │   ├── rtl8821cu
            │   │   │       │   │   └── rtl8821cu.ko
            │   │   │       │   ├── rtl8822bu
            │   │   │       │   │   └── rtl8822bu.ko
            │   │   │       │   ├── rtl8822ce
            │   │   │       │   │   └── rtl8822ce.ko
            │   │   │       │   ├── rtl8xxxu
            │   │   │       │   │   └── rtl8xxxu.ko
            │   │   │       │   └── rtlwifi
            │   │   │       │       ├── btcoexist
            │   │   │       │       │   └── btcoexist.ko
            │   │   │       │       ├── rtl8188ee
            │   │   │       │       │   └── rtl8188ee.ko
            │   │   │       │       ├── rtl8192c
            │   │   │       │       │   └── rtl8192c-common.ko
            │   │   │       │       ├── rtl8192ce
            │   │   │       │       │   └── rtl8192ce.ko
            │   │   │       │       ├── rtl8192cu
            │   │   │       │       │   └── rtl8192cu.ko
            │   │   │       │       ├── rtl8192de
            │   │   │       │       │   └── rtl8192de.ko
            │   │   │       │       ├── rtl8192ee
            │   │   │       │       │   └── rtl8192ee.ko
            │   │   │       │       ├── rtl8192se
            │   │   │       │       │   └── rtl8192se.ko
            │   │   │       │       ├── rtl8723ae
            │   │   │       │       │   └── rtl8723ae.ko
            │   │   │       │       ├── rtl8723be
            │   │   │       │       │   └── rtl8723be.ko
            │   │   │       │       ├── rtl8723com
            │   │   │       │       │   └── rtl8723-common.ko
            │   │   │       │       ├── rtl8821ae
            │   │   │       │       │   └── rtl8821ae.ko
            │   │   │       │       ├── rtl_pci.ko
            │   │   │       │       ├── rtl_usb.ko
            │   │   │       │       └── rtlwifi.ko
            │   │   │       ├── rsi
            │   │   │       │   ├── rsi_91x.ko
            │   │   │       │   ├── rsi_sdio.ko
            │   │   │       │   └── rsi_usb.ko
            │   │   │       ├── st
            │   │   │       │   └── cw1200
            │   │   │       │       ├── cw1200_core.ko
            │   │   │       │       └── cw1200_wlan_sdio.ko
            │   │   │       ├── ti
            │   │   │       │   ├── wl1251
            │   │   │       │   │   ├── wl1251.ko
            │   │   │       │   │   └── wl1251_sdio.ko
            │   │   │       │   ├── wl12xx
            │   │   │       │   │   └── wl12xx.ko
            │   │   │       │   ├── wl18xx
            │   │   │       │   │   └── wl18xx.ko
            │   │   │       │   └── wlcore
            │   │   │       │       ├── wlcore.ko
            │   │   │       │       └── wlcore_sdio.ko
            │   │   │       └── zydas
            │   │   │           ├── zd1201.ko
            │   │   │           └── zd1211rw
            │   │   │               └── zd1211rw.ko
            │   │   ├── pci
            │   │   │   └── pci-stub.ko
            │   │   ├── platform
            │   │   │   └── tegra
            │   │   │       ├── bad.ko
            │   │   │       ├── nvadsp
            │   │   │       │   └── nvadsp.ko
            │   │   │       └── tegra_cpu_sysfs.ko
            │   │   ├── scsi
            │   │   │   └── scsi_transport_srp.ko
            │   │   ├── spi
            │   │   │   ├── spi-cadence.ko
            │   │   │   ├── spidev.ko
            │   │   │   ├── spi-pxa2xx-pci.ko
            │   │   │   ├── spi-pxa2xx-platform.ko
            │   │   │   ├── spi-sc18is602.ko
            │   │   │   ├── spi-tle62x0.ko
            │   │   │   ├── spi-xcomm.ko
            │   │   │   └── spi-zynqmp-gqspi.ko
            │   │   ├── ssb
            │   │   │   └── ssb.ko
            │   │   ├── staging
            │   │   │   ├── rtl8188eu
            │   │   │   │   └── r8188eu.ko
            │   │   │   ├── rtl8192e
            │   │   │   │   ├── rtl8192e
            │   │   │   │   │   └── r8192e_pci.ko
            │   │   │   │   ├── rtllib_crypt_ccmp.ko
            │   │   │   │   ├── rtllib_crypt_tkip.ko
            │   │   │   │   ├── rtllib_crypt_wep.ko
            │   │   │   │   └── rtllib.ko
            │   │   │   ├── rtl8192u
            │   │   │   │   └── r8192u_usb.ko
            │   │   │   ├── rtl8712
            │   │   │   │   └── r8712u.ko
            │   │   │   └── wlan-ng
            │   │   │       └── prism2_usb.ko
            │   │   ├── thermal
            │   │   │   └── userspace_alert.ko
            │   │   ├── uio
            │   │   │   └── uio.ko
            │   │   ├── usb
            │   │   │   ├── class
            │   │   │   │   ├── cdc-acm.ko
            │   │   │   │   ├── cdc-wdm.ko
            │   │   │   │   └── usblp.ko
            │   │   │   ├── common
            │   │   │   │   └── ulpi.ko
            │   │   │   ├── image
            │   │   │   │   ├── mdc800.ko
            │   │   │   │   └── microtek.ko
            │   │   │   ├── misc
            │   │   │   │   ├── appledisplay.ko
            │   │   │   │   ├── cypress_cy7c63.ko
            │   │   │   │   ├── cytherm.ko
            │   │   │   │   ├── emi26.ko
            │   │   │   │   ├── emi62.ko
            │   │   │   │   ├── idmouse.ko
            │   │   │   │   ├── ldusb.ko
            │   │   │   │   ├── usblcd.ko
            │   │   │   │   ├── usbsevseg.ko
            │   │   │   │   ├── usbtest.ko
            │   │   │   │   └── yurex.ko
            │   │   │   ├── mon
            │   │   │   │   └── usbmon.ko
            │   │   │   ├── serial
            │   │   │   │   ├── ch341.ko
            │   │   │   │   ├── cp210x.ko
            │   │   │   │   ├── ftdi_sio.ko
            │   │   │   │   ├── option.ko
            │   │   │   │   ├── pl2303.ko
            │   │   │   │   └── usb_wwan.ko
            │   │   │   └── storage
            │   │   │       ├── ums-alauda.ko
            │   │   │       ├── ums-cypress.ko
            │   │   │       ├── ums-datafab.ko
            │   │   │       ├── ums-eneub6250.ko
            │   │   │       ├── ums-freecom.ko
            │   │   │       ├── ums-isd200.ko
            │   │   │       ├── ums-jumpshot.ko
            │   │   │       ├── ums-karma.ko
            │   │   │       ├── ums-onetouch.ko
            │   │   │       ├── ums-realtek.ko
            │   │   │       ├── ums-sddr09.ko
            │   │   │       ├── ums-sddr55.ko
            │   │   │       └── ums-usbat.ko
            │   │   └── video
            │   │       └── backlight
            │   │           ├── generic_bl.ko
            │   │           └── lcd.ko
            │   ├── fs
            │   │   ├── binfmt_misc.ko
            │   │   ├── btrfs
            │   │   │   └── btrfs.ko
            │   │   ├── cifs
            │   │   │   └── cifs.ko
            │   │   ├── fuse
            │   │   │   ├── cuse.ko
            │   │   │   └── fuse.ko
            │   │   ├── nfs_common
            │   │   │   └── nfs_acl.ko
            │   │   ├── nfsd
            │   │   │   └── nfsd.ko
            │   │   └── overlayfs
            │   │       └── overlay.ko
            │   ├── lib
            │   │   ├── crc7.ko
            │   │   ├── crc-itu-t.ko
            │   │   ├── libcrc32c.ko
            │   │   ├── raid6
            │   │   │   └── raid6_pq.ko
            │   │   ├── ts_bm.ko
            │   │   ├── ts_fsm.ko
            │   │   └── ts_kmp.ko
            │   ├── net
            │   │   ├── 802
            │   │   │   ├── garp.ko
            │   │   │   └── mrp.ko
            │   │   ├── 8021q
            │   │   │   └── 8021q.ko
            │   │   ├── bluetooth
            │   │   │   └── bnep
            │   │   │       └── bnep.ko
            │   │   ├── bridge
            │   │   │   └── br_netfilter.ko
            │   │   ├── can
            │   │   │   ├── can-bcm.ko
            │   │   │   ├── can-gw.ko
            │   │   │   ├── can.ko
            │   │   │   └── can-raw.ko
            │   │   ├── ipv4
            │   │   │   ├── esp4.ko
            │   │   │   ├── netfilter
            │   │   │   │   ├── arptable_filter.ko
            │   │   │   │   ├── arp_tables.ko
            │   │   │   │   ├── arpt_mangle.ko
            │   │   │   │   ├── iptable_filter.ko
            │   │   │   │   ├── iptable_mangle.ko
            │   │   │   │   ├── iptable_nat.ko
            │   │   │   │   ├── iptable_raw.ko
            │   │   │   │   ├── ip_tables.ko
            │   │   │   │   ├── ipt_ah.ko
            │   │   │   │   ├── ipt_MASQUERADE.ko
            │   │   │   │   ├── ipt_REJECT.ko
            │   │   │   │   ├── ipt_rpfilter.ko
            │   │   │   │   ├── nf_conntrack_ipv4.ko
            │   │   │   │   ├── nf_defrag_ipv4.ko
            │   │   │   │   ├── nf_log_ipv4.ko
            │   │   │   │   ├── nf_nat_h323.ko
            │   │   │   │   ├── nf_nat_ipv4.ko
            │   │   │   │   ├── nf_nat_masquerade_ipv4.ko
            │   │   │   │   ├── nf_nat_pptp.ko
            │   │   │   │   ├── nf_nat_proto_gre.ko
            │   │   │   │   └── nf_reject_ipv4.ko
            │   │   │   └── tunnel4.ko
            │   │   ├── ipv6
            │   │   │   ├── ah6.ko
            │   │   │   ├── esp6.ko
            │   │   │   ├── ip6_tunnel.ko
            │   │   │   ├── ipcomp6.ko
            │   │   │   ├── mip6.ko
            │   │   │   ├── netfilter
            │   │   │   │   ├── ip6table_filter.ko
            │   │   │   │   ├── ip6table_mangle.ko
            │   │   │   │   ├── ip6table_nat.ko
            │   │   │   │   ├── ip6table_raw.ko
            │   │   │   │   ├── ip6_tables.ko
            │   │   │   │   ├── ip6t_MASQUERADE.ko
            │   │   │   │   ├── ip6t_REJECT.ko
            │   │   │   │   ├── nf_conntrack_ipv6.ko
            │   │   │   │   ├── nf_defrag_ipv6.ko
            │   │   │   │   ├── nf_log_ipv6.ko
            │   │   │   │   ├── nf_nat_ipv6.ko
            │   │   │   │   ├── nf_nat_masquerade_ipv6.ko
            │   │   │   │   └── nf_reject_ipv6.ko
            │   │   │   ├── sit.ko
            │   │   │   ├── tunnel6.ko
            │   │   │   ├── xfrm6_mode_beet.ko
            │   │   │   ├── xfrm6_mode_transport.ko
            │   │   │   ├── xfrm6_mode_tunnel.ko
            │   │   │   └── xfrm6_tunnel.ko
            │   │   ├── irda
            │   │   │   └── irda.ko
            │   │   ├── mac80211
            │   │   │   └── mac80211.ko
            │   │   ├── netfilter
            │   │   │   ├── ipvs
            │   │   │   │   ├── ip_vs.ko
            │   │   │   │   └── ip_vs_rr.ko
            │   │   │   ├── nf_conntrack_amanda.ko
            │   │   │   ├── nf_conntrack_broadcast.ko
            │   │   │   ├── nf_conntrack_ftp.ko
            │   │   │   ├── nf_conntrack_h323.ko
            │   │   │   ├── nf_conntrack_irc.ko
            │   │   │   ├── nf_conntrack.ko
            │   │   │   ├── nf_conntrack_netbios_ns.ko
            │   │   │   ├── nf_conntrack_netlink.ko
            │   │   │   ├── nf_conntrack_pptp.ko
            │   │   │   ├── nf_conntrack_proto_dccp.ko
            │   │   │   ├── nf_conntrack_proto_gre.ko
            │   │   │   ├── nf_conntrack_proto_sctp.ko
            │   │   │   ├── nf_conntrack_proto_udplite.ko
            │   │   │   ├── nf_conntrack_sane.ko
            │   │   │   ├── nf_conntrack_sip.ko
            │   │   │   ├── nf_conntrack_tftp.ko
            │   │   │   ├── nf_log_common.ko
            │   │   │   ├── nf_nat_amanda.ko
            │   │   │   ├── nf_nat_ftp.ko
            │   │   │   ├── nf_nat_irc.ko
            │   │   │   ├── nf_nat.ko
            │   │   │   ├── nf_nat_proto_dccp.ko
            │   │   │   ├── nf_nat_proto_sctp.ko
            │   │   │   ├── nf_nat_proto_udplite.ko
            │   │   │   ├── nf_nat_redirect.ko
            │   │   │   ├── nf_nat_sip.ko
            │   │   │   ├── nf_nat_tftp.ko
            │   │   │   ├── nfnetlink_acct.ko
            │   │   │   ├── nfnetlink.ko
            │   │   │   ├── nfnetlink_log.ko
            │   │   │   ├── nfnetlink_queue.ko
            │   │   │   ├── x_tables.ko
            │   │   │   ├── xt_addrtype.ko
            │   │   │   ├── xt_CHECKSUM.ko
            │   │   │   ├── xt_CLASSIFY.ko
            │   │   │   ├── xt_comment.ko
            │   │   │   ├── xt_connbytes.ko
            │   │   │   ├── xt_connlimit.ko
            │   │   │   ├── xt_connmark.ko
            │   │   │   ├── xt_conntrack.ko
            │   │   │   ├── xt_ecn.ko
            │   │   │   ├── xt_hashlimit.ko
            │   │   │   ├── xt_helper.ko
            │   │   │   ├── xt_hl.ko
            │   │   │   ├── xt_IDLETIMER.ko
            │   │   │   ├── xt_iprange.ko
            │   │   │   ├── xt_ipvs.ko
            │   │   │   ├── xt_length.ko
            │   │   │   ├── xt_limit.ko
            │   │   │   ├── xt_LOG.ko
            │   │   │   ├── xt_mac.ko
            │   │   │   ├── xt_mark.ko
            │   │   │   ├── xt_multiport.ko
            │   │   │   ├── xt_nat.ko
            │   │   │   ├── xt_NFLOG.ko
            │   │   │   ├── xt_NFQUEUE.ko
            │   │   │   ├── xt_owner.ko
            │   │   │   ├── xt_physdev.ko
            │   │   │   ├── xt_pkttype.ko
            │   │   │   ├── xt_policy.ko
            │   │   │   ├── xt_quota2.ko
            │   │   │   ├── xt_quota.ko
            │   │   │   ├── xt_recent.ko
            │   │   │   ├── xt_REDIRECT.ko
            │   │   │   ├── xt_socket.ko
            │   │   │   ├── xt_state.ko
            │   │   │   ├── xt_statistic.ko
            │   │   │   ├── xt_string.ko
            │   │   │   ├── xt_TCPMSS.ko
            │   │   │   ├── xt_tcpudp.ko
            │   │   │   ├── xt_time.ko
            │   │   │   ├── xt_TPROXY.ko
            │   │   │   ├── xt_TRACE.ko
            │   │   │   └── xt_u32.ko
            │   │   ├── rxrpc
            │   │   │   └── af-rxrpc.ko
            │   │   ├── sunrpc
            │   │   │   └── xprtrdma
            │   │   │       └── rpcrdma.ko
            │   │   ├── wireless
            │   │   │   ├── cfg80211.ko
            │   │   │   └── lib80211.ko
            │   │   └── xfrm
            │   │       └── xfrm_ipcomp.ko
            │   └── sound
            │       ├── ac97_bus.ko
            │       ├── drivers
            │       │   ├── mpu401
            │       │   │   └── snd-mpu401-uart.ko
            │       │   ├── opl3
            │       │   │   └── snd-opl3-lib.ko
            │       │   └── snd-aloop.ko
            │       ├── pci
            │       │   ├── ac97
            │       │   │   └── snd-ac97-codec.ko
            │       │   ├── au88x0
            │       │   │   └── snd-au8810.ko
            │       │   ├── emu10k1
            │       │   │   └── snd-emu10k1x.ko
            │       │   ├── hda
            │       │   │   └── snd-hda-intel.ko
            │       │   ├── mixart
            │       │   │   └── snd-mixart.ko
            │       │   ├── nm256
            │       │   │   └── snd-nm256.ko
            │       │   ├── oxygen
            │       │   │   ├── snd-oxygen-lib.ko
            │       │   │   └── snd-virtuoso.ko
            │       │   ├── snd-ad1889.ko
            │       │   ├── snd-atiixp.ko
            │       │   ├── snd-atiixp-modem.ko
            │       │   ├── snd-intel8x0.ko
            │       │   ├── snd-intel8x0m.ko
            │       │   ├── trident
            │       │   │   └── snd-trident.ko
            │       │   └── ymfpci
            │       │       └── snd-ymfpci.ko
            │       └── synth
            │           └── snd-util-mem.ko
            ├── modules.alias
            ├── modules.alias.bin
            ├── modules.builtin
            ├── modules.builtin.bin
            ├── modules.dep
            ├── modules.dep.bin
            ├── modules.devname
            ├── modules.order
            ├── modules.softdep
            ├── modules.symbols
            ├── modules.symbols.bin
            └── source -> /home/jetson/Downloads/Linux_for_Tegra/source/public/kernel/kernel-4.9

300 directories, 709 files

One more thing, uname -r return and actual folder generated are different, 4.9.253 vs 4.9.299, is it critical or should work anyway? I assume that Jetson Nano Developer Kit SD Card Image v4.6.1 2022/02/23 has been built on Jetson Linux Driver Package (L4T) v32.7.1 2022/02/23, but I have downloaded Jetson Linux R32.7.3 from here https://developer.nvidia.com/embedded/jetson-linux-archive

jetson@192.168.1.115:~/modules/lib/modules/4.9.299-tegra/kernel/drivers/usb$ uname -r
4.9.253-tegra

Regarding this:

TEGRA_KERNEL_OUT” is an environment variable. It isn’t a symbol and is not part of nconfig. What it does is set up something in the environment as to where to find temporary output (and also the .config temporary input). The “O=...” says the option “O” is to look at the environment variable “TEGRA_KERNEL_OUT” (explained below). An example symbol to search for is:

  • CONFIG_LOCALVERSION
    (it understands the “CONFIG_”, and so you could just search for “LOCALVERSION”)
    (this would normally be “-tegra”)
  • CONFIG_USB_HIDDEV
    (this is the symbol for the USB_HIDDEV; you can search for that or with the CONFIG_ prefix)
    (the “m” key should toggle this to be a module; the “n” key would disable this; the “y” key would enable this, but it would be integrated into the kernel, and not a module…which is not what you want for this case)

About Environment Variables:

Every program on almost every operating system offers options one can pass to the program upon startup. An example on linux, to see the “help” content for “ls” would be “ls --help”. This is a direct method of passing options to a program.

Every program also inherits from its environment. It is up to the program to decide if it wants to use something from that environment. An example would be that when you log in, your home directory is available to any program you run via the “HOME” environment variable. Check this out:
echo $HOME

You can export an environment variable, and then everything you run from that terminal has access to that variable. The “$HOME” variable is an example. You could examine this just for illustration:

echo $CUSTOM
export CUSTOM="hello world"
echo $CUSTOM
unset CUSTOM
echo $CUSTOM

Until you unset the variable, it is available. However, maybe you want to have this environment visible just for one program command. In that case you can leave out export, but use it as a prefix to the command. Try this to see how the variable can have a one-time use:

unset
echo $CUSTOM
CUSTOM=testing echo "hello $CUSTOM"
echo $CUSTOM

When we compile via this command:
make nconfig
…then it executes directly in the source code. In some cases this is what you want, but not in this case. We want to set up a temporary output location so as to avoid polluting the original source code. We’re simply using the environment variable TEGRA_KERNEL_OUT as a kind of bookmark. We first export this to some location we’ve created which is an empty directory. Example:

mkdir ~/temporary
export TEGRA_KERNEL_OUT=~/temporary
make O=$TEGRA_KERNEL_OUT nconfig
# examine what is in "`~/temporary`", possibly using our variable:
cd $TEGRA_KERNEL_OUT
ls

The most use variable is “TOP”, which you have to set up. You go to the kernel source start, where the “Makefile” exists. You can echo the name of this location via “pwd”. You can conveniently set “TOP” to this:

export TOP=`pwd`

From then on you can “cd $TOP” or use “$TOP” in commands. For this:
make O=$TEGRA_KERNEL_OUT nconfig
TEGRA_KERNEL_OUT is not a symbol. It is the environment where we are putting temporary output. It is the “O=” being set to our temporary location by a convenient “bookmark”.

Search for CONFIG_USB_HIDDEV. Enable it as a module with the “m” key.

The basic job that you are doing is:

  • Unpack the kernel source.
  • Find out where the TOP is. Optionally export TOP.
  • If you wish to make sure your kernel source is pristine, then from $TOP:
    sudo make mrproper
  • Create a custom, empty directory. Example:
mkdir ~/out
export TEGRA_KERNEL_OUT=~/out
  • Create an initial configuration which matches the running system. This consists of two parts:
    • make O=$TEGRA_KERNEL_OUT tegra_defconfig
    • Search for symbol “CONFIG_LOCALVERSION”. Set it to “-tegra”. There is actually more than one way to do this. Now your configuration matches (which is useful because now any loadable module you create will be able to plug in or be removed as the kernel runs; this is compatible with the running kernel).
  • Now modify the configuration to also include the symbol (driver’s name in the kernel) that you want. The tool to do so, which is being told to output to the temporary location, when run from $TOP:
    make O=$TEGRA_KERNEL_OUT nconfig
    (then in nconfig search for CONFIG_USB_HIDDEV; or just USB_HIDDEV since search understands CONFIG_)
    (then select with the m key)
  • Now you can build, but be sure to say the temporary location. If we are just building modules, and not Image (I recommend Image as an acid test, but it isn’t mandatory):
make O=$TEGRA_KERNEL_OUT modules_prepare
# The "-j 6" says to use 6 CPU cores:
make O=$TEGRA_KERNEL_OUT -j 6 modules

If that works, then let’s assume you’ve exported a temporary module install location and want to put content there:

mkdir ~/modules
export TEGRA_MODULES_OUT=~/modules
make O=$TEGRA_KERNEL_OUT INSTALL_MOD_PATH=$TEGRA_MODULES_OUT
cd $TEGRA_MODULES_OUT
 # To see output directory tree (might need to "`sudo apt-get install tree`"):
tree -d | less
# Or to see individual drivers:
find . -type f -name '*.ko'

You’re only interested in the driver created as a result of enabling module symbol CONFIG_USB_HIDDEV. You might find this of interest:
find $TEGRA_MODULES_OUT -type f -iname '*usb*'

Or more narrow:

find $TEGRA_MODULES_OUT -type f -iname '*usb*hid*'

Unfortunately, this is not very clear for me, what do you mean exactly with enable it as a module? I have no clue which line I have to enable as a module, some of the lines are just a link to another menu, n/y/m buttons doesn’t work on them, for some lines only n/y button works on them. Here is a batch of screenshot I’ve selected and the error at the end of compilation.




drivers/built-in.o: In function `wacom_probe':
/home/jetson/Downloads/kernel/kernel-4.9/drivers/hid/wacom_sys.c:2392: undefined reference to `usb_hid_driver'
ld: drivers/built-in.o: relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `usb_hid_driver' which may bind externally can not be used when making a shared object; recompile with -fPIC
/home/jetson/Downloads/kernel/kernel-4.9/drivers/hid/wacom_sys.c:2392:(.text+0x797228): dangerous relocation: unsupported relocation
/home/jetson/Downloads/kernel/kernel-4.9/drivers/hid/wacom_sys.c:2392: undefined reference to `usb_hid_driver'
/home/jetson/Downloads/kernel/kernel-4.9/Makefile:1103: recipe for target 'vmlinux' failed
make[1]: *** [vmlinux] Error 1
make[1]: Leaving directory '/home/jetson/output'
Makefile:171: recipe for target 'sub-make' failed
make: *** [sub-make] Error 2

It sounds like this feature is not possible as a module. I’m going to first describe how I would to discover if module build is possible. Then I will add a part about “If this cannot be built as a module”.


To start with, just for understanding (I don’t want you to edit anything like this), look at the “.config” file produced in the “$TEGRA_KERNEL_OUT” after you’ve run this:
make O=$TEGRA_KERNEL_OUT tegra_defconfig
(feel free to delete the temporary location and recreate it, or to use a second temporary location)

To look at that, check this command to examine it:

cd $TEGRA_KERNEL_OUT
less .config

(the “q” key quits)

You’ll see lots of lines with CONFIG_...something.... Some of them “=m”. Those are configured as a module. This is not done directly in that file, but is done while in this program:
make O=$TEGRA_KERNEL_OUT nconfig

Any time you see an item in that nconfig editor in which you can select or deselect it, one of those “CONFIG_...something...” lines will change when saved. There are three possible configurations of those lines:

  • Starting with a “#”, which is neutralized, and is the same as that feature disabled.
  • Ending with an “=y”, which is integrated directly in the kernel. This is not a module feature.
  • If that CONFIG line ends with “=m”, then it means the configuration editor was used to set that feature to enable as a module. This is what you want.

Go through the nconfig until you find the driver (symbol, or CONFIG_...something...) you are interested in. The F8 symbol search can help with that. Eventually you’ll reach that feature. On the left side, if you see an asterisk “*”, then this means “=y” (the feature is integrated directly into the kernel). If you see “M”, then this is enabled as a module (and is what you want for hiddev). I currently see in your last screenshot “*”, which is wrong. If you select that line (use the arrow keys to go down to it), and click the “m” key on the keyboard, then you should see this change to “<M>”. This is what you want.

Not all features can be set up as a module. If you click the “m” key on your keyboard and it won’t toggle, then let me know…this means it is an “integrated only” feature. Very likely this can be built as a module (which will simplify life for you during installation even if compile isn’t much different).

I’ll reiterate that your goal is:

  • Get an empty temporary output location set to “$TEGRA_KERNEL_OUT”. Best done by actually removing the directory if you wish to start over (this removes “hidden” dot files…and “.config” is technically a “hidden dot file”).
  • Build tegra_defconfig with the “O=$TEGRA_KERNEL_OUT”.
  • You can search for CONFIG_LOCALVERSION, and set that to “-tegra”.
  • Now your build is set to be an exact match to the running system (or at least to the default…which is what systems are set to anyway). It is time to edit.
  • Now run “make O=$TEGRA_KERNEL_OUT nconfig”. Search for and find the hiddev feature via the symbol search for CONFIG_USB_HIDDEV (use F8 to search for the symbol). Go there.
  • Once that feature is highlighted, press the “m” key to make it toggle to “<M>”.
  • Verify it is “<M>”, and save. You’re ready to propagate configuration.
  • Propagate via “make O=$TEGRA_KERNEL_OUT modules_prepare”.
  • You can now build:
    make O=$TEGRA_KERNEL_OUT modules
  • You can then place the modules in a new temporary location. Example:
mkdir ~/modules
export TEGRA_MODULES_OUT="~/modules"
make O=$TEGRA_KERNEL_OUT INSTALL_MOD_PATH=$TEGRA_MODULES_OUT modules_install

…then look for your module within “$TEGRA_MODULES_OUT”.


If This Cannot Be Built As A Module…
(I hope you can build as a module, but it sounds like it is not possible)

Then you will have to build the kernel itself, and all modules. You will need to be careful about installation. We will pick a different CONFIG_LOCALVERSION, one which is different than “-tegra”. An example would be “-usbdev” to describe what you added (the actual name isn’t too important).

Here are the modified build steps, similar to the previous list (and exactly matching in some parts):

  • Get an empty temporary output location set to “$TEGRA_KERNEL_OUT”. Best done by actually removing the directory if you wish to start over (this removes “hidden” dot files…and “.config” is technically a “hidden dot file”).
  • Build tegra_defconfig with the “O=$TEGRA_KERNEL_OUT”.
  • You can search for CONFIG_LOCALVERSION, and customize that to something like “-usbdev”. This step differs from just a module build.
  • Now your build is set to be an exact match to the running system (or at least to the default…which is what systems are set to anyway). It is time to edit.
  • Now run “make O=$TEGRA_KERNEL_OUT nconfig”. Search for and find the hiddev feature via the symbol search for CONFIG_USB_HIDDEV (use F8 to search for the symbol). Go there.
  • Once that feature is highlighted, press the “y” key to make it toggle to “[*]”. This becomes an integrated feature, and is no longer a module.
  • Verify it is “[*]”, and save. You’re ready to propagate configuration.
  • Propagate via “make O=$TEGRA_KERNEL_OUT modules_prepare”. Since we are going to build the Image target, this is technically not required, but it doesn’t hurt.
  • This time you must build the kernel itself (plus modules). To build the kernel itself (I’m assuming use of 6 CPU cores, which is what the “-j 6” is for):
# This takes quite some time:
make O=$TEGRA_KERNEL_OUT -j 6 Image
  • You can now build modules:
    make O=$TEGRA_KERNEL_OUT modules
  • You can then place the modules in a new temporary location. Example:
mkdir ~/modules
export TEGRA_MODULES_OUT="~/modules"
make O=$TEGRA_KERNEL_OUT INSTALL_MOD_PATH=$TEGRA_MODULES_OUT modules_install

…this time you will need all modules within “$TEGRA_MODULES_OUT”. You will also find the file “Image” in “$TEGRA_KERNEL_OUT”. For that:

cd $TEGRA_KERNEL_OUT
find . -type f -name 'Image'

When you find those, then you’ll be ready for the next set of instructions. If you have to build Image, then the installation gets more complicated. The official documents describe putting this in the flash software, and then flashing, but what you’re really in need of is to update the existing system without too much risk and without losing your existing install. If the Image and modules build steps work as expected, then we can move on to that.

This is exactly what is happening, “y” or “n” button works and I can see [*] and [ ] accordingly, but “m” button doesn’t work and I can not set it to [M].

So I’ve done everything as per your instruction and here it is:

jetson@192.168.1.115:~/output$ find . -type f -name 'Image'
./arch/arm64/boot/Image

At the end of modules_install there was some errors, no Idea is it very important or not, below is terminal output with the part where errors started:

INSTALL sound/synth/snd-util-mem.ko
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/tigon/tg3.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/tigon/tg3_tso.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/tigon/tg3_tso5.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/acenic/tg1.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/acenic/tg2.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/bnx2x/bnx2x-e1-6.2.9.0.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/bnx2x/bnx2x-e1h-6.2.9.0.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/bnx2x/bnx2x-e2-6.2.9.0.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/bnx2/bnx2-mips-09-6.2.1a.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/bnx2/bnx2-rv2p-09-6.0.17.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/bnx2/bnx2-rv2p-09ax-6.0.17.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/bnx2/bnx2-mips-06-6.2.1.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/bnx2/bnx2-rv2p-06-6.0.15.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cxgb3/t3b_psram-1.1.0.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cxgb3/t3c_psram-1.1.0.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cxgb3/ael2005_opt_edc.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cxgb3/ael2005_twx_edc.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cxgb3/ael2020_twx_edc.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/e100/d101m_ucode.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/e100/d101s_ucode.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/e100/d102e_ucode.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/yamaha/ds1_ctrl.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/yamaha/ds1_dsp.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/yamaha/ds1e_ctrl.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/3com/typhoon.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/emi26/loader.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/emi26/firmware.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/emi26/bitstream.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/emi62/loader.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/emi62/bitstream.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/emi62/spdif.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/emi62/midi.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/kaweth/new_code.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/kaweth/trigger_code.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/kaweth/new_code_fix.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/kaweth/trigger_code_fix.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cpia2/stv0672_vp4.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/adaptec/starfire_rx.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/adaptec/starfire_tx.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/dsp56k/bootstrap.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/atmsar11.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/sun/cassini.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/matrox/g200_warp.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/matrox/g400_warp.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/r128/r128_cce.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/R100_cp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/R200_cp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/R300_cp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/R420_cp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RS690_cp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RS600_cp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/R520_cp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/R600_pfp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/R600_me.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV610_pfp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV610_me.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV630_pfp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV630_me.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV620_pfp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV620_me.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV635_pfp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV635_me.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV670_pfp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV670_me.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RS780_pfp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RS780_me.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV770_pfp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV770_me.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV730_pfp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV730_me.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV710_pfp.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/radeon/RV710_me.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/av7110/bootcode.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/ttusb-budget/dspbootcode.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/myricom/lanai.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/LA-PCM.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/PCMLM28.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/DP83903.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/NE2K.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/tamarack.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/PE-200.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/PE520.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/3CXEM556.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/3CCFEM556.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/MT5634ZLX.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/RS-COM-2P.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/COMpad2.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/COMpad4.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/SW_555_SER.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/SW_7xx_SER.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/cis/SW_8xx_SER.cis' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/ositech/Xilinx7OD.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/advansys/mcode.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/advansys/38C1600.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/advansys/3550.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/advansys/38C0800.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/qlogic/1040.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/qlogic/1280.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/qlogic/12160.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/qlogic/isp1000.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/qlogic/sd7220.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/korg/k1212.dsp' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/ess/maestro3_assp_kernel.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/ess/maestro3_assp_minisrc.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/sb16/mulaw_main.csp' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/sb16/alaw_main.csp' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/sb16/ima_adpcm_init.csp' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/sb16/ima_adpcm_playback.csp' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/sb16/ima_adpcm_capture.csp' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/yamaha/yss225_registers.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/tehuti/bdx.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/keyspan/mpr.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/keyspan/usa18x.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/keyspan/usa19.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/keyspan/usa19qi.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/keyspan/usa19qw.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/keyspan/usa19w.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/keyspan/usa28.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/keyspan/usa28xa.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/keyspan/usa28xb.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/keyspan/usa28x.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/keyspan/usa49w.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/keyspan/usa49wlc.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/ti_3410.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/ti_5052.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/mts_cdma.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/mts_gsm.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/mts_edge.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/edgeport/boot.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/edgeport/boot2.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/edgeport/down.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/edgeport/down2.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/edgeport/down3.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/whiteheat_loader.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/whiteheat.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/keyspan_pda/keyspan_pda.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/keyspan_pda/xircom_pgs.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/vicam/firmware.fw' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/yam/1200.bin' doesn't match the target pattern
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:41: target '/home/jetson/modules/lib/firmware/yam/9600.bin' doesn't match the target pattern
  INSTALL /home/jetson/modules/lib/firmware/acenic/tg1.bin
install: missing destination file operand after '/home/jetson/modules/lib/firmware/acenic/tg1.bin'
Try 'install --help' for more information.
/home/jetson/Downloads/kernel/kernel-4.9/scripts/Makefile.fwinst:42: recipe for target '/home/jetson/modules/lib/firmware/acenic/tg1.bin' failed
make[2]: *** [/home/jetson/modules/lib/firmware/acenic/tg1.bin] Error 1
/home/jetson/Downloads/kernel/kernel-4.9/Makefile:1402: recipe for target '_modinst_post' failed
make[1]: *** [_modinst_post] Error 2
make[1]: Leaving directory '/home/jetson/output'
Makefile:171: recipe for target 'sub-make' failed
make: *** [sub-make] Error 2

You don’t need to worry about firmware. I was not expecting that command to worry about it either, but it might be worth explaining this just for curiosity’s sake.

There is also a build target for firmware (basically device tree). That target is “dtbs”. The firmware goes to somewhere under “/lib/firmware”, which is where the missing files are complained about (and you don’t care about that, you’re not using the firmware). One could specify the firmware install path option similar to the location of the modules_install via “INSTALL_FW_PATH=...somewhere...”. You’ve specified for INSTALL_MOD_PATH=...somewhere..., so it is apparently thinking you want to install firmware content.

You don’t need to know this, but some trivia you might be interested in related to firmware: Firmware tends to be uploaded directly into some device, and it changes the device; conversely, a driver is what talks to the device, and is loaded into the operating system. The two halves make the whole. Most of the time firmware is not needed unless there is some sort of configuration required. The device tree in part helps to find hardware which is not plug-n-play for content which is directly wired to the carrier board. Firmware tends to not change with driver revisions unless the driver or hardware have undergone significant revision. If we make minor changes to a kernel we probably also rebuild the driver, but don’t bother rebuilding the device tree (or other firmware…the hardware is still located in the same place).

Is it correct that this content is directly accessible on your Nano? This makes it easier. To prepare, before actual install (there is some risk for installing a full kernel which is mostly risk-free if just installing a module), here are some steps:

  • Write down the result of the command “uname -r” (which happens to be the current running kernel responding).
  • Write down the new CONFIG_LOCALVERSION. For example, state if you used the suggested “-usbdev”, or something else.
  • Attach a copy of your “/boot/extlinux/extlinux.conf”. I’ll explain how to edit that.
  • Make sure you have a working serial console. Picking alternate boot entries is via serial console, and making optional boot entries is how you take the risk out of testing a new kernel.

You can install without a serial console, but risk goes up significantly. I’ll explain what to do for install steps once you post your extlinux.conf (you could paste it into the thread, and then mark it as a code block to preserve formatting, but it can be easier to just attach the file; if attaching, not sure if you’ll need to rename the file extension to “.txt”).

Yes, that is correct it is Nvidia Jetson Nano 4GB Developer Kit board, a test unit that can be formatted etc. It is not an issue to lose anything.

jetson@192.168.1.115:~$ uname -r
4.9.299-tegra
CONFIG_LOCALVERSION="-usbdev"

extlinux.conf (845 Bytes)

Unfortunately, this is not possible, I do not have any machine with RS-232 port and appropriate serial cable. I can access Jetson Nano via SSH network connection and physically via monitor/keyboard/mouse.

This does not use an RS-232 port. You’re thinking of a DB-9 connector. The protocol is the same, but the physical specification differs. It is a serial UART, but one end has a USB connector. That USB connector goes to the host PC, and the other end (with either 3 wires or 6 wires) goes to the Jetson pins. You’d use the ground, TX, and RX pins (a 6 wire USB UART cable works too, you’d just ignore the other wires).

Here are some example cables:

Some are much less expensive than others. The key here is that you need three loose wires (6 wires works, but you don’t need that), and the voltage must be a TTL level of 3.3V. Same protocol, but no DB-9 connector. USB at the host PC end, wire pins at the Jetson end.

The name of the device special file which appears on your host PC will differ depending on the manufacturer of the chipset inside of the serial UART cable. Most of them won’t need any extra driver. You must have this if the information I’m posting below is to have full value. It is possible to add a second entry as described below, and set that entry as first/default, and it would just use that instead of the original, but if something went wrong, then you’d either have to edit the entry or have a UART cable. One normally is advised to test a new kernel with an alternate entry and only make that entry default once tested.


Here is an edited version of your extlinux.conf:

TIMEOUT 30
DEFAULT primary

MENU TITLE L4T boot options

LABEL primary
      MENU LABEL primary kernel
      LINUX /boot/Image
      INITRD /boot/initrd
      APPEND ${cbootargs} quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 

LABEL usbdev
      MENU LABEL usbdev
      LINUX /boot/Image-usbdev
      INITRD /boot/initrd
      APPEND ${cbootargs} root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 

      
# When testing a custom kernel, it is recommended that you create a backup of
# the original kernel and add a new entry to this file so that the device can
# fallback to the original kernel. To do this:
#
# 1, Make a backup of the original kernel
#      sudo cp /boot/Image /boot/Image.backup
#
# 2, Copy your custom kernel into /boot/Image
#
# 3, Uncomment below menu setting lines for the original kernel
#
# 4, Reboot

# LABEL backup
#    MENU LABEL backup kernel
#    LINUX /boot/Image.backup
#    INITRD /boot/initrd
#    APPEND ${cbootargs}4.9.299-

Notice that it now has two entries (starting with “LABEL”). I changed the LABEL and I changed the “MENU LABEL” in the added entry. For debugging purposes, I also removed the “quiet” from the command line (the “APPEND” adds to the kernel command line). I recommend removing quiet from the first APPEND as well.

You can make the edits above and it would not change anything in the actual boot unless the second entry is selected via serial UART during boot. This makes it safe because the original kernel and boot entry are still there. More below if you want to give up the safety.

The part which makes this second entry useful is that it has a new file name for the “LINUX” (kernel) file: It is “Image-usb” instead of “Image”. The first step is to copy your new Image file as name “Image-usbdev” to “/boot” (e.g., if you are where Image is in the newly built kernel content, then “sudo cp Image /boot/Image-usbdev”). You’ll need to also add modules to a new location.

The modules you are adding will go in “/lib/modules/4.9.299-usbdev/kernel”. Remember when, during compile, you used “make O=$TEGRA_KERNEL_OUT modules_install INSTALL_MOD_PATH=$TEGRA_MODULES_OUT”? Do this:

  • cd $TEGRA_MODULES_OUT
    (you might have to set TEGRA_MODULES_OUT again, or just remember what it was)
  • cd lib/modules
  • ls -ld 4.9.299-usbdev
    (just to verify)
  • sudo cp -adPr 4.9.299-usbdev /lib/modules
    (I added more archive options to cp than is needed; this copies the “4.9.299-usbdev” to the actual location it’ll be used if you built this on the Jetson itself)
  • cd /lib/modules
  • ls
    (verify there is now a “4.9.299-dev/” subdirectory)

When booting, you will get the option to run the usbdev label.


It is a bad idea to not have the serial USB UART cable. However, if you really are ok with it, then make this alternate set of boot entries (a slightly different edit to extlinux.conf):

TIMEOUT 30
DEFAULT usbdev

MENU TITLE L4T boot options

LABEL usbdev
      MENU LABEL usbdev
      LINUX /boot/Image-usbdev
      INITRD /boot/initrd
      APPEND ${cbootargs} root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 

LABEL primary
      MENU LABEL primary kernel
      LINUX /boot/Image
      INITRD /boot/initrd
      APPEND ${cbootargs} quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 

      
# When testing a custom kernel, it is recommended that you create a backup of
# the original kernel and add a new entry to this file so that the device can
# fallback to the original kernel. To dprimaryo this:
#
# 1, Make a backup of the original kernel
#      sudo cp /boot/Image /boot/Image.backup
#
# 2, Copy your custom kernel into /boot/Image
#
# 3, Uncomment below menu setting lines for the original kernel
#
# 4, Reboot

# LABEL backup
#    MENU LABEL backup kernel
#    LINUX /boot/Image.backup
#    INITRD /boot/initrd
#    APPEND ${cbootargs}

Note that in this second version of extlinux.conf that the default “LABEL” is now “usbdev”, and that this is the first entry. The recovery via the original entry is still there, but now the usbdev is what you get if you don’t interrupt boot with serial console and pick it.

Being that this is an SD card model it isn’t all that dangerous anyway since the original content is all there. You could pull the SD card from the Jetson and plug it in to a Linux host PC, and then edit the extlinux.conf again if something went wrong.

Not much is likely to go wrong, but sometimes the initrd would need a change too. I doubt it does in this case, but I could be wrong.

Once you’ve booted up, verify that “uname -r” has changed to “4.9.299-usbdev” (it used to be “4.9.299-tegra”).

I am able to use only option 2, without USB UART serial cable.
Unfortunately, your suggested extlinux.conf file changes didn’t boot into new kernel 4.9.299-usbdev, but always to current 4.9.299-tegra, so since it is just a test unit of Jetson Nano, I just removed LABEL primary part and left only the part with new LABEL usbdev kernel boot, as a result, it started to boot, NVIDIA logo, then black screen, OS do not want to load GUI, it is just stopped on some point during the load with black screen, then I connected to Jetson via SSH network connection and here is the outcome:

jetson@192.168.1.115:/dev$ uname -r
4.9.299-usbdev
jetson@192.168.1.115:/dev$ zcat /proc/config.gz | grep 'CONFIG_USB_HIDDEV'
CONFIG_USB_HIDDEV=y

We can see new compiled kernel and HIDDEV supported, but USB Dongle doesn’t work anyway. The SDK that communicates with USB Dongle does return can not find device as previously.

Here is CompareIt! report to see the difference between Jetson Nano 4GB and Raspberry Pi4 when I insert USB Dongle into USB port:
report.html (4.8 KB)

As you can see, RPI does load some USB HID driver, when Jetson Nano doesn’t:

usbcore: registered new interface driver usbhid
 	7	usbhid: USB HID core driver

Is it possible to contact Nvidia team who compiled the latest image and ask why USB HID devices won’t load driver?

It is odd that it now shows “CONFIG_USB_HIDDEV=y”, but did not before, even though you are running on the old kernel. The old kernel would respond to uname -r as “4.9.299-tegra”, but I’d expect the new one to respond as “4.9.299-usbdev” (I expect that because the “CONFIG_LOCALVERSION=-usbdev”).

Did you add the new Image file with this name and location:
/boot/Image-usbdev

Did you use this extlinux.conf edit?

TIMEOUT 30
DEFAULT usbdev

MENU TITLE L4T boot options

LABEL usbdev
      MENU LABEL usbdev
      LINUX /boot/Image-usbdev
      INITRD /boot/initrd
      APPEND ${cbootargs} root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 

LABEL primary
      MENU LABEL primary kernel
      LINUX /boot/Image
      INITRD /boot/initrd
      APPEND ${cbootargs} quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 

That variant would indeed load the new Image-usbdev. This would in fact show “CONFIG_USB_HIDDEV=y”. It definitely should not respond to uname -r as “4.9.299-tegra”. The implication would be that either you are using the old kernel, and that kernel already has CONFIG_USB_HIDDEV, or else you are using the new kernel with the wrong CONFIG_LOCALVERSION (which means it is also using the wrong modules).