Skip to content

Commit bae0181

Browse files
committed
User manual update - OS image section update compact, x8 fundamentals and flashing - partial
1 parent 8b4f0ca commit bae0181

File tree

6 files changed

+101
-92
lines changed

6 files changed

+101
-92
lines changed

content/hardware/04.pro/boards/portenta-x8/tutorials/01.user-manual/content.md

Lines changed: 4 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -478,100 +478,13 @@ More information about Waves can be found in the official Foundries documentatio
478478

479479
### Update Using `uuu` Tool
480480

481-
An alternative method to updating the Portenta X8 with the latest OS image is to use the `uuu` command (`uuu_mac` command in case you use MAC OS).
481+
An alternative method to update the Portenta X8 with the latest OS image is to use the `uuu` tool (or `uuu_mac` for macOS). This approach is particularly useful for users who have built a custom image or prefer a manual update process. The image files can be downloaded from the [Arduino repository](https://downloads.arduino.cc/portentax8image/image-latest.tar.gz) and extracted into a specific directory.
482482

483-
This flash method is helpful if you have built a custom image or desire a more manual approach. Nonetheless, you will need to prepare the OS image files, and the board must be set to programming mode for this flashing process.
483+
Depending on the carrier being used (e.g., Max Carrier, Breakout, Hat, or Mid Carrier), DIP switch settings must be adjusted to enter programming mode or specific commands can be executed via ADB for a barebone setup. Once the board is in programming mode, you can navigate to the extracted image files and run the `uuu full_image.uuu` command to begin the flashing process.
484484

485-
***To learn more about creating a custom image for Portenta X8, please check out [How To Build a Custom Image for Your Portenta X8](https://docs.arduino.cc/tutorials/portenta-x8/image-building) tutorial.***
485+
If not using a carrier, ensure the tool is running before cycling the power on the Portenta X8. Upon successful completion, reset the DIP switches or recycle the power to confirm the update.
486486

487-
You will need to download the latest OS image file via [Arduino Download repository](https://downloads.arduino.cc/portentax8image/image-latest.tar.gz) and extract the files in a desired directory.
488-
489-
The structure should be similar as follows after also extracting `mfgtool-files-portenta-x8.tar.gz` and `lmp-partner-arduino-image-portenta-x8.wic.gz` that came within the original compressed file:
490-
491-
```
492-
Unzipped folder
493-
├── mfgtool-files-portenta-x8/
494-
├── imx-boot-portenta-x8
495-
├── lmp-partner-arduino-image-portenta-x8.wic
496-
├── lmp-partner-arduino-image-portenta-x8.wic.gz **(Compressed)**
497-
├── mfgtool-files-portenta-x8.tar.gz **(Compressed)**
498-
├── sit-portenta-x8.bin
499-
└── u-boot-portenta-x8.itb
500-
```
501-
502-
#### Set Flashing Mode with Carrier
503-
504-
The Portenta X8 can be set into programming mode using a carrier platform, such as Max Carrier, Breakout, or Hat Carrier, which provides DIP switches for convenient access, or a few more lines of command with barebone Portenta X8 via ADB.
505-
506-
If you plan to use a carrier, please check the carrier's configuration to be paired with Portenta X8.
507-
508-
For the **Portenta Max Carrier**, set the `BOOT SEL` and `BOOT` DIP switches to the ON position as depicted in the figure:
509-
510-
![Portenta Max Carrier DIP switches](assets/max-carrier-dip-switches.png)
511-
512-
Upon executing the `uuu` tool and ensuring the DIP switches are correctly configured, the Portenta Max Carrier will automatically start the flashing operation for the Portenta X8.
513-
514-
For the **Portenta Breakout**, the `BT_SEL` and `BOOT` DIP switches should be set to the ON position, as illustrated in the figure:
515-
516-
![Portenta Breakout DIP switches](assets/breakout-dip-switches.png)
517-
518-
After running the `uuu` tool, perform a long press on the `ON` button of the Portenta Breakout to begin the flashing process. This action enables the tool to identify and connect with the device, continuing with the flashing operation.
519-
520-
For the **Portenta Hat Carrier**, power cycle the Portenta X8, press and hold the `BOOT` button within the first 2 - 3 seconds after powering on, then press the Reset button, and release both buttons to start the flash process.
521-
522-
You can also turn the `BTSEL` DIP switch to the ON position and power cycle the Portenta X8 to start flash process, as depicted in the figure below:
523-
524-
![Portenta Hat Carrier DIP switches](assets/hatCarrier-dip-switches.png)
525-
526-
The `ETH CENTER TAP` DIP switch position does not affect the flashing mode state for the Portenta Hat Carrier.
527-
528-
For the **Portenta Mid Carrier**, the `BOOT SEL` DIP switch should be set to the ON position, as shown in the image below:
529-
530-
![Portenta Mid Carrier DIP switches](assets/midCarrier-dip-switches.png)
531-
532-
Like with the Portenta Max Carrier, the flashing process will commence once the `uuu` tool is run and starts searching for the device.
533-
534-
#### Set Flashing Mode without Carrier
535-
536-
If you decide to flash Portenta X8 without using the carrier, use the following command sequence inside the Portenta X8's terminal via ADB while you are in the root environment with root permission to reset Portenta X8's bootloader sector:
537-
538-
```bash
539-
echo 0 > /sys/block/mmcblk2boot0/force_ro
540-
```
541-
542-
```bash
543-
dd if=/dev/zero of=/dev/mmcblk2boot0 bs=1024 count=4096 && sync
544-
```
545-
546-
```bash
547-
echo 0 > /sys/block/mmcblk2boot1/force_ro
548-
```
549-
550-
```bash
551-
dd if=/dev/zero of=/dev/mmcblk2boot1 bs=1024 count=4096 && sync
552-
```
553-
554-
#### Flashing the Portenta X8 Using `uuu` Command
555-
556-
Now that we have the Portenta X8 in programming mode, we need to flash the OS image. Within the previously described OS image file structure, you need to navigate to the `mfgtool-files-portenta-x8` directory. You will find the `uuu` executable and its components inside the directory. Here, you will open a terminal and run the following command:
557-
558-
```bash
559-
uuu full_image.uuu
560-
```
561-
562-
If Portenta X8 is to be flashed without a carrier, you will want to execute the command **first** to let it search for the board. Subsequently, you will recycle the power source for Portenta X8 by unplugging and reconnecting the USB-C® cable.
563-
564-
It will let the board begin its boot sequence, allowing it to enter programming mode as set with the defaulted internal bootloader. When the active `uuu` instance detects board has entered programming mode, it will continue with its flashing process.
565-
566-
Once the flashing operation finishes, you will be greeted with a similar message in the terminal as the following figure:
567-
568-
![Successful uuu flashing operation](assets/uuu-flashing-success.png)
569-
570-
This applies to both flashing scenarios. If you have the carrier attached and decide to continue using docked with the platform, you must reset the DIP switch positions for either `BOOT SEL`, `BTSEL`, or `BT_SEL` and `BOOT` to OFF state. Reconnect the board and wait approximately 10 seconds until the Blue LED blinks, confirming the boot was successful.
571-
572-
In case the Portenta X8 was flashed barebone, you will need to recycle the power and should be ready with the latest OS image.
573-
574-
***For more in-depth tutorial for flashing Portenta X8, please check out [How To Flash Your Portenta X8](https://docs.arduino.cc/tutorials/portenta-x8/image-flashing) tutorial.***
487+
***For a detailed guide, refer to the [Flashing Portenta X8 tutorial](https://docs.arduino.cc/tutorials/portenta-x8/image-flashing).***
575488

576489
## First Use Of Your Portenta X8
577490

56.2 KB
Loading

content/hardware/04.pro/boards/portenta-x8/tutorials/02.x8-fundamentals/portenta-x8-fundamentals.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,68 @@ If you need help setting up your board, please have a look at the [Portenta X8 U
3131

3232
## Embedded Linux
3333

34+
The term **Embedded Linux** refers to embedded systems that use the Linux kernel and other open-source components. Linux has become a leading choice for operating systems on embedded devices due to its open-source nature and the fact that it is freely available.
35+
36+
An **Embedded Linux** system is composed of the following items:
37+
38+
* **Bootloader:** The first program executed right after powering the board. It has the task of initializing the hardware and the operating system, loading the **device tree** and its configuration file into the RAM.
39+
40+
The **device tree** is a database containing information on the hardware components of the board, which is used to forward information from the bootloader to the Kernel at the hardware level.
41+
42+
* **Linux Kernel:** The core of the operating system. It deals with resource management, scheduling, hardware access and all the low-level operations the user does not want to worry about.
43+
44+
In particular, the Linux Kernel manages all the hardware resources, like CPU, memory, and I/Os, and it provides a set of APIs that abstracts those resources, allowing the user applications and libraries to be easily deployed.
45+
46+
* **Root Filesystem:** It contains all system programs and utilities, configurations and user data (roughly speaking, the equivalent of the `C:\` drive on Windows). The Root Filesystem can be mounted from a USB stick, SD card or flash memory, being the case of the Portenta X8.
47+
48+
![Embedded Linux Start-Up](assets/Embedded_Linux_Start.png "Embedded Linux Start-Up")
49+
3450
There are a few things to consider to work in an embedded Linux environment. When approaching Linux-based embedded devices software solutions, you need to provide a base distribution, a mechanism to update it, and some applications that can run on the board. The X8 uses a Linux distribution built with the Yocto Project® as the base platform, with applications that are installed and packaged as confined containers.
3551

3652
A readily-available Linux distribution that packages everything seems most attractive for end users but you need to find a distribution that implements the function that you need. If you need to tweak them, you may end up in a mess of patches on the top of someone else's build system. On the other hand, a generic distribution has some problems since installing software over it may pollute the original system and cause issues when updating the base platform. For example, if you install a new application, the older one no longer works.
3753

3854
In addition, you have to implement lots of things like cybersecurity functions and system updates. Finally, your solution may rely on a too "generic" distribution, with tons of software you don't need. So you may end up removing a lot of software on the target and turning features on and off. Until you break the configuration or need to update the system and begin restarting with a new fresh image, consequently beginning everything from zero again.
3955

56+
### Linux Yocto Distribution
57+
58+
To install a Linux operating system on a board, you need to decide which packages, applications, and libraries you want to use, so basically, you need to decide which Linux distribution better suits your needs.
59+
60+
As a matter of fact, a Linux distribution is an operating system consisting of the Linux Kernel, GNU tools, additional software, and a package manager. It may also include a display server and a desktop environment for using it as a regular desktop operating system. More than 300 Linux distributions are available on the market, including Ubuntu, Debian, Fedora, Red Hat, etc.
61+
62+
Portenta X8 is running a [Yocto Linux distribution](https://www.yoctoproject.org/). Yocto is built based on [OpenEmbedded (OE)](http://www.openembedded.org/wiki/Main_Page), which uses [BitBake](https://docs.yoctoproject.org/bitbake/) build to generate a full Linux image. BitBake and OE are combined to form the Yocto reference project, historically called [Poky](https://www.yoctoproject.org/software-item/poky/).
63+
64+
In addition, a full metadata selection is defined to select which tasks to perform. The following metadata is used in a Yocto project:
65+
66+
* **Recipes:** They deliver information regarding each package (i.e. author, homepage, license, etc.), recipe version, existing dependencies, source code location and how to retrieve it, configuration settings, and target path where the created package will be saved. Files with the `.bb` extension are recipe files.
67+
68+
* **Configuration file:** They contain metadata that define how to perform the build process. These files (with the `.conf` file extension) determine the configuration options for the machine, the compiler, the distribution, and general and user configurations. They allow you to set the target where you want to create the image and where you want to save the downloaded sources and other particular configurations.
69+
70+
* **Classes:** Class files with the extension `.bbclass` contain common functionalities that can be shared between various recipes within the distribution. When a recipe inherits a class, it also inherits its settings and functions.
71+
72+
* **File append:** With the extension `.bbappend`, File append extends or overwrites information for an existing recipe.
73+
74+
OpenEmbedded Core contains a recipe layer, classes, and associated files common to all OE-based systems, including Yocto. This metadata set is maintained by both the Yocto project and the OpenEmbedded project.
75+
76+
The Yocto distribution is a development environment that comprises various functional areas, as shown in the figure below.
77+
78+
![Yocto Distribution Architecture](assets/Yocto_Architecture.png "Yocto Distribution Architecture")
79+
80+
* **Layer:** The layers allow you to separate metadata by differentiating them according to software, hardware information, metadata concerning distribution, and adopted policies. Within each layer are the `conf` (with layer-specific configuration files) and `recipes-` directories. To illustrate how to use layers to maintain modularity, consider the example of recipes to support a specific target, which usually resides in a BSP layer.
81+
82+
In this scenario, those recipes should be isolated from other recipes and supporting metadata, like a new Graphical User Interface (GUI). You would then have a couple of layers: one for the machine's configurations and one for the GUI environment. This would allow a specific machine to present special GUI features within the BSP layer without affecting the recipes inside the GUI layer itself. All of this is possible via an append file.
83+
84+
* **Source file:** To cross-compile any software module, be it a distribution or an application, we must have access to various source files. The latter can be sourced from three different upstream areas: Upstream Project Releases (archived at a specific location), Local Projects (available at a certain local path), and Source Control Managers (like GitHub).
85+
86+
* **Package feeds:** This area contains packages generated by the build system, which will be used later to generate operating system images or Software Development Kits (SDKs).
87+
88+
* **Build System:** The Build System macroblock is the heart of the Yocto distribution. It contains various processes controlled by BitBake, a tool written in Python language. The Build System parses the metadata, extracting the list of tasks to be performed. BitBake checks the software build process by using the recipes. It writes a *stamp* file in the Build Directory for each successfully completed task.
89+
90+
* **Images:** They are compressed forms of the Root Filesystem, ready to be installed on the target. BitBake releases multiple lists of images saved into the Build Directory, including *kernel-image*, *root-filesystem-image*, and *bootloaders*.
91+
92+
* **SDK:** From the SDK generation process you can get a standard SDK or an extensible SDK. In both cases, the output is an installation script of the SDK, which installs a cross-development toolchain, a set of libraries, and headers files, generating an environment setup script. The toolchain can be considered as part of the build system. In contrast, libraries and headers are target parts since they are generated for the target hardware.
93+
94+
***If you want to learn more about how to work with Yocto Distribution on your Portenta X8, please check the [Portenta X8's user manual](https://docs.arduino.cc/tutorials/portenta-x8/user-manual/#working-with-linux) of this user manual.***
95+
4096
### Benefits of Foundries.io
4197

4298
Foundries.io™ created their custom distribution based on Yocto with minimal software installed, by default implementing top-level cybersecurity features like OP-TEE and OSTREE that makes their solution ideal for professional applications.
36.7 KB
Loading
35.5 KB
Loading

0 commit comments

Comments
 (0)