Select the version of your OS from the tabs below. If you don't know the version you are using, run the command cat /etc/os-release
or cat /etc/issue
on the board.
Remember that you can always refer to the Torizon Documentation, there you can find a lot of relevant articles that might help you in the application development.
The Linux Kernel of TorizonCore accepts certain boot-time arguments (parameters) that configure aspects of the kernel itself or its modules. This article briefly describes the method provided by the TorizonCore Builder tool (which is part of the Torizon platform) to perform such configuration.
To learn which Linux Kernel version corresponds to the latest TorizonCore versions, check the Embedded Linux Release Matrix.
To find out more about Linux Kernel Arguments, see The kernel’s command-line parameters.
This article complies to the Typographic Conventions for Torizon Documentation.
The pre-requisite to complete these instructions are:
To install TorizonCore Builder, read our statements on OS and shell compatibility, then follow the instructions below, in order.
Create and enter a working directory where your customization will be stored:
$ mkdir ~/tcbworkdir
$ cd ~/tcbworkdir
Use the setup script named tcb-env-setup.sh, available on the Toradex Github, to setup TorizonCore Builder:
$ wget https://raw.githubusercontent.com/toradex/tcb-env-setup/master/tcb-env-setup.sh
$ source tcb-env-setup.sh
For advanced usage, run source tcb-env-setup.sh -h
, or see the project README.
If using Windows, you must pass extra parameters to the script when using the following commands:
ostree serve
: consult the ostree serve reference.Tip: The setup script installs a bash completion script for TorizonCore Builder, making it possible to autocomplete commands and parameters by just pressing the TAB key.
Verify that the command torizoncore-builder
is available:
$ torizoncore-builder --help
Warning: Make sure to: (1) source the script, (2) every time you open a new terminal, (3) inside the working directory you have previously created. Otherwise, it will not work as intended and, most importantly, the torizoncore-builder
alias will not be created properly.
There are two possible approaches to apply the customization and generate a custom Toradex Easy Installer image, described in the next two sections Approach 1 and Approach 2. These approaches in some cases are interchangeable and in some not as described in the next sections.
To learn about TorizonCore Builder workflow and the different approaches to use the tool, with explanatory diagrams, please refer to the TorizonCore Builder - Workflow article.
Attention: Both approaches generate a custom Toradex Easy Installer image as output, so the approaches should be followed alternatively and not in sequence.
TorizonCore Builder build command generates a custom TorizonCore image with the custom kernel arguments applied, ready to be installed with Toradex Easy Installer, named torizon-core-docker-colibri-imx6-Tezi_5.3.0.CUSTOM
in the example below. This is achieved using a configuration YAML file, tcbuild.yaml
as default.
This is the recommended approach on production programming and on CI/CD (continuous integration / continuous development) pipelines.
To learn about TorizonCore Builder workflow and the different approaches to use the tool, with explanatory diagrams, please refer to the TorizonCore Builder - Workflow article.
It requires a Toradex Easy Installer image of TorizonCore (preferably without containers), torizon-core-docker-colibri-imx6-Tezi_5.3.0+build.7.tar
in this case, as input. The directory with the kernel arguments are passed as customization: kernel: arguments
.
tcbuild.yaml# Sample configuration file: input: easy-installer: local: images/torizon-core-docker-colibri-imx6-Tezi_5.3.0+build.7.tar # Sample customization: include or change (if already exists) key1 and key2 kernel arguments customization: kernel: arguments: - key1=val1 - key2=val2 output: easy-installer: local: torizon-core-docker-colibri-imx6-Tezi_5.3.0.CUSTOM
To generate the TorizonCore image, run the command below, in the same directory where the tcbuild.yaml file is:
$ torizoncore-builder build
...
1091 metadata, 12741 content objects imported; 412.2 MB content written
Pulling done.
Deploying OSTree with checksum 58629613a342197c31c5911d0874aac1b0fcb46b68a63f59760c03bacc4df08a
Deploying done.
Copy files not under OSTree control from original deployment.
Packing rootfs...
Packing rootfs done.
=>> Build command successfully executed!
In case of using a configuration file with a different name than tcbuild.yaml, run the command specifying the configuration file name:
$ torizoncore-builder build --file <configuration_file_name>
To deploy the custom Toradex Easy Installer image to the board, click on the link below and choose between the available options.
In this second approach, instead of using a configuration YAML file and a one-step command, the generation of the custom TorizonCore with the custom kernel arguments is done using standalone commands, each performing one step towards this generation.
This approach is especially useful when making incremental changes, generating multiple images with different custom kernel arguments (or other customizations like different device tree overlays). As you will see, applying custom kernel arguments on an image of TorizonCore that has other customizations is just a matter of performing the apply, merge and deploy stages.
To learn about TorizonCore Builder workflow and the different approaches to use the tool, with explanatory diagrams, please refer to the TorizonCore Builder - Workflow article.
To generate a custom Toradex Easy Installer image with the desired custom kernel arguments follow the sequence of steps below.
You just need to execute this once. Then, you are ready to apply multiple changes to the image. For example, in addition to applying custom kernel arguments, you can also apply a custom splash screen, a new device tree, among other possibilities.
If you have not unpacked an image yet, download a base TorizonCore image (preferably without containers) inside the TorizonCore Builder working directory, then run the command below to unpack it. In the example below the torizon-core-docker-colibri-imx6-Tezi_5.3.0+build.7.tar
image is used as a reference:
$ torizoncore-builder images unpack torizon-core-docker-colibri-imx6-Tezi_5.3.0+build.7.tar
If you want to change the TorizonCore base image, download the new image and run the images unpack
command again, passing the new image as the argument.
For more details about the images unpack
command, please check the images unpack command in the commands manual.
Instead of using the images unpack
you can use the images download
command. This command checks which is the connected Toradex SoM, downloads the compatible latest quarterly release of a TorizonCore image without containers, and unpacks this image.
$ torizoncore-builder images download --remote-host 192.168.1.117 --remote-username torizon --remote-password torizon
Change the arguments --remote-host
,--remote-username
and --remote-password
to your board IP Address, username and password, respectively.
For more details on how the images download
command works, please check the images download command in the commands manual.
For setting the custom kernel arguments, one would simply run:
$ torizoncore-builder kernel set_custom_args "key1=val1" "key2=val2" 'custom-kargs_overlay.dts' compiles successfully. Overlay custom-kargs_overlay.dtbo successfully applied. Kernel custom arguments successfully configured with "key1=val1 key2=val2".
Warning: Every time you execute the kernel set_custom_args
command the custom-kargs_overlay.dts
is overwritten, so you should pass all the kernel arguments in a single set_custom_args
command.
For more details about the kernel set_custom_args
command, please check the kernel set_custom_args command in the commands manual.
As shown in the above message, a device tree overlay will be applied to the image to set the custom arguments.
This fact can be verified by using the dto status
command, which will display the custom-kargs_overlay.dtbo
amongst any other applied overlays, like so:
$ torizoncore-builder dto status
Enabled overlays over device tree imx6dl-colibri-eval-v3.dtb:
- colibri-imx6_parallel-rgb_overlay.dtbo
- colibri-imx6_stmpe-ts_overlay.dtbo
- display-vga_overlay.dtbo
- custom-kargs_overlay.dtbo
Warning: Since the arguments are kept in a device-tree overlay, the user should be careful not to remove that overlay (especially by using dto remove --all
) or the arguments will not be present on the deployed image.
For more details about the dto status
command, please check the dto status command in the commands manual.
To determine what the current custom kernel arguments are (that is, what configuration would take effect upon the execution of a union
command) use:
$ torizoncore-builder kernel get_custom_args Currently configured custom kernel arguments: "key1=val1" "key2=val2".
For more details about the kernel get_custom_args
command, please check the kernel get_custom_args command in the commands manual.
Finally, it is also possible to clear any applied custom kernel arguments by doing:
$ torizoncore-builder kernel clear_custom_args Custom kernel arguments successfully cleared.
This will remove the corresponding device-tree overlay (custom-kargs_overlay.dtbo
) as done by dto remove
.
For more details about the kernel clear_custom_args
command, please check the kernel clear_custom_args command in the commands manual.
Merge the kernel arguments (as well as other customizations like a splash screen or a new device tree) into the base Toradex Easy Installer image of Torizon - use whatever branch name you want.
As an example, to commit changes into a branch named custom-branch
use the command below, accordingly with the TorizonCore Builder version:
$ torizoncore-builder union custom-branch
Applying changes from STORAGE/dt.
Commit 58629613a342197c31c5911d0874aac1b0fcb46b68a63f59760c03bacc4df08a has been generated for changes and is ready to be deployed.
$ torizoncore-builder union --union-branch=custom-branch
Warning: We recommend that you switch to the latest version of TorizonCore Builder to enjoy its simpler and more consistent user interface besides other improvements and bug fixes.
For more details about the union
command, please check the union command in the commands manual.
To deploy the custom Toradex Easy Installer image to the board, click on the link below and choose between the available options.
After rebooting, in your target device's terminal, verify that your new custom image of TorizonCore is active on the device with the command below:
# sudo ostree admin status
Password:
* torizon 58629613a342197c31c5911d0874aac1b0fcb46b68a63f59760c03bacc4df08a.0
Version: 5.3.0+build.7-tcbuilder.20211008140217
origin refspec: tcbuilder:58629613a342197c31c5911d0874aac1b0fcb46b68a63f59760c03bacc4df08a
torizon 36ad904617b170339b6ded7b9dce87ed8cf0f76473b897fdd832d91e82eb1ddc.0 (rollback)
Version: 5.3.0+build.7
origin refspec: tcbuilder:36ad904617b170339b6ded7b9dce87ed8cf0f76473b897fdd832d91e82eb1ddc
Where 58629613a342197c31c5911d0874aac1b0fcb46b68a63f59760c03bacc4df08a
is the OSTree commit hash and should be the same as:
union
command in the case of the standalone commandsbuild
command.After deploying the image, you should be able to see your custom kernel arguments in the kernel arguments list. To do it, you can use the command below:
# cat /proc/cmdline
enable_wait_mode=off galcore.contiguousSize=50331648 root=LABEL=otaroot rootfstype=ext4 quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash ostree=/ostree/boot.1/torizon/248c1906ffb097b9d5dd4d48f0a942a23cfd82378649edbc24ce5743291c53b0/0 key1=val1 key2=val2