Difference between revisions of "Embedded Linux tips and tricks"

From DAVE Developer's Wiki
Jump to: navigation, search
(Setting up a Yocto prebuilt package repository for apt)
Line 1: Line 1:
__FORCETOC__
+
Edit the file <code>/etc/apt/apt.conf</code> like this:
 
 
==Introduction==
 
This page provides examples and usage notes for common tasks/issues related to typical embedded Linux systems.
 
 
 
==How to write <code>.wic</code> image files to SD cards==
 
[https://www.yoctoproject.org/ Yocto] build system can generate [https://www.yoctoproject.org/docs/2.4.2/dev-manual/dev-manual.html#creating-partitioned-images-using-wic <code>.wic</code> 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 [https://www.balena.io/etcher/ 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 [https://en.wikipedia.org/wiki/Dd_(Unix) <code>dd</code>] utility. This tool should be avoided unless the user knows what they are doing. If the target device is not specified properly, <code>dd</code> can wipe out all the data on a host's disk drive! For more details, see for instance [https://opensource.com/article/18/7/how-use-dd-linux this article].
 
 
 
==Setting up a Yocto prebuilt package repository for <code>apt</code>==
 
Occasionally, it is convenient to set up the target for installing <code>.deb</code> packages retrieved from a Yocto repository. The following example shows how to do that on an [[ORCA_SOM|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===
 
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 <code>systemd</code> services are used for this purpose, namely <code>systemd-networkd</code> and <code>systemd-resolved</code>. They were configured by following these steps.
 
 
 
Disable the Connection Manager (ConnMan) sevice to prevent conflict issues:
 
 
<pre class="board-terminal">
 
<pre class="board-terminal">
 +
APT::Architecture "arm64";
 +
APT::Get::AllowUnauthenticated "true";
 +
Acquire::Languages "none";
 
</pre>
 
</pre>
  
Create the configuration file for the network interface of interest (<code>eth1</code> in the example):
+
Edit the file <code>/etc/apt/sources.list.d/debian-10.list</code> like this:
 
<pre class="board-terminal">
 
<pre class="board-terminal">
 +
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/
 
</pre>
 
</pre>
  
Start <code>systemd-networkd</code> and <code>systemd-resolved</code>:
+
 
 +
Execute the following commands:
 
<pre class="board-terminal">
 
<pre class="board-terminal">
 +
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
 
</pre>
 
</pre>
  
Both services should be active:
+
The target is finally ready to install new packages. The following example shows for instance the installation of <code>vim</code>:
 
<pre class="board-terminal">
 
<pre class="board-terminal">
root@orca:~# systemctl status systemd-networkd
+
root@orca:~# sudo apt-get install vim
* systemd-networkd.service - Network Service
+
Reading package lists... Done
  Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
+
Building dependency tree
  Active: active (running) since Wed 2021-12-15 21:34:32 UTC; 18s ago
+
Reading state information... Done
    Docs: man:systemd-networkd.service(8)
+
The following additional packages will be installed:
Main PID: 534 (systemd-network)
+
  vim-common vim-help vim-syntax vim-tutor vim-vimrc
  Status: "Processing requests..."
+
The following NEW packages will be installed:
    Tasks: 1
+
  vim vim-common vim-help vim-syntax vim-tutor vim-vimrc
  Memory: 2.0M
+
0 upgraded, 6 newly installed, 0 to remove and 20 not upgraded.
  CGroup: /system.slice/systemd-networkd.service
+
Need to get 6584 kB of archives.
          `-534 /lib/systemd/systemd-networkd
+
After this operation, 0 B of additional disk space will be used.
 
+
Do you want to continue? [Y/n] Y
Dec 15 21:34:32 orca systemd[1]: Starting Network Service...
+
Get:1 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ vim 8.1.1518-r0 [1051 kB]
Dec 15 21:34:32 orca systemd-networkd[534]: Enumeration completed
+
Get:2 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ vim-common 8.1.1518-r0 [2314 kB]
Dec 15 21:34:32 orca systemd[1]: Started Network Service.
+
Get:3 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ vim-help 8.1.1518-r0 [1757 kB]
Dec 15 21:34:32 orca systemd-networkd[534]: eth1: IPv6 successfully enabled
+
Get:4 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ vim-syntax 8.1.1518-r0 [1049 kB]
Dec 15 21:34:32 orca systemd-networkd[534]: eth0: IPv6 successfully enabled
+
Get:5 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ vim-tutor 8.1.1518-r0 [411 kB]
Dec 15 21:34:36 orca systemd-networkd[534]: eth1: Gained carrier
+
Get:6 http://yocto.dave.eu/imx-5.4.70-2.3.0 aarch64/ vim-vimrc 8.1.1518-r0 [1596 B]
Dec 15 21:34:38 orca systemd-networkd[534]: eth1: Gained IPv6LL
+
Fetched 6584 kB in 9s (660 kB/s)
Dec 15 21:34:50 orca systemd-networkd[534]: eth1: Configured
+
Selecting previously unselected package vim.
root@orca:~# systemctl status systemd-resolved
+
(Reading database ... 71726 files and directories currently installed.)
* systemd-resolved.service - Network Name Resolution
+
Preparing to unpack .../vim_8.1.1518-r0_arm64.deb ...
  Loaded: loaded (/lib/systemd/system/systemd-resolved.service; enabled; vendor preset: enabled)
+
Unpacking vim (8.1.1518-r0) ...
  Active: active (running) since Wed 2021-12-15 21:34:32 UTC; 6s ago
+
Selecting previously unselected package vim-common.
    Docs: man:systemd-resolved.service(8)
+
Preparing to unpack .../vim-common_8.1.1518-r0_arm64.deb ...
          https://www.freedesktop.org/wiki/Software/systemd/resolved
+
Unpacking vim-common (8.1.1518-r0) ...
          https://www.freedesktop.org/wiki/Software/systemd/writing-network-configuration-managers
+
Selecting previously unselected package vim-help.
          https://www.freedesktop.org/wiki/Software/systemd/writing-resolver-clients
+
Preparing to unpack .../vim-help_8.1.1518-r0_arm64.deb ...
Main PID: 542 (systemd-resolve)
+
Unpacking vim-help (8.1.1518-r0) ...
  Status: "Processing requests..."
+
Selecting previously unselected package vim-syntax.
    Tasks: 1
+
Preparing to unpack .../vim-syntax_8.1.1518-r0_arm64.deb ...
  Memory: 1.4M
+
Unpacking vim-syntax (8.1.1518-r0) ...
  CGroup: /system.slice/systemd-resolved.service
+
Selecting previously unselected package vim-tutor.
          `-542 /lib/systemd/systemd-resolved
+
Preparing to unpack .../vim-tutor_8.1.1518-r0_arm64.deb ...
 
+
Unpacking vim-tutor (8.1.1518-r0) ...
Dec 15 21:34:32 orca systemd[1]: Starting Network Name Resolution...
+
Selecting previously unselected package vim-vimrc.
Dec 15 21:34:32 orca systemd-resolved[542]: Positive Trust Anchors:
+
Preparing to unpack .../vim-vimrc_8.1.1518-r0_arm64.deb ...
Dec 15 21:34:32 orca systemd-resolved[542]: . IN DS 19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5
+
Unpacking vim-vimrc (8.1.1518-r0) ...
Dec 15 21:34:32 orca systemd-resolved[542]: . IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
+
Setting up vim (8.1.1518-r0) ...
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>
+
update-alternatives: Linking /bin/vi to /usr/bin/vim.vim
Dec 15 21:34:32 orca systemd-resolved[542]: Using system hostname 'orca'.
+
update-alternatives: Linking /usr/bin/vim to /usr/bin/vim.vim
Dec 15 21:34:32 orca systemd[1]: Started Network Name Resolution.
+
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) ...
 
</pre>
 
</pre>
===Configuring <code>apt</code>===
 

Revision as of 10:46, 14 March 2022

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) ...