This article holds frequently asked questions (FAQ) about Torizon and TorizonCore.
You are encouraged to search for your topic of interest in the Torizon related articles.
Browse the sub-sections below after your topics of interest.
Torizon is an open-source software platform that simplifies the development and maintenance of embedded Linux software.
You can read a technical overview at TorizonCore Technical Overview.
Torizon is a new Linux-based software platform that simplifies the process of developing and maintaining embedded software. It allows you to configure the system for your use case quickly and easily, so you can focus on application development instead of Linux builds.
Check out the Torizon page on the Toradex website to learn more.
TorizonCore came out of a need to ease our customers into Embedded Linux, allowing them to focus on application development by using containers and shipping a binary operating system based on Yocto/OpenEmbedded which is completely open-source. We’re including ease-of-use technology such as Integrated Development Environment (IDE) support, allowing a customer to do development and debugging without leaving the comfort of their IDE.
You can learn more about the technical details on TorizonCore Technical Overview.
Here are some examples of offerings that are part of the Torizon ecosystem: - Torizon OTA: the project is currently under Toradex Labs, comprising a full CI/CD infrastructure, a cloud-hosted dashboard to expose features for our customers among other components, and relies on the native OTA support on the device provided by the TorizonCore OS. - Partner Demo Containers: container images that make it possible to use partner technologies easily on Torizon, running on TorizonCore. - Visual Studio Extension For Torizon: enables a developer-friendly migration path for Windows and Windows CE application developers. - Visual Studio Code Extension for Torizon: support one of the most popular IDEs of the moment. With a large ecosystem and several tools, this is a great way to get started for an awesome development experience.
TorizonCore is 100% Linux-based, using Yocto Project/OpenEmbedded as a base, adding container support, an OTA update client, OSTree and several other key technologies.
Refer to the Software page on our developer center.
Torizon is focused on providing an experience to our customers they are used to and developing integration with IDE’s we all know and love. We’ve started with Visual Studio and Visual Studio Code and will be working on expanding support to all of the most popular use-cases. Please let us know your development workflow!
Check out the Visual Studio Code Knowledge Base page.
Containers allow you to focus on just building your application as quickly and efficiently as possible by utilizing 3rd party pre-built containers and not having to worry about incompatibilities with libraries on dependencies.
Containers actually utilize user-mode virtualization to isolate processes but share the same kernel, allowing performance to match native applications. There is some storage/memory overhead, however, with some library duplication when using different versions.
An image is a read-only, stateless template, whereas a container is a running instance of it. More than one container can be run from the same image. For comprehensive information, go through the Docker documentation. For instance, in the Docker overview, there is a section that defines what are images and containers.
The full-featured image is rather large taking up most of the space on the raw NAND-based modules. As such it is not recommended to experiment with containers on these devices since there isn't much space for containers as is. In the future, we hope to slim down the footprint. Alternatively, the Balena based image is slimmer by about ~70MB, although fully unsupported by Toradex.
Just like when building regular applications, a container built on an x86 machine will work only on x86 targets, the same is true for ARM and other computer architectures. Both images used in this lesson have been built for a wide variety of architectures, including ARM.
Note: There is also a distinction between ARMv7 (32 bit) and ARMv8 (64 bit)
Preliminary tests show that it's possible, though you're encouraged to use the 64-bit version whenever possible.
The Debian Containers for Torizon are containers based on the official Debian containers, maintained by Toradex. They overcome several challenges of running containers on embedded systems, such as granular hardware access and compatibility with the host OS, making your development experience much easier.
We don't use the tag
latest. We always use tags with versions that follow the semantic versioning. Learn more about it in the article TorizonCore Containers Tags and Versioning.
TorizonCore is completely free to all of our customers and we encourage modifications by publishing all of our source code.
All of the source code needed to build TorizonCore is publicly available and licensed under a free modifiable license. Some components such as GPU drivers may be binary only but this is outside of Toradex control. We strive to open source all components we can and will continue to support upstreaming our changes into mainline anytime we can.
You can find the source-code in our GitHub. In addition, comprehensive documentation about how to Build TorizonCore With Yocto and BSP efforts to mainline, among several other topics, can be found in our developer website.
TorizonCore is built from Yocto Project/OpenEmbedded and utilizes over 200 open source projects which all have licensing which fall under the Open Source Initiative guidelines. The only proprietary pieces we include are from the SoC vendor and actively work to find OSS alternatives.
TorizonCore is built upon our foundational work that is done by our BSP team who handles the majority of our driver work. It means that TorizonCore is built on top of the Toradex BSP Layers and Reference Images for Yocto Project.
TorizonCore is focused on building ease of use and the best out of the box experience without requiring the customer to have extensive Yocto Project/OpenEmbedded knowledge.
TorizonCore is built on top of Yocto BSP layers, therefore it cannot work without the BSP layers. One of the great advantages is that you don't have to build and maintain it by yourself.
If you have strong Yocto Project/OpenEmbedded skills or fall into some corner-cases where customization at the OS level is inevitable (e.g. fast boot), then you must either: - Build your own customized version of TorizonCore, if you still want to benefit from its components and ecosystem. - Opt to go with the traditional Yocto approach to build your own Yocto image.
In a nutshell, ultra-summarized sentence, TorizonCore’s focus is to not require the customer to have extensive Yocto Project/OpenEmbedded experience to build applications. Leveraging our container support and IDE integration, you can quickly go to market with your embedded solution.
If you deeply skilled with Yocto Project/OpenEmbedded and need to fully customize your OS experience, the value of TorizonCore is less of an impact. Often this happens for a corner-case not covered by TorizonCore, such as a fast-boot system or the use of a raw NAND-based SoM.
The primary purpose of Device Tree in Linux is to provide a way to describe non-discoverable hardware. TorizonCore utilizes Device Tree files to define a set of hardware and allows you to customize it to your exact specifications.
To learn more, read our article about Device Tree Overlays that focuses on TorizonCore.
In our context, in a very summarized way, Mainline is the tip of the Linux kernel maintained directly by Linus Torvalds. Downstream are modified releases of specific versions of the mainline maintained by someone else, usually hardware vendors.
We strive to be on the mainline whenever possible with TorizonCore. We work with our SoC vendors to open up as much source code as possible and upstream their drivers, removing as many proprietary drivers as possible - as you can glimpse on BSP efforts to mainline. Nevertheless, when it is not possible to follow the mainline for various reasons, we make sure that the downstream version offered by the SoC vendor works well on our SoMs. You can easily see it by looking at our Linux BSP releases and our commit history in our downstream Linux kernel.
In our i.MX6-based Debian containers we are using the Armada X.org DDX driver which seems to have worked fine in our tests but, it might show stability issues.
Our out of the box experience includes Wayland, Chromium, and Portainer, which is a web-based tool to manage containers. You can easily customize our pre-built containers or add your one.
We have examples documenting how to run a Graphical User Interface on TorizonCore using several different technologies as Qt, Crank and TotalCross.
Keep an eye on the list of Torizon related articles, or subscribe to our updates in the footer of the developer website. We plan to document how to use other technologies to build and run a GUI app on TorizonCore.
We have documented how to access devices and interfaces through the container isolation layer from the Host OS, allowing the customer to control exactly what their application can use and keep it as secure as possible.
OSTree is a way to check and store filesystem changes in a git-like filesystem, allowing the customer to do atomic updates in their rootfs. When updates do occur, only the delta between the difference is sent to the customer, which makes updating much quicker.
Learn more on our article about OSTree.
TorizonCore has a built-in client updater, called Aktualizr, which allows someone to update using a Uptane backend, such as HERE or our own OTA solution. It relies on OSTree to execute the updates.
Learn more about it on Torizon Update System. Keep in mind that Torizon OTA is under Toradex Labs.
Make sure to clear the U-Boot environment by using
env default -a && env save. If resetting the U-Boot environment does not help, use
setenv tdxargs loglevel=7 to enable kernel debug messages. Also
setenv tdxargs "loglevel=7 earlycon" can help to initialize a console during very early boot and thus see debug output in case the kernel crashes very early during boot.
There is an open Docker bug that affects Windows machines in which the date inside the containers may not be correctly synced with the host PC.
You may experience weird issues due to that, such as
apt-get failing due to security certificates dates not matching, or wrong dates in logs.
The only solution at the moment is to restart the Docker deamon on your host machine.
If you have recently installed Docker and WSL 2 on Windows, and your Windows machine has a wrong date/time, you may face a similar error. See below a sample error output from the Docker build:
> [2/13] RUN apt-get update && apt-get install -y --no-install-recommends python3 python3-setuptools python3-influxdb python3-dev wait-for-it python3-pip && apt-get clean && apt-get autoremove && rm -rf /var/lib/apt/lists/*: #5 0.643 Get:1 http://deb.debian.org/debian buster InRelease [121 kB] #5 0.644 Get:2 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB] #5 0.722 Get:3 http://deb.debian.org/debian buster-updates InRelease [51.9 kB] #5 1.085 Get:4 https://feeds.toradex.com/debian/testing buster InRelease [8943 B] #5 2.340 Get:5 http://deb.debian.org/debian buster/main arm64 Packages [7736 kB] #5 7.500 Get:6 https://feeds.toradex.com/debian/testing buster/main arm64 Packages [91.1 kB] #5 7.842 Reading package lists... #5 10.37 E: Release file for http://deb.debian.org/debian/dists/buster-updates/InRelease is not valid yet (invalid for another 3h 55min 49s). Updates for this repository will not be applied. #5 10.37 E: Release file for http://security.debian.org/debian-security/dists/buster/updates/InRelease is not valid yet (invalid for another 5h 55min 55s). Updates for this repository will not be applied. ------ failed to solve with frontend dockerfile.v0: failed to build LLB: executor failed running [/bin/sh -c apt-get update && apt-get install -y --no-install-recommends python3 python3-setuptools python3-influxdb python3-dev wait-for-it python3-pip && apt-get clean && apt-get autoremove && rm -rf /var/lib/apt/lists/*]: runc did not terminate sucessfully
Adjust your PC date/time and run the following in the PowerShell with admin privileges to force WSL 2 to reload the kernel:
$ wsl --shutdown