# Raspberry Pi 4 Model B + Raspbian

**URL:** <https://hub.mender.io/t/raspberry-pi-4-model-b-raspbian/1312>\
**Category:** Debian family\
**Created:** [December 2, 2019, 5:24pm UTC](https://hub.mender.io/t/raspberry-pi-4-model-b-raspbian/1312 "2019-12-02T17:24:30Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![mirzak](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/mirzak/32/2056_2.png) [@mirzak](https://hub.mender.io/u/mirzak)\
**Post date:** [December 2, 2019, 5:24pm UTC](https://hub.mender.io/t/raspberry-pi-4-model-b-raspbian/1312/1 "2019-12-02T17:24:30Z")

</div>

# Board description

The speed and performance of the new Raspberry Pi 4 is a step up from earlier models. For the first time, we’ve built a complete desktop experience. Whether you’re editing documents, browsing the web with a bunch of tabs open, juggling spreadsheets or drafting a presentation, you’ll find the experience smooth and very recognisable — but on a smaller, more energy-efficient and much more cost-effective machine.

![](https://www.raspberrypi.org/homepage-9df4b/static/pi4-labelled-99c2e8935bb3cfdb27d23f634ea98a7e.png)

URL: [https://www.raspberrypi.org/products/raspberry-pi-4-model-b](https://www.raspberrypi.org/products/raspberry-pi-4-model-b)  
Wiki: [https://elinux.org/RPi\_Hub](https://elinux.org/RPi_Hub?target=_blank)

# Test results

The Raspberry Pi OS releases in the table below have been tested by the Mender community. Please update it if you have tested this integration on other [Raspberry Pi OS releases](https://downloads.raspberrypi.org/?target=_blank):

| Rasbian | Build | Runtime |
| --- | --- | --- |
| Raspberry Pi OS Bullseye 2022-01-28 | :test_works: | :test_works: |
| Raspberry Pi OS Bullseye 2021-10-30 | :test_works: | :test_works: |
| Raspberry Pi OS Buster 2021-01-11 | :test_works: | :test_works: |
| Raspberry Pi OS Buster 2020-05-27 | :test_works: | :test_works: |
| Raspbian Buster 2019-06-20 | :test_works: | :test_works: |
| Raspbian Buster 2019-09-26 | :test_works: | :test_works: |

**Build** Means that the image generation completes without errors and outputs images.  
**Runtime** Means that Mender has been verified to work on the board.

# Getting started

# Image downloads

The Raspberry Pi OS images in the table below come with Mender integrated.

| Release | Size (uncompressed) | Size (compressed) | SHA-256 |
| --- | --- | --- | --- |
| [Raspberry Pi OS Bullseye Lite 2022-01-28](https://d4o6e0uccgv40.cloudfront.net/2022-01-28-raspios-bullseye-armhf-lite/arm/2022-01-28-raspios-bullseye-armhf-lite-raspberrypi4-mender-convert-3.0.0.img.xz) | 7.4 GB | 578 MB | 829aca25bc8725ca98d43737bd708aaa7fe838cd8944c0ea408fb17ac3f42313 |
| [Raspberry Pi OS Bullseye Lite 2021-10-30](https://d4o6e0uccgv40.cloudfront.net/2021-10-30-raspios-bullseye-armhf-lite/arm/2021-10-30-raspios-bullseye-armhf-lite-raspberrypi4-mender-convert-2.6.1.img.xz) | 7.4 GB | 547 MB | 829aca25bc8725ca98d43737bd708aaa7fe838cd8944c0ea408fb17ac3f42313 |
| [Raspberry Pi OS Buster Lite 2020-05-27](https://d4o6e0uccgv40.cloudfront.net/2020-05-27-raspios-buster-lite-armhf/arm/2020-05-27-raspios-buster-lite-armhf-raspberrypi4-mender-2.5.0.img.xz) | 7.4 GB | 548 MB | f8c5fbe0aaa45d313d0cfd692bf9bc1453ca4f2b42d1b8dd5d020999abe707d0 |

If you are starting with Mender, please follow the [Mender quickstart](https://docs.mender.io/getting-started/quickstart-with-raspberry-pi) first.

These images are created by using an official [Raspberry Pi OS release](https://downloads.raspberrypi.org) and integrating them by following the instructions in the rest of this post.

# Convert your own image

To save time, use a prebuilt image and follow the [Mender quickstart](https://docs.mender.io/getting-started/quickstart-with-raspberry-pi). The rest of this post explains how to build your own customized Raspberry Pi OS image with Mender integrated.

## Prerequisites

- A Linux-based laptop/workstation (Ubuntu has been verified to work)
- You need to [install Docker Engine](https://docs.docker.com/install) to use this tutorial

### Build Docker image for `mender-convert`

Open a terminal and clone the [mender-convert repository](https://github.com/mendersoftware/mender-convert), e.g.

```bash
git clone -b 3.0.0 https://github.com/mendersoftware/mender-convert.git

```

Enter your `mender-convert` environment:

```bash
cd mender-convert

```

There is a utility script which can be used to generate the appropriate docker image to run `mender-convert`:

```auto
./docker-build

```

This will create a container image you can use to run `mender-convert`.

## Download the latest stable Raspberry Pi raw disk image

Download the raw Raspberry Pi disk image into a subdirectory `input`:

```auto
mkdir -p input
cd input
wget https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2022-01-28/2022-01-28-raspios-bullseye-armhf-lite.zip

```

Extract the raw Raspberry Pi disk image:

```bash
unzip 2022-01-28-raspios-bullseye-armhf-lite.zip && cd ..

```

## Convert the Raspberry Pi disk image to support Mender

With the raw disk image and the container configured above, we can convert the image.

You can get your Mender Professional tenant token at the [My organization page in Mender Professional](https://hosted.mender.io/ui/#/settings/my-organization).

Configure the Mender client for hosted Mender server:

```auto
./scripts/bootstrap-rootfs-overlay-hosted-server.sh \
    --output-dir ${PWD}/input/rootfs_overlay_demo \
    --tenant-token "Paste token from Mender Professional"

```

There are additional scripts in the `scripts/` directory to configure with a local demo server, or production server.

Run mender-convert inside the container by running:

```bash
MENDER_ARTIFACT_NAME=release-1 ./docker-mender-convert \
    --disk-image input/2022-01-28-raspios-bullseye-armhf-lite.img \
    --config configs/raspberrypi4_config \
    --overlay ./input/rootfs_overlay_demo

```

Conversion will take 10-15 minutes, depending on your storage and resources available.

**NOTE**!

You will need an SD card with an capacity of at least **8GB** when using the default arguments. The SD card layout will be the following using the default arguments:

| Part | Type | Purpose | Size | Configure size |
| --- | --- | --- | --- | --- |
| mmcblk0p1 | vfat | Store the bootloader | 256MB | `MENDER_BOOT_PART_SIZE_MB` |
| mmcblk0p2 | ext4 | Store the root file system and kernel (active) | 3892MB | `MENDER_STORAGE_TOTAL_SIZE_MB` [1](#footnote1) |
| mmcblk0p3 | ext4 | Store the root file system and kernel (inactive) | 3892MB | `MENDER_STORAGE_TOTAL_SIZE_MB` [1](#footnote1) |
| mmcblk0p4 | ext4 | Store persistent data, preserved during Mender updates. | 128MB | `MENDER_DATA_PART_SIZE_MB` [2](#footnote2) |

1. The rootfs partition size is calculated using the following formula:

```
 (storage-total-size-mb - data-part-size-mb - boot-part-size) / 2

```

2. You rarely need to adjust the data part size using `MENDER_DATA_PART_SIZE_MB` as this will expanded on first boot to occupy the remaining free blocks of the SD card.

You can read more about the partition layout required for Mender [here](https://docs.mender.io/devices/general-system-requirements#partition-layout)

## Use the output images

After a successful conversion, the images and artifacts are:

- deploy/2022-01-28-raspios-bullseye-armhf-lite-raspberrypi4-mender.cfg
- deploy/2022-01-28-raspios-bullseye-armhf-lite-raspberrypi4-mender.ext4
- deploy/2022-01-28-raspios-bullseye-armhf-lite-raspberrypi4-mender.img
- deploy/2022-01-28-raspios-bullseye-armhf-lite-raspberrypi4-mender.mender

The disk image (with `.img` suffix) is used to provision the device storage for devices without Mender running already. You can write write the `img` image to an SD card using the following command:

```bash
cat deploy/2022-01-28-raspios-bullseye-armhf-lite-raspberrypi4-mender.img | sudo dd of=<path to device> bs=4M && sudo sync

```

**Be careful! If you point to the wrong `<path to device>` when executing the above command, you risk overwriting your workstation’s local or connected storage devices.**

On the other hand, if you already have Mender running on your device and want to deploy a rootfs update from this conversion, you should use the [Mender Artifact](https://docs.mender.io/architecture/mender-artifacts?target=_blank) files, which have `.mender` suffix. You can either deploy this Artifact in managed mode with the Mender server (upload it under Releases in the server UI) or by using the Mender client only in [Standalone deployments](https://docs.mender.io/architecture/standalone-deployments?target=_blank).

### Boot from the SD card and connect to your Mender server

Ensure your device has Internet connectivity (e.g. through Ethernet cable with DHCP support).

After provisioning an SD card with the converted disk image (`.sdimg`) above, boot your device from it.

After about 10 minutes, you should see your device Pending authorization under the Devices tab in your Mender server.  
Authorize your device to join your Mender server.

You can now deploy software updates to your Raspberry Pi using the Mender server!

# An improved workflow to generate Artifacts

The workflow of using an emulated device works for testing purposes, but it might  
have some limitations as we are emulating and not logged in to a real device or user.

When working with real deployments the recommended workflow is to have  
one _golden device_, that has _not_ been converted to support Mender.  
On this device you carry out all the modifications you need, and then  
use the resulting SD card to create Mender Artifact files, in summary:

- flash vanilla Rasbian to the SD card
- boot the SD card, log in and make any modifications needed
- copy the SD card into an image on your workstation (e.g. using `dd`)
- run `mender-convert` with the `--disk-image` option to generate a Mender Artifact (like above)
- upload the Artifact to your Mender server
- deploy it to your devices

Note that your golden device or SD card is not running Mender and is not modified during deployments. It is simply the “source” for generating the Artifacts that you deploy to the devices in the field.

# References

- The documentation on [Building a Mender Debian image](https://docs.mender.io/artifacts/debian-family) contains more information about using Mender with the Debian family of distributions.

- The official [Mender documentation](https://docs.mender.io/) explains how Mender works. This is simply a board-specific complement to the official documentation.

# Known issues

### raspi-config does not work as expected on a converted image

The `raspi-config` tool is a small utility that is commonly used on Raspberry Pi OS to configure various aspects of the Raspberry Pi hardware and trying to use this tool on a converted image will not work (by design).

Specifically it relates to fact that we change the mount point of the boot partition, which on a stock image is mounted at `/boot`, but on a converted image it is mounted at `/uboot`. The `raspi-config` tool will try to perform lookups of files in `/boot`, and this is typically what will fail when trying to run this tool on a converted image.

The recommend approach is to use the `raspi-config` utility on the “Golden Image” as described in the “ **An improved workflow to generate Artifacts** ” section above, and not try to modify the converted image as this should be viewed as a static configuration that you can share across your device fleet.

## Boot firmware files

Raspberry Pi boards have a set of boot firmware files that are located on the vfat boot part, and a selection of these files are:

```auto
bootcode.bin fixup.dat fixup_cd.dat fixup_db.dat
fixup_x.dat start.elf start_cd.elf start_db.elf
start_x.elf

```

Occasionally there will be changes to the Raspberry Pi software stack that requires that these files are updated. One example would be a change in the Linux kernel that relies on functional changes in the boot firmware and in this case you need to update the boot firmware together with the Linux kernel to get a functional device.

See this [thread](https://groups.google.com/a/lists.mender.io/d/msg/mender/98PMIMUp8kA/cOvIes1gDAAJ) where the limitations of the boot firmware files on Raspberry Pi are discussed.

Because of this limitation certain upgrade paths using Mender might not work out-of-the box, e.g one known that will not work is:

- Raspbian Stretch 2019-04-08 → Raspbian Buster 2019-06-20

To support this update path you must update the boot firmware files at the same time you are updating to `Raspbian Buster 2019-06-20`. You can utilize [state-scripts](https://docs.mender.io/artifacts/state-scripts) for this.

Note that it is unsafe to do update the boot firmware files because there is no way you can update these files atomically and it is not possible to roll-back in case you install something that does not boot, which might render your device unusable without physical intervention.

## Devicetree is not updated

To be able to support update of Linux kernel and devicetree, Mender requires these to be installed in the `/boot` directory for each rootfs (normally `/dev/mmcblk0p2` and `/dev/mmcblk0p3` ). On the other hand, the Raspberry Pi boot firmware requires that the DTB file is in the same partition as the boot firmware ( `/dev/mmcbl0p1` ) and the config.txt file. For now Mender will not use the DTB that is delivered with new artifacts and will continue to boot with the original DTB that was populated using the `sdimg` file.

## Problem using ‘dtoverlay=pi3-disable-bt’

> `pi3-disable-bt` disables the Bluetooth device and restores UART0/ttyAMA0 to GPIOs 14 and 15. It is also necessary to disable the system service that initialises the modem so it doesn’t use the UART

There is currently a known issue with above functionality, that is to enable `UART0` on PIN 14 and 15.

It is actually not something that is caused by Mender specifically, but Mender requires `U-boot` to be present to support robust features such as roll-back. `U-boot` is typically not enabled if you do a stock Raspberry Pi and some people are often surprised that the Bluetooth UART stopped working when they integrate Mender .

The problem is in `U-boot` which does conflicting configuration, and there is a workaround reported [here](https://github.com/agherzan/meta-raspberrypi/issues/374) and it has been reported to U-boot but unclear when/if it will be fixed.

* * *

_If this post was useful to you, please press like, or leave a thank you note to the contributor who put valuable time into this and made it available to you. It will be much appreciated!_

---

<div class="post-metadata">

**Author:** ![genedupre](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/genedupre/32/289_2.png) [@genedupre](https://hub.mender.io/u/genedupre)\
**Post date:** [February 24, 2020, 3:39pm UTC](https://hub.mender.io/t/raspberry-pi-4-model-b-raspbian/1312/2 "2020-02-24T15:39:19Z")

</div>

Hello @mirzak  
can confirm that also raspbian-buster-lite 2019-09-26 (2019-09-30) is working fine on RPI 4

---

<div class="post-metadata">

**Author:** ![lramirez](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/lramirez/32/1195_2.png) [@lramirez](https://hub.mender.io/u/lramirez)\
**Post date:** [May 11, 2021, 7:57pm UTC](https://hub.mender.io/t/raspberry-pi-4-model-b-raspbian/1312/4 "2021-05-11T19:57:32Z")

</div>

This worked for me using 2021-03-04-raspios-buster-armhf-lite.img as input image for my RPI 4.

As a side note: I didn’t close my --tenant-token parameter properly with both quotes. That generated a mender.conf that fails in runtime because there is a end-line character after the token. You can fix it by removing that \n character at the end , or we can include some validation for the bootstrap-rootfs-overlay-hosted-server.sh script.

---

<div class="post-metadata">

**Author:** ![chetferry](https://avatars.discourse-cdn.com/v4/letter/c/c2a13f/32.png) [@chetferry](https://hub.mender.io/u/chetferry)\
**Post date:** [July 17, 2021, 10:16pm UTC](https://hub.mender.io/t/raspberry-pi-4-model-b-raspbian/1312/5 "2021-07-17T22:16:35Z")

</div>

Has anyone had success using mender-convert for 64bit raspberry pi4? The images are located here: [Index of /raspios\_arm64/images/raspios\_arm64-2021-05-28](https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2021-05-28/)

---

<div class="post-metadata">

**Author:** ![kchavda1](https://avatars.discourse-cdn.com/v4/letter/k/aeb1de/32.png) [@kchavda1](https://hub.mender.io/u/kchavda1)\
**Post date:** [May 26, 2024, 12:02pm UTC](https://hub.mender.io/t/raspberry-pi-4-model-b-raspbian/1312/6 "2024-05-26T12:02:55Z")

</div>

I think 64 bit is not supported for mender-convert.

---

<div class="post-metadata">

**Author:** ![brandonwheat](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/brandonwheat/32/2236_2.png) [@brandonwheat](https://hub.mender.io/u/brandonwheat)\
**Post date:** [July 9, 2024, 9:03pm UTC](https://hub.mender.io/t/raspberry-pi-4-model-b-raspbian/1312/7 "2024-07-09T21:03:28Z")

</div>

Any update on when 64 bit will be supported for mender-convert? Would like to switch to 64 bit bookworm.

---

<div class="post-metadata">

**Author:** ![TheYoctoJester](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/theyoctojester/32/1444_2.png) [@TheYoctoJester](https://hub.mender.io/u/TheYoctoJester)\
**Post date:** [August 7, 2024, 1:18pm UTC](https://hub.mender.io/t/raspberry-pi-4-model-b-raspbian/1312/8 "2024-08-07T13:18:05Z")

</div>

Hi @brandonwheat,

You can try the current state at [GitHub - TheYoctoJester/mender-convert at rpi\_debian\_64bit](https://github.com/TheYoctoJester/mender-convert/tree/rpi_debian_64bit) now. The `raspberrypi4_64_config` has been successfully tested on Raspberry Pi OS Lite 64bit, bookworm of 2024-07-04, and we’ll start polishing and upstreaming now.

Greetz,  
Josef

---

<div class="post-metadata">

**Author:** ![brandonwheat](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/brandonwheat/32/2236_2.png) [@brandonwheat](https://hub.mender.io/u/brandonwheat)\
**Post date:** [August 8, 2024, 4:31pm UTC](https://hub.mender.io/t/raspberry-pi-4-model-b-raspbian/1312/10 "2024-08-08T16:31:44Z")

</div>

I have it mostly working, mender client doesn’t seem to be installed on the deployable version even though mender-convert said it installed it. I added my overlay with the credentials for hosted mender and it is there. Does mender-client have to be installed and enabled on the golden image before running mender convert?

---

<div class="post-metadata">

**Author:** ![TheYoctoJester](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/theyoctojester/32/1444_2.png) [@TheYoctoJester](https://hub.mender.io/u/TheYoctoJester)\
**Post date:** [August 8, 2024, 4:50pm UTC](https://hub.mender.io/t/raspberry-pi-4-model-b-raspbian/1312/11 "2024-08-08T16:50:35Z")

</div>

Hi @brandonwheat,

I am testing on vanilla Raspberry Pi OS images and the client is definitely installed by `mender-convert`. Maybe you are looking for specifics of the 3.5 client, while the default by now is the 4.0 line? See [Upgrading | Mender documentation](https://docs.mender.io/3.7/client-installation/install-with-debian-package/upgrading#upgrade-the-mender-client-3-x-series-to-4-0-0-or-later) for more details on the differences.

Greetz,  
Josef

---

<div class="post-metadata">

**Author:** ![brandonwheat](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/brandonwheat/32/2236_2.png) [@brandonwheat](https://hub.mender.io/u/brandonwheat)\
**Post date:** [August 8, 2024, 5:20pm UTC](https://hub.mender.io/t/raspberry-pi-4-model-b-raspbian/1312/12 "2024-08-08T17:20:49Z")

</div>

Sorry about that you are correct, I was looking for the 3.5 client. It works great!

---

<div class="post-metadata">

**Author:** ![TheYoctoJester](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/theyoctojester/32/1444_2.png) [@TheYoctoJester](https://hub.mender.io/u/TheYoctoJester)\
**Post date:** [November 5, 2024, 11:12am UTC](https://hub.mender.io/t/raspberry-pi-4-model-b-raspbian/1312/13 "2024-11-05T11:12:03Z")

</div>

4 posts were split to a new topic: [Raspberry Pi OS update out of storage](https://hub.mender.io/t/raspberry-pi-os-update-out-of-storage/7299)
