Embedded Linux tips and tricks

From DAVE Developer's Wiki
Revision as of 10:49, 14 March 2022 by U0001 (talk | contribs) (Configuring apt)

Jump to: navigation, search


Introduction[edit | edit source]

This page provides examples and usage notes for common tasks/issues related to typical embedded Linux systems.

How to write .wic image files to SD cards[edit | edit source]

Yocto build system can generate .wic image files. These files are usually written to SD cards to create bootable devices.

The simplest way to write such images to SD cards is to use the Balena Etcher tool, which is available for Linux, macOS, and Windows hosts. Using Etcher is straightforward, nonetheless many tutorials and examples are available on the Internet.

Advanced users can also use the well-known dd utility. This tool should be avoided unless the user knows what they are doing. If the target device is not specified properly, dd can wipe out all the data on a host's disk drive! For more details, see for instance this article.

Setting up a Yocto prebuilt package repository for apt[edit | edit source]

Occasionally, it is convenient to set up the target for installing .deb packages retrieved from a Yocto repository. The following example shows how to do that on an ORCA SOM-based target. The repository used is located at http://yocto.dave.eu/imx-5.4.70-2.3.0/. The prebuilt packages were generated by Yocto Zeus, which was used to create the distro running on the target as well.

Configuring the network subsystem[edit | edit source]

First of all, it is necessary to configure the target's network subsystem in order to access the Internet. In this example, a couple of systemd services are used for this purpose, namely systemd-networkd and systemd-resolved. They were configured by following these steps.

Disable the Connection Manager (ConnMan) sevice to prevent conflict issues:


Create the configuration file for the network interface of interest (eth1 in the example):


Start systemd-networkd and systemd-resolved:


Both services should be active:

root@orca:~# systemctl status systemd-networkd
* systemd-networkd.service - Network Service
   Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2021-12-15 21:34:32 UTC; 18s ago
     Docs: man:systemd-networkd.service(8)
 Main PID: 534 (systemd-network)
   Status: "Processing requests..."
    Tasks: 1
   Memory: 2.0M
   CGroup: /system.slice/systemd-networkd.service
           `-534 /lib/systemd/systemd-networkd

Dec 15 21:34:32 orca systemd[1]: Starting Network Service...
Dec 15 21:34:32 orca systemd-networkd[534]: Enumeration completed
Dec 15 21:34:32 orca systemd[1]: Started Network Service.
Dec 15 21:34:32 orca systemd-networkd[534]: eth1: IPv6 successfully enabled
Dec 15 21:34:32 orca systemd-networkd[534]: eth0: IPv6 successfully enabled
Dec 15 21:34:36 orca systemd-networkd[534]: eth1: Gained carrier
Dec 15 21:34:38 orca systemd-networkd[534]: eth1: Gained IPv6LL
Dec 15 21:34:50 orca systemd-networkd[534]: eth1: Configured
root@orca:~# systemctl status systemd-resolved
* systemd-resolved.service - Network Name Resolution
   Loaded: loaded (/lib/systemd/system/systemd-resolved.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2021-12-15 21:34:32 UTC; 6s ago
     Docs: man:systemd-resolved.service(8)
           https://www.freedesktop.org/wiki/Software/systemd/resolved
           https://www.freedesktop.org/wiki/Software/systemd/writing-network-configuration-managers
           https://www.freedesktop.org/wiki/Software/systemd/writing-resolver-clients
 Main PID: 542 (systemd-resolve)
   Status: "Processing requests..."
    Tasks: 1
   Memory: 1.4M
   CGroup: /system.slice/systemd-resolved.service
           `-542 /lib/systemd/systemd-resolved

Dec 15 21:34:32 orca systemd[1]: Starting Network Name Resolution...
Dec 15 21:34:32 orca systemd-resolved[542]: Positive Trust Anchors:
Dec 15 21:34:32 orca systemd-resolved[542]: . IN DS 19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5
Dec 15 21:34:32 orca systemd-resolved[542]: . IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
Dec 15 21:34:32 orca systemd-resolved[542]: Negative trust anchors: 10.in-addr.arpa 16.172.in-addr.arpa 17.172.in-addr.arpa 18.172.in-addr.arpa 19.172.in-addr.arpa>
Dec 15 21:34:32 orca systemd-resolved[542]: Using system hostname 'orca'.
Dec 15 21:34:32 orca systemd[1]: Started Network Name Resolution.

Configuring apt[edit | edit source]

Edit the file /etc/apt/apt.conf like this:

APT::Architecture "arm64";
APT::Get::AllowUnauthenticated "true";
Acquire::Languages "none";


Edit the file /etc/apt/sources.list.d/debian-10.list like this:

root@desk-mx8mp:~# cat /etc/apt/sources.list.d/debian-10.list
deb [trusted=yes] http://yocto.dave.eu/imx-5.4.70-2.3.0/ all/
deb [trusted=yes] http://yocto.dave.eu/imx-5.4.70-2.3.0/ aarch64/
deb [trusted=yes] http://yocto.dave.eu/imx-5.4.70-2.3.0/ aarch64-mx8mp/


Execute the following commands:

root@desk-mx8mp:~# rm -rf /var/lib/apt/lists/*
root@desk-mx8mp:~# apt-get clean
root@orca:~# apt-get update
0% [Working]
Ign:1 http://yocto.dave.eu/imx-5.4.70-2.3.0 all/ InRelease
Ign:2 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ InRelease
Ign:3 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64-mx8mp/ InRelease
Get:4 http://yocto.dave.eu/imx-5.4.70-2.3.0 all/ Release [1213 B]
Get:5 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ Release [1217 B]
Get:6 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64-mx8mp/ Release [1223 B]
Ign:7 http://yocto.dave.eu/imx-5.4.70-2.3.0 all/ Release.gpg
Ign:8 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ Release.gpg
Ign:9 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64-mx8mp/ Release.gpg
Get:10 http://yocto.dave.eu/imx-5.4.70-2.3.0 all/ Packages [146 kB]
Get:11 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ Packages [2848 kB]
Get:12 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64-mx8mp/ Packages [283 kB]
Fetched 3280 kB in 6s (545 kB/s)
Reading package lists... Done
root@orca:~# sed -i 's/\.\//aarch64\//g' /var/lib/apt/lists/yocto.dave.eu_imx-5.4.70-2.3.0_aarch64_Packages
root@orca:~# sed -i 's/\.\//all\//g' /var/lib/apt/lists/yocto.dave.eu_imx-5.4.70-2.3.0_all_Packages
root@orca:~# sed -i 's/\.\//aarch64-mx8mp\//g' /var/lib/apt/lists/yocto.dave.eu_imx-5.4.70-2.3.0_aarch64-mx8mp_Packages


The target is finally ready to install new packages. The following example shows for instance the installation of vim:

root@orca:~# sudo apt-get install vim
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  vim-common vim-help vim-syntax vim-tutor vim-vimrc
The following NEW packages will be installed:
  vim vim-common vim-help vim-syntax vim-tutor vim-vimrc
0 upgraded, 6 newly installed, 0 to remove and 20 not upgraded.
Need to get 6584 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ vim 8.1.1518-r0 [1051 kB]
Get:2 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ vim-common 8.1.1518-r0 [2314 kB]
Get:3 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ vim-help 8.1.1518-r0 [1757 kB]
Get:4 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ vim-syntax 8.1.1518-r0 [1049 kB]
Get:5 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ vim-tutor 8.1.1518-r0 [411 kB]
Get:6 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ vim-vimrc 8.1.1518-r0 [1596 B]
Fetched 6584 kB in 9s (660 kB/s)
Selecting previously unselected package vim.
(Reading database ... 71726 files and directories currently installed.)
Preparing to unpack .../vim_8.1.1518-r0_arm64.deb ...
Unpacking vim (8.1.1518-r0) ...
Selecting previously unselected package vim-common.
Preparing to unpack .../vim-common_8.1.1518-r0_arm64.deb ...
Unpacking vim-common (8.1.1518-r0) ...
Selecting previously unselected package vim-help.
Preparing to unpack .../vim-help_8.1.1518-r0_arm64.deb ...
Unpacking vim-help (8.1.1518-r0) ...
Selecting previously unselected package vim-syntax.
Preparing to unpack .../vim-syntax_8.1.1518-r0_arm64.deb ...
Unpacking vim-syntax (8.1.1518-r0) ...
Selecting previously unselected package vim-tutor.
Preparing to unpack .../vim-tutor_8.1.1518-r0_arm64.deb ...
Unpacking vim-tutor (8.1.1518-r0) ...
Selecting previously unselected package vim-vimrc.
Preparing to unpack .../vim-vimrc_8.1.1518-r0_arm64.deb ...
Unpacking vim-vimrc (8.1.1518-r0) ...
Setting up vim (8.1.1518-r0) ...
update-alternatives: Linking /bin/vi to /usr/bin/vim.vim
update-alternatives: Linking /usr/bin/vim to /usr/bin/vim.vim
update-alternatives: Linking /usr/bin/xxd to /usr/bin/xxd.vim
Setting up vim-common (8.1.1518-r0) ...
Setting up vim-help (8.1.1518-r0) ...
Setting up vim-syntax (8.1.1518-r0) ...
Setting up vim-tutor (8.1.1518-r0) ...
Setting up vim-vimrc (8.1.1518-r0) ...