On your Ubuntu/Debian Desktop PC:
ARM & Edge Computing: Cross-Compiling for Raspberry Pi Nodes
The Raspberry Pi is the most popular hardware for running a home Bitcoin node. It is silent, uses less power than a light bulb, and costs less than $100. However, compiling Bitcoin Core on a Pi is a painful experience that can take 5-10 hours and may even damage the SD card due to the high volume of writes. The professional solution is Cross-Compilation. This chapter explains how to use your powerful desktop PC to build an optimized binary for your ARM-based Raspberry Pi.
Why Cross-Compile? The Mathematics of Speed
Your desktop PC (with an i7 or Ryzen CPU) can compile Bitcoin Core in 5 minutes. A Raspberry Pi 4, with its limited ARM cores and slow thermal dissipation, will take 5 hours. Furthermore, the Pi has limited RAM (often 2GB or 4GB). Compiling the large validation.cpp file requires over 1.5GB of RAM just for the compiler itself. If you run out of RAM, the Pi will start "Swapping" to the SD card, which is 100x slower and can lead to hardware failure.
Setting up the Toolchain for ARM64
We use the aarch64-linux-gnu toolchain, which allows a Linux PC to produce code that the Raspberry Pi's CPU understands.
# On your Ubuntu/Debian Desktop PC:
sudo apt-get update
sudo apt-get install g++-aarch64-linux-gnu binutils-aarch64-linux-gnu
The Depends Strategy for ARM
Using the depends system is mandatory for successful cross-compilation. It builds all the dependencies (Boost, libevent, etc.) for the ARM architecture first.
# 1. Navigate to the depends folder
cd depends
# 2. Build the ARM dependencies
# We target 'aarch64-linux-gnu' for modern 64-bit Pi OS
make HOST=aarch64-linux-gnu -j$(nproc)
# 3. Go back to the root and configure
cd ..
./autogen.sh
./configure --prefix=$PWD/depends/aarch64-linux-gnu --without-gui --disable-tests
make -j$(nproc)
Optimization for Edge Devices (Pi 4 and 5)
When running on a Pi, every megabyte of RAM and every CPU cycle is precious. You should tailor your build for the specific constraints of the hardware:
-
No GUI: The GUI uses nearly 500MB of RAM just to stay open. On a Pi, this is a waste.
-
No UPnP: If you are comfortable manually opening a port on your router, disable UPnP to reduce the binary size and attack surface.
-
Static Linking: Try to link the libraries statically so you can just copy a single
bitcoindfile to the Pi without worrying about installing dependencies on the Pi itself.
Moving the Binary to the Pi
Once compilation is finished on your PC, you can use scp (Secure Copy) to move the binary to your Raspberry Pi over your home network.
# Moving the binary from your PC to the Pi
scp src/bitcoind pi@raspberrypi.local:/home/pi/
# On the Pi, make it executable
chmod +x bitcoind
./bitcoind -daemon
The "Personal Cloud" Vision
By cross-compiling for ARM, you are participating in the vision of a "Decentralized Personal Cloud." Your Raspberry Pi becomes a silent sentinel, verifying the global ledger 24/7 without the need for an expensive, power-hungry PC. You have built a custom, high-performance financial node on hardware that fits in the palm of your hand.
TeachMeBitcoin is an ad-free, open-source educational repository curated by a passionate team of Bitcoin researchers and educators for public benefit. If you found our articles helpful, please consider supporting our hosting and ongoing content updates with a clean donation: