Problem mounting drive in Stab

I added this line to my fstab to mount a share. This same line works from other Ubuntu 18.04 and 20.04 LTS servers.

// /media/workflow cifs username=myuser,password=mypw,iocharset=utf8,file_mode=0777,dir_mode=0777,noperm 0 0

I am getting an error that says:CIFS VFS: CIFS mount error: iocharset utf8 not found

I have loaded gifs-utils
I have generated the us_EN.UTF-8 locale as well using sudo dpkg-reconfigure locales

Any ideas why I am getting this error?

I have not used this, but I recognize something from similar situations. Before saying more, consider running this command and examining the output:
echo $LANG

In most cases this will answer “en_US.UTF-8”, but if you are set up in some other country and language, then this could change. UTF-8 allows a number of “character encodings”, and most languages of the world work with an 8-bit encoding. However, a significant number of languages will require 2-byte encodings, and will need UTF-16. A filesystem basically needs to understand the encodings to store or retrieve content, and displaying or making sense of that content requires knowledge of the current $LANG.

Your system understanding CIFS is only part of what is needed. Your local computer knows its UTF-8 encoding and your local system will understand en_US.UTF-8. What about the remote end? This will be another package. It seems your system may not have the driver and/or package required to translate between encodings and character sets.

Normally you would run command “apt search linux-generic”, and you would some extra kernel modules which would contain some ability to make this translation. The kernel on a Jetson does not use the stock modules, and I think you would have to build the module yourself (not hard if you’ve done it before), but simply adding the right kernel module for this purpose would probably fix things for you. Sorry, I don’t know which module you need. When you have that module compiled against your existing kernel config, then it would be copied to the right subdirectory of:
/lib/modules/$(uname -r)/kernel/
…and it should work.

From what I can tell the likely candidate is “nls_utf8.ko”, but I can’t guarantee it. I’m about 90% sure this is the one though. Examine your current kernel config:
zcat /proc/config.gz | grep 'NLS_UTF8'
…it should be unconfigured, and you’d want to start with this configuration, but also add “CONFIG_NLS_UTF8” as a module, build the module, and then copy to:
/lib/modules/$(uname -r)/kernel/fs/nls/nls_utf8.ko
…then reboot or run “sudo depmod -a”, and try again.

The official docs provide information on how to cross compile. You would want to make sure your CONFIG_LOCALVERSION matches (it should be set to “-tegra” if using the default Jetson kernel), build the main kernel once as a sanity check (you won’t use the full kernel, but configuration takes place during its build…there are ways around taking the time to build a full kernel, but it is wise to do a full kernel build once to see if it fails), and then build the modules. You’ll copy that one module to the location listed above.

FYI, when making config edits during a kernel build I prefer to use “make nconfig”. It allows search for symbols, e.g., you can search for “localversion” or “nls_utf8”. To use this make sure you’ve already run “sudo apt-get install libncurses5-dev”. There are several options, like “O=” which you will find in the docs…make sure that you always use “O=” if you’ve used it anywhere.