Difference between revisions of "Jetson/Filesystem Emulation/Emulating Jetson Filesystem with QEMU and L4T Docker Container"

From eLinux.org
Jump to: navigation, search
Line 25: Line 25:
 
== Clone Your Device's Image ==
 
== Clone Your Device's Image ==
  
   
+
  After installing the JetPack, shut down the device and set it into recovery mode.  
After installing the JetPack, shut down the device and set it into recovery mode.  
 
 
   
 
   
 
Now, on the host PC, issue the following commands to clone your device's image.  
 
Now, on the host PC, issue the following commands to clone your device's image.  
 
   
 
   
$ cd <path_to_L4T>   
+
    $ cd <path_to_L4T>   
$ sudo ./flash.sh -r –k APP –G <name_of_the_img> <target> mmcblk0p1  
+
    $ sudo ./flash.sh -r –k APP –G <name_of_the_img> <target> mmcblk0p1  
 
   
 
   
Setting up Emulation Environment  
+
== Setting up Emulation Environment ==
 
   
 
   
 
Install docker and Nvidia Container Runtime. See instructions here.  
 
Install docker and Nvidia Container Runtime. See instructions here.  

Revision as of 10:50, 19 March 2021


[This page is under construction] [Introduction]


Setting up the Target Device

From the L4T Archive, download the desired L4T Driver Package and corresponding sample filesystem.

Flash the target device following the instructions described here.. After flashing, the device will reboot. Please configure the device at first boot and log into the OS.

Installing the Dependencies

The dependencies to be installed are specific to the task to be performed on the emulated filesystem. For the sake of exemplification, the Jetson Multimedia API samples will be compiled, therefore the dependencies are set for this purpose.

For more details, please see the documentation for the Multimedia API Sample Applications.

On the target, issue the following commands:

    $ sudo apt update
    $ apt list --upgradable
    $ sudo apt upgrade
    $ sudo apt install nvidia-jetpack 

Clone Your Device's Image

After installing the JetPack, shut down the device and set it into recovery mode. 

Now, on the host PC, issue the following commands to clone your device's image.

    $ cd <path_to_L4T>  
    $ sudo ./flash.sh -r –k APP –G <name_of_the_img> <target> mmcblk0p1 

Setting up Emulation Environment

Install docker and Nvidia Container Runtime. See instructions here.

Install QEMU and dependencies:

$ sudo apt-get update $ $ sudo apt-get install qemu binfmt-support qemu-user-static

Mount your target filesystem

$ mkdir $HOME/jetsonfs $ sudo mount -t ext4 <path_to_image>/<name_of_image>.img.raw $HOME/jetsonfs

Pull the NVIDIA L4T Base docker image that matches the L4T version you flashed on the Jetson.

$ docker pull nvcr.io/nvidia/l4t-base:r<release-number>

Further information about the docker image can be found here.

Download the multimedia API and sample from the Jetson Download Center.

Running the container

As the docker image and multimedia API samples have been downloaded, run the container with the following command:

$ sudo docker run -it --network=host -v <path_to_multimedia_api>:/tmp/tegra_multimedia_api -v <path_to_mounted_jetson_image>/usr/:/usr/ -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static nvcr.io/nvidia//l4t-base:r<release-number>

From inside the container, go to the desired MMAPI sample folder and build it.

$ apt-get update && apt-get install -y --no-install-recommends make g++ $ cd /tmp/tegra_multimedia_api/samples/00_video_decode $ make

Copying the binaries to the device

Check the container ID:

$ sudo docker ps

Copy the binaries from the container to the host PC

$ sudo docker cp <CONTAINER_ID>:/tmp/tegra_multimedia_api/samples/00_video_decode/video_decode /$HOME

Lastly copy the binaries to the target device (here connected over USB)

$ sudo cd ~ $ sudo scp ./video_decode jetson@192.168.55.1:~