Yocto Support for NVIDIA Jetson Platforms

From RidgeRun Developer Connection
Jump to: navigation, search




  Index Next: Setting up Yocto


Nvidia-preferred-partner-badge-rgb-for-screen.png



The goal of this wiki guide is to provide the instructions to configure, build, and install Yocto in NVIDIA platforms based in previous experience of the RidgeRun engineers. We hope this provides some light to new people using Yocto in Jetson. The tutorial uses the meta-tegra layer for Yocto. Please note that the Yocto community also has a tutorial here and they do a good job keeping it updated.

Why choose Yocto?



When you first have an idea and want to create a demo or proof-of-concept, you often start with something that exists and is working, so you can focus on your unique design. For example, NVIDIA’s Jetson embedded SoCs, come with a pre-built file system making it easy to get started. When you have your idea working, ideally on hardware that is close to your anticipated embedded hardware platform, then what? Some companies add to their demo code and attempt to turn it into a product. This might work for simple products, but for many ideas, this will lead to products that are not reliable, difficult to manage and create a downstream support nightmare. Once their first product is released and the support issues arise, these companies want to get to the next generation as soon as possible, still without realizing what is needed to create a supportable product.

All these problems point to the traditional embedded systems’ market goals:

EmbeddedGoals.png


In order to address these problems and make your project successful, you need to choose the right tools not only for the present but for future project development. Here we list some of the primary considerations when selecting your system’s software.

Software Development cost



Sw cost.jpg


Despite using an out-of-the-box Operating System that might look like an easier and faster solution for your product, it might quickly become a nightmare when working on your final product and start adding sophisticated features. Not being able to control the details of your software nor sharing them among your developers easily, is the start of the end. Your development team will take much longer to develop on a platform that requires a lot of documentation for reproducing the development environment and changing the code to add new features and customize your system.

During development, going forth and back among different software revisions and changes is a common scenario. Without a proper source code versioning mechanism, all these software changes become impossible.

A pre-build OS lacks reproducibility, and all the software pieces will be spread, reproducing the system on another’s PC or even reverting a software change becomes a “mission impossible” task. All this makes development slower, inefficient, and, most importantly, expensive.

Hardware design cost



Hw cost.jpg


Typically a pre-build OS comes with lots of default applications and unnecessary firmware, including kernel drivers, system configurations, and in some cases unnecessary user interfaces such as Ubuntu. All of this has a first direct impact on storage space, which translates to bigger storage requirements.

In the second place, unnecessary software leads to additional tasks for your CPU, so your system won’t be only focused on what makes your product unique, but also in dummy and useless tasks. If you are planning to get the most of your system, every CPU cycle counts!

A collateral effect of the additional software occupying your CPU is memory usage. All processes, including those that are not required, will be consuming your RAM; this will increase the requirements for your system’s memory for correct operation.

Lastly, the summary of all these additional requirements is converted into extra hardware parts or unnecessary more powerful ones, leading to an increment in the power consumption, which translates into more complex circuitry, more significant PCB area, and ultimately, a less portable device. You really don’t want your product to look like a 80’s cell phone right!?

Product performance and user experience



User experience.jpg


Developing a product in an embedded system is not the same as developing an application that runs on your desktop PC. If you do not use most of your hardware acceleration you will end up with low-performance applications and the user experience for your product will be the worst.

Embedded devices can perform even better than a general PC but they require proper use of their hardware resources. Conventional OSs such as Ubuntu have been designed for desktop usage and they do not look for this kind of optimization. Using a custom OS such as Yocto, allows you to design your product using hardware acceleration such as GPU, VPU, DMA, and others, providing a high-performance result and an excellent user experience.

Customer support



Software update.jpg


Once your product is in the market begins the most critical part of the journey, is customer service, and bug fixing. You will likely start to receive hundreds of bug reports or feature requests, and you need to make sure this can be done easily, safely, and quickly. For this to happen, you need a reliable update mechanism and an efficient software version control flow.

Using hardware-specific OSs such as Yocto, allows you not only to track every change in your system and revert faulty modifications but also to integrate specific update mechanisms that will work efficiently for your product use case, having control over every system action.

Software security



Software security.jpg


Depending on your field of action, cybersecurity can be one of the pillars of your product. Not having control over what applications are being executed or getting the latest security patches would make your product vulnerable.

Yocto provides a high level of granularity in the packages used for your system and you can quickly update any of them as soon as a new security patch is available from the package’s developer. If no update is still available, you can also easily tackle this yourself since you are in total control of the code you are running in your system.

Product evolution



Software evolution.jpg


Since you control all the software layers running in your system in Yocto, and you can easily replicate and modify it, porting your software to a newer hardware platform to create the next generation of your product becomes an easy task.

You do not need to reconfigure your entity OS from scratch, you only configure your platform setting to match the new hardware and you will be ready to go.

When creating your product every penny counts! This means you need to keep your costs low from both hardware and software perspectives. Choosing cumbersome technologies for your development team makes it difficult to progress faster and thus increases the development cost. In the same way, using technology that consumes too many resources such as CPU, storage, or memory, makes your product increase its price and thus, reduces your company's profits.




  Index Next: Setting up Yocto