Search icon CANCEL
Subscription
0
Cart icon
Your Cart (0 item)
Close icon
You have no products in your basket yet
Save more on your purchases! discount-offer-chevron-icon
Savings automatically calculated. No voucher code required.
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Newsletter Hub
Free Learning
Arrow right icon
timer SALE ENDS IN
0 Days
:
00 Hours
:
00 Minutes
:
00 Seconds
Embedded Linux Essentials Handbook
Embedded Linux Essentials Handbook

Embedded Linux Essentials Handbook: Build embedded Linux systems and real-world apps with Yocto, Buildroot, and RPi

Arrow left icon
Profile Icon Mohammed Billoo
Arrow right icon
$35.99 $44.99
Paperback Jan 2026 450 pages 1st Edition
eBook
$32.39 $35.99
Paperback
$35.99 $44.99
Subscription
Free Trial
Renews at $19.99p/m
Arrow left icon
Profile Icon Mohammed Billoo
Arrow right icon
$35.99 $44.99
Paperback Jan 2026 450 pages 1st Edition
eBook
$32.39 $35.99
Paperback
$35.99 $44.99
Subscription
Free Trial
Renews at $19.99p/m
eBook
$32.39 $35.99
Paperback
$35.99 $44.99
Subscription
Free Trial
Renews at $19.99p/m

What do you get with Print?

Product feature icon Instant access to your digital copy whilst your Print order is Shipped
Product feature icon Paperback book shipped to your preferred address
Product feature icon Redeem a companion digital copy on all Print orders
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
Product feature icon AI Assistant (beta) to help accelerate your learning
Modal Close icon
Payment Processing...
tick Completed

Shipping Address

Billing Address

Shipping Methods
Table of content icon View table of contents Preview book icon Preview Book

Embedded Linux Essentials Handbook

Exploring Embedded Linux’s Architecture and Its Use Cases

With the recent massive increase in processor density, embedded Linux is becoming an increasingly popular operating system (OS) for embedded systems. Silicon vendors have recognized this increased popularity and provide reference implementations of embedded Linux to run on their hardware.

Embedded Linux offers a paradigm different from those that traditional embedded software engineers are accustomed to, such as bare-metal development or using a real-time operating system (RTOS). Traditional embedded software development usually involves 2–3 steps to allow an embedded software engineer to get up and going. Typically, they connect a debugger to their board, write embedded software in an IDE provided by the silicon vendor, and use a debugger to flash and debug their application. However, the development workflow when working with an embedded Linux system is usually more complicated.

In this chapter, we will...

Technical requirements

This chapter assumes that you are familiar with and have hands-on experience with embedded software. You should also be familiar with relevant terminology, such as bare-metal and RTOS. You should also know about common peripherals used in embedded systems, such as GPIO, I2C, SPI, and UART.

Understanding embedded Linux use cases

In this section, we will learn when embedded Linux is applicable to embedded systems. As mentioned earlier, embedded Linux usually involves a different development strategy and workflow from other embedded software patterns. Thus, it’s important to understand the types of systems and applications that are ideal to use and when not to use them.

When to use embedded Linux

To best understand when to use embedded Linux, I’d like to present the following figure, which represents a block diagram of a scientific instrument that I worked on:

Figure 1.1 – Typical embedded Linux system

Figure 1.1 – Typical embedded Linux system

The system consists of the following relevant hardware elements:

  • A system-on-module (SoM), which contains a system-on-chip (SoC) along with other components to facilitate the operation of the SoC. For example, the SoM usually contains flash storage and RAM external to the SoC. The SoC, containing the CPU and other peripheral...

Understanding the hardware requirements

As embedded software engineers, we usually work in tandem with hardware engineers when designing and bringing up the custom hardware for our system. Typically, the hardware engineering team selects the components based on the system’s overall SWaP-C requirements. Once they have completed their initial selection, they work with us to confirm the selection and plan out design details, such as pin selection.

We must know whether the SoM/SoC selected by the hardware will support embedded Linux. The processor must be 32- or 64-bit. Extremely low-cost and low-power microcontrollers that use an 8- or 16-bit instruction set architecture generally won’t be able to run embedded Linux.

RAM and storage are also important requirements of an embedded Linux system. The minimum RAM requirement for embedded Linux is usually around 4 MB to 8 MB. However, for typical embedded applications requiring more robust networking, filesystem support...

Reviewing embedded Linux’s architecture

In this section, we will review the architecture of embedded Linux. Specifically, we will briefly learn about the different software components that are typically part of an embedded Linux system. In future chapters, we will discuss each element in more detail.

Architecture

There are four distinct software elements in most embedded Linux systems, as shown in the following figure.

Figure 1.4 – embedded Linux components

Figure 1.4 – embedded Linux components

Let us understand each of the components in detail:

  • The first software component of embedded Linux is the bootloader, shown as BLD in the preceding figure. The bootloader is responsible for initializing the CPU and the necessary peripherals before launching the kernel. This can include clock configurations and RAM, which the Linux kernel may need to run correctly. The bootloader is also responsible for configuring the kernel itself, such as passing arguments to the kernel during boot...

Booting embedded Linux

In this section, we will learn about the embedded Linux boot process. Due to the different software components of an embedded Linux system and their complex structure, the boot process requires a detailed review. By the end of this section, we will have a comprehensive understanding of the Linux boot process, from power-up to a console terminal.

From power-up to kernel loading

The following diagram shows one variant of the first stage of the embedded Linux boot process:

Figure 1.6 – Bootloader operations during boot

Figure 1.6 – Bootloader operations during boot

When power is applied to the processor, it usually launches an initial bootloader in the read-only portion of its memory. Depending on the SoC, the ROM-based bootloader jumps to a fixed location in flash. This location contains another bootloader, usually U-Boot.

Another variant of this process involves another bootloader, the secondary program loader (SPL), which runs after the ROM-based bootloader and before U-Boot...

Learning about U-Boot

U-Boot is the most popular bootloader used on embedded Linux systems. It borrows a good deal of source code from the Linux kernel. U-Boot and the Linux kernel have header files in common, and U-Boot supports loading different variants of the Linux kernel.

Let’s briefly dive into U-Boot’s source code since I firmly believe we can truly understand how any application works by understanding the source code behind the implementation. We can retrieve U-Boot’s source code by executing the following command:

$ git clone git://git.denx.de/u-boot.git

We can retrieve version 2024.07 by executing the following command:

$ git checkout tags/v2024.07

Finally, we can use the ls command to view the directory structure of U-Boot’s source code, which is shown here:

Figure 1.9 – U-Boot source tree (version 2024.07)

Figure 1.9 – U-Boot source tree (version 2024.07)

Let’s review some of the more interesting directories:

  • The api directory contains...

Reviewing the Linux kernal

The Linux kernel has over 30 million lines of code, and its development has spanned nearly 35 years.

We can retrieve version 6.9 of the Linux kernel by executing the following commands:

$ git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/
$ cd linux
$ git checkout tags/v6.9

The following figure shows the structure of the Linux kernel source code:

Figure 1.10 – Linux kernel code base

Figure 1.10 – Linux kernel code base

Similar to the previous section, we will review some of the more exciting directories:

  • The arch directory contains source code specific to a particular CPU and SoC. For example, arch/arm/boot contains source files relevant to the boot process of ARM CPUs, and arch/arm/boot/dts contains Devicetree files for platforms with ARM-based processors. arch/arm/crypto contains hardware-accelerated cryptographic implementations, and arch/arm/kernel contains hardware-specific implementations of certain kernel functions...

Understanding the Devicetree

The Devicetree allows the Linux kernel to learn about the hardware present on the system. The Linux kernel uses the information in the Devicetree to make the necessary function calls to initialize the underlying hardware.

The Devicetree is not specific to the Linux kernel. The Devicetree, abbreviated as DTS and more formally known as the Open Firmware Device Tree, is a construct initially conceived to describe hardware. It is both a data structure and a language, and is meant to be read by any OS, not just Linux, so that it can identify hardware during runtime and configure itself appropriately.

The Linux kernel uses the Devicetree for three main reasons:

  • The first is to identify the system. Ideally, the devicetree could consistently describe all system details. However, there are some nuanced differences across systems. Thus, the kernel must be able to identify the machine early in the boot process to execute code specific to the machine...

QEMU: simulating an embedded Linux system

While I firmly believe that embedded software engineers function best when they are running their software on real hardware, that may not always be the case. The examples in this book are intended to be executed on a Raspberry Pi 5. However, not everyone may have access to the Raspberry Pi 5 and may not be able to take advantage of the examples.

As an alternative, we can use the Quick Emulator (QEMU). QEMU is an open source virtualization application that allows us to run an embedded Linux system targeting an architecture or platform different from our development PC. We can use QEMU to simulate a good deal of the Raspberry Pi hardware to run our embedded Linux system. This will allow us to learn about the different components, even U-Boot, without having hardware. We will learn how to use QEMU to learn about the relevant component in future chapters.

Important note

Unfortunately, Ubuntu 24.04, the version of Ubuntu that...

Summary

In this chapter, we learned about the use cases where embedded Linux is appropriate for our system and the hardware requirements needed to run it adequately. Equally important, we learned when not to use embedded Linux. As we continue throughout the book, we will dive deeper into the subsystems covered in this chapter. Towards the middle of this book, we will see examples of applications that are perfectly suited for embedded Linux. As we learn about these applications in Chapter 9, 10, and 11, it’s important to refer to the lessons learned in this chapter to understand which elements are relevant for embedded Linux. We also learned about and built QEMU to simulate an embedded Linux system in case we don’t have access to the hardware used in the rest of the book, due to cost and availability in certain regions.

In the next chapter, we will learn about U-Boot.

Get this book’s PDF version and more

Scan the QR code (or go to packtpub.com/unlock...

Left arrow icon Right arrow icon
Download code icon Download Code

Key benefits

  • Learn by coding with real examples on Raspberry Pi 5 and QEMU (for those who don’t have access to hardware)
  • Get introduced to Rust and see how it fits within an embedded Linux system
  • Use Qt, a modern GUI framework, to create applications like a scientific instrument with live temperature sensor data
  • Purchase of the print or Kindle book includes a free PDF eBook

Description

Embedded Linux now powers everything from IoT devices to industrial systems, making it essential for embedded software engineers to be skilled at customizing, deploying, and developing for these platforms. This hands-on guide walks you through the core concepts of Embedded Linux using practical, real-world examples on Raspberry Pi 4 and 5. For those without access to hardware, it also demonstrates how to simulate embedded Linux systems using QEMU. This book contains code samples that you can follow along and build three real-world projects: a Python web-based dashboard that retrieves and displays data from a temperature sensor and two GUI applications demonstrating how to use the Qt framework on Embedded Linux using two different development paradigms. You’ll also step into advanced territory with Linux kernel debugging techniques and discover how to harness eBPF, building the experience employers want and the confidence to tackle complex embedded challenges. By the end of this book, you'll have a solid grasp of Embedded Linux development and the skills to build and deploy production-ready, modern embedded applications.

Who is this book for?

This book is for beginner to intermediate embedded systems engineers, software developers, and enthusiasts seeking hands-on experience with Embedded Linux. It’s ideal for those eager to build real-world projects using accessible hardware like the Raspberry Pi. To get the most out of this book, you should understand basic embedded systems concepts, be comfortable writing simple programs in C, C++, or Python, and feel confident using the terminal and working with basic hardware.

What you will learn

  • Understand the architecture, components, and use cases of embedded Linux systems
  • Debug and secure the Linux kernel and modern tools like eBPF
  • Build custom embedded Linux images using Yocto and Buildroot
  • Simulate custom embedded Linux images using QEMU
  • Flash, boot, and validate images on Raspberry Pi hardware
  • Develop, deploy, and debug applications using C/C++, Python, and Qt
  • Automate image and application builds with Docker and GitHub Actions
  • Apply your skills through hands-on projects such as web interfaces and complex GUI-based instruments
Estimated delivery fee Deliver to Russia

Economy delivery 10 - 13 business days

$6.95

Premium delivery 6 - 9 business days

$21.95
(Includes tracking information)

Product Details

Country selected
Publication date, Length, Edition, Language, ISBN-13
Publication date : Jan 30, 2026
Length: 450 pages
Edition : 1st
Language : English
ISBN-13 : 9781835469309
Category :
Languages :
Tools :

What do you get with Print?

Product feature icon Instant access to your digital copy whilst your Print order is Shipped
Product feature icon Paperback book shipped to your preferred address
Product feature icon Redeem a companion digital copy on all Print orders
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
Product feature icon AI Assistant (beta) to help accelerate your learning
Modal Close icon
Payment Processing...
tick Completed

Shipping Address

Billing Address

Shipping Methods
Estimated delivery fee Deliver to Russia

Economy delivery 10 - 13 business days

$6.95

Premium delivery 6 - 9 business days

$21.95
(Includes tracking information)

Product Details

Publication date : Jan 30, 2026
Length: 450 pages
Edition : 1st
Language : English
ISBN-13 : 9781835469309
Category :
Languages :
Tools :

Packt Subscriptions

See our plans and pricing
Modal Close icon
$19.99 billed monthly
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Simple pricing, no contract
$199.99 billed annually
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just $5 each
Feature tick icon Exclusive print discounts
$279.99 billed in 18 months
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just $5 each
Feature tick icon Exclusive print discounts

Table of Contents

23 Chapters
Part I: Getting Started with Embedded Linux Chevron down icon Chevron up icon
Exploring Embedded Linux’s Architecture and Its Use Cases Chevron down icon Chevron up icon
Learning About U-Boot Chevron down icon Chevron up icon
Navigating the Linux Kernel Chevron down icon Chevron up icon
Describing Hardware Using the Devicetree Chevron down icon Chevron up icon
Part II: Building an Embedded Linux Image Chevron down icon Chevron up icon
Exploring Frameworks to Build an Image Chevron down icon Chevron up icon
Building an Image Using the Yocto Project Chevron down icon Chevron up icon
Building an Image Using Buildroot Chevron down icon Chevron up icon
Part III: Developing Applications Chevron down icon Chevron up icon
Building, Debugging, and Launching Applications on Startup Chevron down icon Chevron up icon
Project 1: Using Python to Build a Web Server to Display Sensor Data Chevron down icon Chevron up icon
Project 2: Using Qt to Build a Scientific Instrument Chevron down icon Chevron up icon
Project 3: Using Qt to Build a Medical Device Chevron down icon Chevron up icon
Part IV: Advanced Topics, Implementing CI/CD, Best Practices, and Looking Ahead Chevron down icon Chevron up icon
Debugging the Linux Kernel Chevron down icon Chevron up icon
Securing Code Execution with eBPF Chevron down icon Chevron up icon
Rust in Embedded Linux: The Kernel and Applications Chevron down icon Chevron up icon
Implementing Continuous Integration/Continuous Delivery (CI/CD) Chevron down icon Chevron up icon
Looking to the Future Chevron down icon Chevron up icon
Unlock Your Exclusive Benefits Chevron down icon Chevron up icon
Other Books You May Enjoy Chevron down icon Chevron up icon
Index Chevron down icon Chevron up icon
Get free access to Packt library with over 7500+ books and video courses for 7 days!
Start Free Trial

FAQs

What is the digital copy I get with my Print order? Chevron down icon Chevron up icon

When you buy any Print edition of our Books, you can redeem (for free) the eBook edition of the Print Book you’ve purchased. This gives you instant access to your book when you make an order via PDF, EPUB or our online Reader experience.

What is the delivery time and cost of print book? Chevron down icon Chevron up icon

Shipping Details

USA:

'

Economy: Delivery to most addresses in the US within 10-15 business days

Premium: Trackable Delivery to most addresses in the US within 3-8 business days

UK:

Economy: Delivery to most addresses in the U.K. within 7-9 business days.
Shipments are not trackable

Premium: Trackable delivery to most addresses in the U.K. within 3-4 business days!
Add one extra business day for deliveries to Northern Ireland and Scottish Highlands and islands

EU:

Premium: Trackable delivery to most EU destinations within 4-9 business days.

Australia:

Economy: Can deliver to P. O. Boxes and private residences.
Trackable service with delivery to addresses in Australia only.
Delivery time ranges from 7-9 business days for VIC and 8-10 business days for Interstate metro
Delivery time is up to 15 business days for remote areas of WA, NT & QLD.

Premium: Delivery to addresses in Australia only
Trackable delivery to most P. O. Boxes and private residences in Australia within 4-5 days based on the distance to a destination following dispatch.

India:

Premium: Delivery to most Indian addresses within 5-6 business days

Rest of the World:

Premium: Countries in the American continent: Trackable delivery to most countries within 4-7 business days

Asia:

Premium: Delivery to most Asian addresses within 5-9 business days

Disclaimer:
All orders received before 5 PM U.K time would start printing from the next business day. So the estimated delivery times start from the next day as well. Orders received after 5 PM U.K time (in our internal systems) on a business day or anytime on the weekend will begin printing the second to next business day. For example, an order placed at 11 AM today will begin printing tomorrow, whereas an order placed at 9 PM tonight will begin printing the day after tomorrow.


Unfortunately, due to several restrictions, we are unable to ship to the following countries:

  1. Afghanistan
  2. American Samoa
  3. Belarus
  4. Brunei Darussalam
  5. Central African Republic
  6. The Democratic Republic of Congo
  7. Eritrea
  8. Guinea-bissau
  9. Iran
  10. Lebanon
  11. Libiya Arab Jamahriya
  12. Somalia
  13. Sudan
  14. Russian Federation
  15. Syrian Arab Republic
  16. Ukraine
  17. Venezuela
What is custom duty/charge? Chevron down icon Chevron up icon

Customs duty are charges levied on goods when they cross international borders. It is a tax that is imposed on imported goods. These duties are charged by special authorities and bodies created by local governments and are meant to protect local industries, economies, and businesses.

Do I have to pay customs charges for the print book order? Chevron down icon Chevron up icon

The orders shipped to the countries that are listed under EU27 will not bear custom charges. They are paid by Packt as part of the order.

List of EU27 countries: www.gov.uk/eu-eea:

A custom duty or localized taxes may be applicable on the shipment and would be charged by the recipient country outside of the EU27 which should be paid by the customer and these duties are not included in the shipping charges been charged on the order.

How do I know my custom duty charges? Chevron down icon Chevron up icon

The amount of duty payable varies greatly depending on the imported goods, the country of origin and several other factors like the total invoice amount or dimensions like weight, and other such criteria applicable in your country.

For example:

  • If you live in Mexico, and the declared value of your ordered items is over $ 50, for you to receive a package, you will have to pay additional import tax of 19% which will be $ 9.50 to the courier service.
  • Whereas if you live in Turkey, and the declared value of your ordered items is over € 22, for you to receive a package, you will have to pay additional import tax of 18% which will be € 3.96 to the courier service.
How can I cancel my order? Chevron down icon Chevron up icon

Cancellation Policy for Published Printed Books:

You can cancel any order within 1 hour of placing the order. Simply contact customercare@packt.com with your order details or payment transaction id. If your order has already started the shipment process, we will do our best to stop it. However, if it is already on the way to you then when you receive it, you can contact us at customercare@packt.com using the returns and refund process.

Please understand that Packt Publishing cannot provide refunds or cancel any order except for the cases described in our Return Policy (i.e. Packt Publishing agrees to replace your printed book because it arrives damaged or material defect in book), Packt Publishing will not accept returns.

What is your returns and refunds policy? Chevron down icon Chevron up icon

Return Policy:

We want you to be happy with your purchase from Packtpub.com. We will not hassle you with returning print books to us. If the print book you receive from us is incorrect, damaged, doesn't work or is unacceptably late, please contact Customer Relations Team on customercare@packt.com with the order number and issue details as explained below:

  1. If you ordered (eBook, Video or Print Book) incorrectly or accidentally, please contact Customer Relations Team on customercare@packt.com within one hour of placing the order and we will replace/refund you the item cost.
  2. Sadly, if your eBook or Video file is faulty or a fault occurs during the eBook or Video being made available to you, i.e. during download then you should contact Customer Relations Team within 14 days of purchase on customercare@packt.com who will be able to resolve this issue for you.
  3. You will have a choice of replacement or refund of the problem items.(damaged, defective or incorrect)
  4. Once Customer Care Team confirms that you will be refunded, you should receive the refund within 10 to 12 working days.
  5. If you are only requesting a refund of one book from a multiple order, then we will refund you the appropriate single item.
  6. Where the items were shipped under a free shipping offer, there will be no shipping costs to refund.

On the off chance your printed book arrives damaged, with book material defect, contact our Customer Relation Team on customercare@packt.com within 14 days of receipt of the book with appropriate evidence of damage and we will work with you to secure a replacement copy, if necessary. Please note that each printed book you order from us is individually made by Packt's professional book-printing partner which is on a print-on-demand basis.

What tax is charged? Chevron down icon Chevron up icon

Currently, no tax is charged on the purchase of any print book (subject to change based on the laws and regulations). A localized VAT fee is charged only to our European and UK customers on eBooks, Video and subscriptions that they buy. GST is charged to Indian customers for eBooks and video purchases.

What payment methods can I use? Chevron down icon Chevron up icon

You can pay with the following card types:

  1. Visa Debit
  2. Visa Credit
  3. MasterCard
  4. PayPal
What is the delivery time and cost of print books? Chevron down icon Chevron up icon

Shipping Details

USA:

'

Economy: Delivery to most addresses in the US within 10-15 business days

Premium: Trackable Delivery to most addresses in the US within 3-8 business days

UK:

Economy: Delivery to most addresses in the U.K. within 7-9 business days.
Shipments are not trackable

Premium: Trackable delivery to most addresses in the U.K. within 3-4 business days!
Add one extra business day for deliveries to Northern Ireland and Scottish Highlands and islands

EU:

Premium: Trackable delivery to most EU destinations within 4-9 business days.

Australia:

Economy: Can deliver to P. O. Boxes and private residences.
Trackable service with delivery to addresses in Australia only.
Delivery time ranges from 7-9 business days for VIC and 8-10 business days for Interstate metro
Delivery time is up to 15 business days for remote areas of WA, NT & QLD.

Premium: Delivery to addresses in Australia only
Trackable delivery to most P. O. Boxes and private residences in Australia within 4-5 days based on the distance to a destination following dispatch.

India:

Premium: Delivery to most Indian addresses within 5-6 business days

Rest of the World:

Premium: Countries in the American continent: Trackable delivery to most countries within 4-7 business days

Asia:

Premium: Delivery to most Asian addresses within 5-9 business days

Disclaimer:
All orders received before 5 PM U.K time would start printing from the next business day. So the estimated delivery times start from the next day as well. Orders received after 5 PM U.K time (in our internal systems) on a business day or anytime on the weekend will begin printing the second to next business day. For example, an order placed at 11 AM today will begin printing tomorrow, whereas an order placed at 9 PM tonight will begin printing the day after tomorrow.


Unfortunately, due to several restrictions, we are unable to ship to the following countries:

  1. Afghanistan
  2. American Samoa
  3. Belarus
  4. Brunei Darussalam
  5. Central African Republic
  6. The Democratic Republic of Congo
  7. Eritrea
  8. Guinea-bissau
  9. Iran
  10. Lebanon
  11. Libiya Arab Jamahriya
  12. Somalia
  13. Sudan
  14. Russian Federation
  15. Syrian Arab Republic
  16. Ukraine
  17. Venezuela
Modal Close icon
Modal Close icon