You can build a kernel module. Before you start copy your current “/proc/config.gz” somewhere safe, and then use copies of that for any starting config (it can be decompressed at its new location via “gunzip config.gz”…don’t try this at the “/proc/” location because that isn’t a real file system). Note that anywhere you might see a make command similar to “make tegra18_defconfig” that this file is a substitute for a default config and will always be a better starting place than a default config. Use a copy of this copy so you always have an original. Each reboot “/proc/config.gz” represents the running kernel’s configuration in RAM, so changing the config means that file will also change.
If you run gunzip on a copy of config.gz you can use any text editor to read it. Inside of that you’ll see a line with “CONFIG_USB_SERIAL_CH341”. A config editor (mentioned below) is the best way to change this in case enabling this requires other features to be enabled.
Note your current output from “uname -r”. This is part of what determines where modules are searched for. Setting the CONFIG_LOCALVERSION is a component of “uname -r”.
Whichever computer you use to build from install package “libncurses5-dev”. This gives you the ability to use a menu-based editor for kernel configuration. On Ubuntu this would be something like:
sudo apt-get install libncurses5-dev
I recommend getting a serial console cable if you don’t have one already (the FTDI serial USB UART is recommended because the driver is already there). This will let you pick multiple kernel boot configurations at boot time without having to make a kernel change a default without testing. See:
FYI, I am assuming you are starting with a system running R28.2…which would have required flashing, e.g., with JetPack3.2. You can always verify which L4T version via:
head -n 1 /etc/nv_tegra_release
Understand that many documents will add steps for cross compiling a kernel from a different computer. You can put the “source_sync.sh” script directly on your Jetson in some working location and download kernel source via this (in which case it is simplified because you don’t need to cross compile…it becomes a native compile):
./source_sync.sh -k tegra-l4t-R28.2
…the source will then be in “sources/kernel/kernel-4.4/”.
The Documentation (“customization” section) download has instructions, but those instructions include parts for cross compile (native compile has fewer steps, e.g., you don’t need any of the cross compiler tools, many of the environment variables do not need to be set, so on). These are still good instructions and it doesn’t hurt to set up your host for this. See:
There will be some differences in how this is done, but an additional build document is here:
There are also a set of documents here:
Take a look at that and see what questions you might have. Once you are able to build a kernel with existing config you can use something like “make nconfig” to change the config to add the particular module.