ARM processors are widely used on various devices, like smartphones, tablets and small computers/boards. The main advantages of the ARM processor are :

For more informations about the ARM architecture, feel free to read the following links :

Why CentOS on ARMv7hl boards

A lot of people are interested in running Linux on such kind of cheap/small boards , as home server appliance, domestic controller, small vpn endpoint, etc (the list isn't exhaustive). While it exists a lot of distributions already providing support for such boards, someone already using CentOS 7 x86_64 for his servers/workstations/laptops will be probably interested in managing even such small armv7hl boards with the same tools. That's why the CentOS AltArch SIG decided to try to port the existing code from CentOS 7 x86_64 to the armv7hl/armhfp platform.

: it's worth knowing that the distribution for armv7hl platform is called "CentOS Userland Linux" and not "CentOS Linux". The reason is that for some packages, the AltArch SIG can decide to include some other packages, replace some components, or not build some packages from the upstream distribution. The most and obvious case is the kernel, as kernel 3.10.0-* (as used in the main CentOS 7 x86_64 distro) doesn't support such armv7hl boards/arch. (see the [Supported Boards] section below)

Supported armhfp boards

We currently support the following board types :

Worth noting that we have so the following images :

We still have the -RaspberryPI- images, while now (since 7.5.1804) the -generic- images can be used natively on rpi boards, using so the upstream kernel (support is not complete, but very usable)

If your device is based on an Allwinner chipset, you should also check so you know what to expect

How to install CentOS Userland armv7hl

How to unpack the image for your board

The first thing to do is to download the appropriate image for your board. You need at least a 4Gb SD card or more, depending on the package selection (so Minimal/GNOME/KDE):

Attention, be sure to verify your sd card path, as the next command, run with sudo rights, can destroy the target device if it has not been correctly identified! Most of the time, it will be /dev/mmcblk0, but be careful!

Once you have downloaded the corresponding image for your board model, transfer it to your SD card:

xzcat CentOS-Userland-7-armv7hl-$MODEL-$VARIANT-$RELEASE-sda.raw.xz | sudo dd of=$/path/to/sd/card status=progress bs=4M
sudo sync

TIP: : the 'status=progress' parameter for dd exists in the version supplied with CentOS 7.2.1511. If you're running another version or another distribution, verify first that it's supported. That parameter isn't mandatory, but written here for convenience, to track the transfer rate status to the SD card. The 'bs=4M' parameter is also used for a faster transfer rate to the SD card, as most SD cards have an erase block size of 4MB

uboot setup (not needed for the RaspberryPI boards)

After you have unpacked the generic image to your SD card, you just have to do one additional step.

Let's suppose you do this from your linux laptop and that your board is Bananapro :

yum install uboot-images-armv7 uboot-images-armv8
export boardmodel="Bananapro"
export sdcard="/dev/mmcblk0"
dd if=/usr/share/uboot/${boardmodel}/u-boot-sunxi-with-spl.bin of=${sdcard} bs=1024 seek=8 conv=fsync,notrunc

FYI Here is a list of boards that have a uboot file for armhfp (from uboot-images-2018.09):

A10-OLinuXino-Lime A10s-OLinuXino-M A13-OLinuXino A13-OLinuXinoM A20-Olimex-SOM-EVB A20-OLinuXino-Lime A20-OLinuXino-Lime2 A20-OLinuXino_MICRO a64-olinuxino am335x_boneblack am335x_evm am335x_evm_usbspl am57xx_evm Ampe_A76 arndale Auxtek-T003 Auxtek-T004 avnet_ultra96_rev1 ba10_tv_box Bananapi bananapi_m2_berry Bananapi_M2_Ultra bananapi_m64 Bananapro chiliboard CHIP Chuwi_V7_CW0825 clearfog cl-som-am57x cm_fx6 Colombus colorfly_e708_q1 CSQ_CS908 Cubieboard Cubieboard2 Cubieboard4 Cubietruck Cubietruck_plus db-mv784mp-gp difrnce_dit4350 dragonboard410c dragonboard820c dserve_dsrv9703c espresso7420 evb-rk3229 evb-rk3328 evb-rk3399 fennec-rk3288 firefly-rk3288 firefly-rk3399 geekbox helios4 hikey Hummingbird_A31 Hyundai_A7HD i12-tvbox icnova-a20-swac inet1 iNet_3F iNet_3W inet86dz iNet_86VS inet97fv2 inet98v_rev2 inet9f_rev03 inet_q972 Itead_Ibox_A20 jesurun_q5 jetson-tk1 kc1 khadas-vim Lamobo_R1 libretech_all_h3_cc_h2_plus libretech_all_h3_cc_h5 libretech-cc Linksprite_pcDuino Linksprite_pcDuino3 Linksprite_pcDuino3_Nano liteboard marsboard Marsboard_A10 Mele_A1000 Mele_A1000G_quad Mele_I7 Mele_M3 Mele_M5 Mele_M9 Mini-X mk802 mk802_a10s mk802ii MK808C MSI_Primo73 MSI_Primo81 mvebu_espressobin-88f3720 mvebu_mcbin-88f8040 mx6cuboxi nanopi-k2 nanopi_m1 nanopi_m1_plus nanopi_neo nanopi_neo2 nanopi_neo_plus2 novena odroid odroid-c2 odroid-xu3 omap3_beagle omap3_pandora omap4_panda omap5_uevm Orangepi orangepi_2 orangepi_lite Orangepi_mini orangepi_one orangepi_one_plus orangepi_pc orangepi_pc2 orangepi_pc_plus orangepi_plus orangepi_plus2e orangepi_prime orangepi_r1 orangepi_win orangepi_zero orangepi_zero_plus orangepi_zero_plus2 origen p212 p2371-2180 p2771-0000-500 paz00 pine64_plus pine_h64 polaroid_mid2809pxe04 poplar pov_protab2_ips9 q8_a13_tablet q8_a23_tablet_800x480 q8_a33_tablet_1024x600 q8_a33_tablet_800x480 qemu_arm r7-tv-dongle riotboard rock rock2 rock960-rk3399 rpi_2 rpi_3 rpi_3_32b Sinlinx_SinA31s Sinovoip_BPI_M2 Sinovoip_BPI_M2_Plus Sinovoip_BPI_M3 smdkv310 sopine_baseboard stih410-b2260 sunxi_Gemei_G9 tbs_a711 tinker-rk3288 trimslice turris_mox turris_omnia udoo udoo_neo usbarmory UTOO_P66 vexpress_aemv8a_dram vexpress_aemv8a_juno vexpress_aemv8a_semi vexpress_ca15_tc2 vexpress_ca9x4 wandboard warp warp7 Wexler_TAB7200 Wits_Pro_A20_DKT xilinx_zynqmp_zcu100_revC Yones_Toptech_BS1078_V2 zynq_microzed zynq_zed zynq_zybo

Once the image is transferred, you can put the SD card in the dedicated slot for your arm device, and boot it up.

The default settings for the installed image are :

How to resize/expand the RootFS for the whole SD card

Depending on the SD card size you used, you probably want to expand the RootFS (/) to the maximum capacity of the underlying SD card. For your convenience, we've added the cloud-utils-growpart tool, packaged as rpm and also available through the Extras repository for armv7hl.

If you just want to use/expand the whole remaining capacity, just run (as root, or with sudo right) the following command :


Wifi on the Raspberry 3B and 3B+

The Raspberry PI 3B/3B+ firmware files are not allowed to be distributed by the CentOS Project. You can use the following articles to understand the issue, get the firmware and set up the wifi.

The Raspberry Pi 3 B+ in Fedora

Connect to a wireless network using command line nmcli

Installing an armv7hl (32 bit) VM on an aarch64 (64 bit) machine

Do you have a CentOS-7 aarch64 machine and need to run a 32 bit arm Virtual Machine .. if so, here is an outstanding blog post by Fabian Arrotin (one of our core CentOS team members):

Using CentOS 7 armhfp VM on CentOS 7 aarch64

Interacting with the AltArch Arm32 group

Getting help

Contributing to the Arm32 group


How can I update my kernel ?

Depending on which board image you're using, it can use the "generic" kernel or the raspberrypi variant. It's normally all configured automatically but even if you point to the correct repository, you'll have take care of the following (depending on the board variant):

raspberrypi 2 and 3

yum update will bring the updated kernel and nothing to be done, just reboot and you'll be using the new kernel

"generic" kernel

Before centos-userland-release-7-5.1804, in order to activate the new kernel and edit /boot/extlinux/extlinux.conf, you had to run /usr/bin/update-boot. This is no longer valid and it is done automatically by grubby.

How can I enable EPEL 7 on armhfp ?

The answer is easy in a sense that there is no official EPEL repository for armhfp. But because lot of users were asking for this, we decided to use the centos armhfp builders to (re)build Source packages from EPEL 7 (and try to track those automatically) when they're idle. Please note that it's just an automatic rebuild without any QA/test, and also resulting pkgs aren't signed either. To use that repository, proceed like this :

cat > /etc/yum.repos.d/epel.repo << EOF
name=Epel rebuild for armhfp


SpecialInterestGroup/AltArch/armhfp (last edited 2018-12-03 10:33:25 by PabloGreco)