U-boot is pre-built and available in binary format in the bootloader subdirectory of the driver package (this is the one which provides the Linux_for_Tegra subdirectory). The only operation which flash.sh would do is to first pad the end of the binary with NULL bytes to fit a specific size. flash.sh takes care of this for you.
The only time you need to build u-boot is if you are modifying the existing source, e.g., adding a new driver or some configuration change. Anyone doing so is probably already adept at bare metal programming…else there is a steep learning curve.
Plugging in a USB “device”, such as a camera or mass storage external hard drive only produces a pop-up if the device is some standard class with functions generic drivers service. The Jetson is purely a custom driver…no driver will pop up to ask what you want to do since the installer is the only driver which understands a Jetson. Flash software (the driver package) looks to see if the Jetson is connected at the time it runs. Either flash will proceed (flash software found the Jetson in recovery mode), or flash will fail (either the Jetson wasn’t connected with the micro-B USB cable, or the Jetson was not in recovery mode). You can use lsusb to see if USB knows the Jetson is connected; for a JTX1 this will produce output when recovery mode is valid, else it will be blank: “lsusb -d 0955:7721”.
When you unpack the driver package it has subdirectory “Linux_for_Tegra/”. If you go there the file “apply_binaries.sh” exists. To run this against the default “Linux_for_Tegra/rootfs/” subdirectory this works:
sudo ./apply_binaries.sh
Note that the driver package and apply_binaries.sh are intended to be installed on a desktop host, not on a Jetson. When apply_binaries.sh is run, it applies nVidia-specific hardware access files into the rootfs folder of the desktop PC host. The act of running flash.sh creates a file from the rootfs and some boot files which is then transferred to the Jetson over the micro-B USB cable when in recovery mode. So both flash.sh and apply_binaries.sh install/run on the host, not on the Jetson…the effect on a Jetson is indirect, but it does eventually propagate to the Jetson once everything is prepared on the host (which can be slow). As mentioned before, bootloader is taken care of by flash.sh, you don’t need to do anything for normal flash.
In cases where you were doing bootloader programming (and very few people will do this) the configuration and building would indeed be on the host, not on the Jetson. You’d be using a bare metal cross compiler and more or less need to be an expert on the topic to add a driver from scratch.
FYI, flash.sh never modifies your host. It does take up some hard disk space (actually, a lot of hard disk space since each image it processes is about 15GB). There is a front end package called JetPack, which an Ubuntu PC desktop can run. This only runs flash.sh and does not have its own flash app. What JetPack does differently is that it also offers to set up some user applications on both the Jetson and the host. In the case of the Jetson it does this after a flash over ethernet. JetPack is quite capable of helping to select and install some user space applications without actually flashing. This is true for applications which can be installed to aid development on both Jetson and host. To use this you must use Ubuntu 14.04. If you just flash with flash.sh, then any standard x86_64 Linux PC can do this…I use Fedora, so I use flash.sh, but cannot use JetPack.