We are using the TX1 as the core element of our embedded system. This is a device that needs to be able to be completely upgraded (operating system included) over the air, which may be a cellular modem connection.
As a result it is our aim to keep the size of the operating system and associated applications down to below 50MB. Due to the size of the sample file system it’s not feasible for us to run with an ubuntu installation so we have built our own root file system from scratch.
My question is how do we incorparate the various nvidia-specific drivers/firmwares/software into our custom root file system?
I see an apply_binaries.sh script in the supplied L4T BSP. What exactly does this do and how would I use it to apply to our root file system?
The apply_binaries.sh script can actually be run directly on a Jetson to add those files (you’d also need the tar archive files from the “nv_tegra/” subdirectory unless you directly upack those)…on a running system you’d then reboot, else you could do it by applying it to the sample rootfs. Note that the apply_binaries.sh must be run as root (or sudo). The option “-r PATH” names an alternate location, else it would install to the rootfs subdirectory from where apply_binaries.sh is located within the L4T driver package (as an example the “-r” option is useful for creating SD card images which are not mounted directly on the rootfs subdirectory).
You will find the driver package subdirectory “nv_tegra/” has some files there, and basically apply_binaries.sh unpacks those. The actual apply_binaries.sh script is human readable so you can browse it if you want.
Anecdote: Jetson TK1’s and Jetson TX1’s typically ship with a purely Ubuntu rootfs, and apply_binaries.sh has not been used to unpack relevant files. On such systems the “NVIDIA-INSTALLER/” subdirectory of ubuntu has “installer.sh” which when run essentially does the same task as the apply_binaries.sh script. Prior to that running facilities such as graphical display and CUDA don’t really exist in any advanced form.
Be aware that some of the files for GPU are tied to the X11 ABI, so if you use an alternate rootfs, you won’t get GPU acceleration unless that ABI version matches those from apply_binaries.sh
Also note that in some cases (from R24.2 and newer) the initrd is used…I don’t know if your custom rootfs is derived from the R24.2+ release or not, but if so, you need to also verify the initrd entry is correct in extlinux.conf, and that the actual initrd is correct for the moment of handing off from u-boot to the kernel.
Btw, as an exercise, if you want to see exactly what gets unpacked create a temp directory with nothing in it, and name that directory with the “-r” option while running (sudo) apply_binaries.sh.
Thank you for that info.
I’ve edited apply_binaries.sh to add what I need to my file system.
I now need gstreamer and the nvidia specific gstreamer components added.
Is this a compile from source or a binary distribution do you think?
I think some of the user space applications, or plugins, are provided with source code on the L4T version download page. Whether those would work with your custom Linux version I don’t know, it would be a case of going here, downloading sources, and just seeing if they have what you want (download and unpack the “Source Packages” link):
In some cases parts are provided only in binary format; in others source code is include.