Torizon Frequently Asked Questions (FAQ)
This article holds frequently asked questions (FAQ) about Torizon and TorizonCore.
Frequently Asked Questions (FAQ)
Browse the sub-sections below after your topics of interest.
What is Torizon?
Torizon is an open-source software platform that simplifies the development and maintenance of embedded Linux software.
Why should I use Torizon?
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.
Why should I use TorizonCore?
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.
Furthermore, even though Torizon is built by Toradex with Yocto, we expect that you can use it right away, as a binary distribution, therefore making your life easier since you don't need to learn Yocto, which has a steep learning curve.
You can learn more about the technical details on TorizonCore Technical Overview.
What is the difference between Torizon and TorizonCore?
- Torizon is a platform and a brand name encompassed by the TorizonCore operating system and many other innovative projects.
- TorizonCore is a distribution, sometimes referred to as an Operating System (OS), that is the foundation to support the Torizon platform and its ecosystem.
Here are some examples of offerings that are part of the Torizon ecosystem:
- Torizon Platform Services: tool for managing secure, remote and offline updates for Torizon. Also offers a dashboard with Device Monitoring data.
- Partner Demo Containers: container images that make it possible to use partner technologies easily on Torizon, running on TorizonCore.
- Torizon IDE Extension 2: With a large ecosystem and several tools, this is a great way to get started for an awesome development experience. Also, it enables a developer-friendly migration path for Windows and Windows CE application developers.
Is TorizonCore Linux-based?
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.
What OS options do I have besides Torizon?
Refer to the Software page on our developer center.
What is the best development environment for Torizon?
Torizon is focused on providing an experience to our customers they are used to and developing integration with Visual Studio Code. We're working on expanding support to all of the most popular use-cases. Please let us know your development workflow!
Learn more about how to use our extension in the IDE Extension 2 documentation.
Where do I find more information about the Torizon Visual Studio Code support for Python, .NET, and C/C++?
You will find all the information in the IDE extension 2 documentation.
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 or dependencies.
Does the use of containers increases complexity and affects performance?
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.
If you use multiple containers, complexity may sound a bit complex in the beginning, but we believe that the multiple benefits brought up by containerization are paid off. Nevertheless, in the last instance, you can use a single container fully privileged to package all your applications with full access to the system, thus eliminating this complexity.
What is the difference between a Docker image and a container?
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.
Is there a list of available container images for Torizon?
You can run almost any container on Torizon, as long as the processor architecture matches the container architecture was built for. You can find the list of Toradex and partner containers in the List of Container Images for Torizon.
How easily can I import my existing application into Torizon?
There is no straightforward answer to this question since it depends on the programming language, hardware dependencies, and possibly many other factors.
If you have an existing headless .NET, C/C++ or Python application, start from the templates provided in our IDE Extension 2.
There are many other resources for GUI applications such as Qt Debian Container for Torizon, How to Build a GUI with ASP.NET Core and Blazor for TorizonCore and more under the GUI Documentation.
You can also run your own language, application, database, and much more inside containers very easily. Refer to the Application Development Documentation as a comprehensive starting point.
How relevant is the processor's architecture in containers?
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.
There is also a distinction between Armv7 (32 bit) and Armv8 (64 bit).
Can I run 32-bit containers on 64-bit platforms?
Preliminary tests show that it's possible, though you're encouraged to use the 64-bit version whenever possible.
What are the Debian Containers For Torizon?
The Debian Containers for Torizon are containers based on the official Debian container, 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 and safer, granted that you follow the Torizon Best Practices Guide.
How are the Debian Containers for Torizon versioned and tagged?
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.
How to Properly Run Containers on Torizon?
This question is related to your use case. We recommend that you start with Run and Manage Containers with the Command-line on Torizon and the Torizon Best Practices Guide. You must also consider Using Multiple Containers with TorizonCore. If you need to access hardware features, check our list of Peripheral Access articles.
Can I Use External Storage to Expand the on-SoM Flash Storage?
You can Store Docker Data on an External Storage Device (USB/SD Card). The OS will still be installed in the internal flash of the SoM, which is expected to be more reliable.
How Many Containers Can I Start Simultaneously?
As of TorizonCore 5, investigations led us to find out that when multiple containers start, there is a RAM peak independent of the containers. If the free RAM limit of the SoM is reached, the kernel watchdog will reboot the system. Furthermore, if all containers are configured with a restart policy such as
restart=unless-stopped, it may lead to a reboot loop.
The maximum number of containers depends on the hardware. At the time of the report, on Verdin iMX8M Mini DualLite 1GB WB V1.1B the maximum was 7 containers, and on a Colibri iMX8 QuadXPlus 2GB WB IT the maximum was 18 containers.
To overcome that limitation, you may control startup order, make sure to not use a Docker restart policy and edit the
docker-compose systemd service to restart the containers following the control startup order in case a reboot happens. Make sure to extensively test and validate such tweaks.
Another possibility is to rework 2 or more containers to fit in a single container, thus reducing the total number of containers on startup.
Pricing and Licenses
How much does TorizonCore cost?
TorizonCore is completely free to all of our customers and we encourage modifications by publishing all of our source code.
What does it mean TorizonCore is Open Source Software (OSS)?
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 on our developer website.
What license does TorizonCore use?
TorizonCore is built from Yocto Project/OpenEmbedded and utilizes over 200 open source projects which all have licensing that falls under the Open Source Initiative guidelines. The only proprietary pieces we include are from the SoC vendor and we actively work to find OSS alternatives.
Torizon Platform Services and Over-the-Air Updates
What is Torizon Remote Updates?
Torizon Remote Updates is an integrated over-the-air update system that works out-of-the-box with TorizonCore. It is part of the Torizon platform and it is the recommended method for over-the-air updates with TorizonCore. Learn more in Torizon Updates.
Is Torizon Platform Services free? What are the Plan Options?
Torizon Platform provides both complimentary and paid services. If you have an interest in learning more about Torizon Platform Services pricing and plans, please contact us.
Can I Upload my own Customized TorizonCore Image?
This service is available in the paid plans. If you have an interest in learning more about Torizon Platform Services pricing and plans, please contact us.
Where can I learn more about Torizon Platform Services?
Torizon Platform Services is new and growing fast, just like its documentation. Make sure to:
- Subscribe for updates on the Toradex developer website: it can be done on any page, at the footer of the page.
- Keep an eye on our Torizon Platform Documentation, especially on the Torizon Updates section where you can find various related articles.
Can I use Other OTA Systems?
- Choose an OTA system that is compatible with OSTree and Aktualizr. This is the easiest way since you'll only need to deploy credentials to the target.
- Use another OTA system that makes use of other technologies. This is the hardest, you will most likely need to recompile TorizonCore from the source using Yocto.
What is OSTree?
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 target, which makes updating much quicker and using much less data than other approaches as A/B partition.
Learn more about it in our article about OSTree.
How does TorizonCore work with OTA?
TorizonCore has a built-in client updater, called Aktualizr, which allows someone to push updates using a Uptane-compatible backend, such as HERE or our own OTA solution. It relies on OSTree to execute the updates.
Learn more about it on Torizon Updates.
Can I Host Container Images in my Own Private Registry and Use Them With Torizon Platform?
You have to use the TorizonCore Builder Tool to add or update the registry credentials to your devices, thus making it scalable to deploy them to several devices without manually logging-in. It is described in details in the article Using Private Registries With Torizon Platform.
How does TorizonCore work with Yocto Project/OpenEmbedded BSP layers?
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 providing ease-of-use and the best out-of-the-box experience without requiring the customer to have extensive Yocto Project/OpenEmbedded knowledge.
Does TorizonCore replace Yocto Project/OpenEmbedded BSP layers?
TorizonCore is built on top of our Yocto BSP layers, therefore it cannot work without them. 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.
What are the compelling features of TorizonCore vs building your own Yocto Project/OpenEmbedded custom distribution?
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 are 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.
Keep in mind that we left the Torizon ecosystem out of this comparison, meaning that by not using TorizonCore, you also lose some of the benefits provided by the Torizon ecosystem, such as OTA.
What is Device Tree?
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.
What do Mainline and Downstream kernel/drivers mean and how does this affect 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 use the mainline kernel 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.
Graphical User Interface
How do GUIs work on TorizonCore using containers?
In summary, we document how you can run graphics accelerated containers, for instance on Debian Containers for Torizon. Since our Linux distribution uses Wayland/Weston + XWayland, from then on, it is all about developing your compatible application, using your framework of choice.
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 own.
We have examples documenting how to run a Graphical User Interface on TorizonCore using several different technologies like Qt, Crank, and TotalCross.
Keep an eye on the list of GUI 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.
How can I remotely access a GUI inside a container?
If you choose to use the Debian Containers for Torizon, which we recommend, then you can Remote Access the TorizonCore GUI Using VNC or RDP.
How do hardware interfaces such as video, GPIO, I2C, SPI, etc. work with TorizonCore using containers?
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.
After re-installing TorizonCore using the Toradex Easy Installer, the board does not boot. What can I do?
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.
How to fix apt-get not working because security certificate dates don't match on Windows?
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 daemon on your host machine.
Container not running: standard_init_linux.go:211: exec user process caused "exec format error"
apt-get error on Windows - runc did not terminate successfully
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.cn/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.cn/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
hctosys: unable to read the hardware clock
Please refer to the How to use the Real Time Clock in Linux article and learn how to use
hwclock to solve this problem.
System reboots without any warning or message in the console
When you try to run several containers on memory-limited devices, you may end up in a situation where even the kernel cannot handle it. With command (free, top, etc.), available memory can be checked. If running low on available memory, a CMA area size should be decreased. Please refer to the Contiguous Memory Allocator - CMA article and learn how to set/modify CMA area size with TorizonCore Builder via setting the kernel command line arguments to solve this problem.