Contents
Introduction
ARM processors are widely used on various devices, like smartphones, tablets and small computers/boards. The main advantages of the ARM processor are :
- Low power consumption
- Low cost
- Very small device form factor
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 exiting 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) |
Tested and supported Boards
1. Cubietruck
1.1. working
- serial console
- hdmi output
- ethernet
- selinux in enforcing mode (see selinux notes below)
- integrated wifi : be sure to run latest kernel, and then :
curl http://dl.cubieboard.org/public/Cubieboard/benn/firmware/ap6210/nvram_ap6210.txt > /lib/firmware/brcm/brcmfmac43362-sdio.txt systemctl reboot
1.2. untested
2. Bananapi
2.1. working
- serial console
- hdmi output
- ethernet
- selinux in enforcing mode (see selinux notes below)
2.2. not working
- embedded 4 port switch (for the R1 model)
2.3. untested
3. RaspberryPI2
3.1. working
- hdmi output
- ethernet
- selinux in enforcing mode (see selinux notes below) (starting from released kernel 4.4.26+)
3.2. i2c
echo -e "dtparam=i2c1=on\ndtparam=i2c_arm=on" >> /boot/config.txt echo -e "i2c-bcm2708\ni2c-dev" >> /etc/modules-load.d/i2c.conf yum install -y i2c-tools systemctl reboot
3.3. not working
3.4. untested
4. RaspberryPI3
4.1. working
- hdmi output
- ethernet
- Emdedded wifi (but see instructions in the /root/README file to download/install the required Broadcom firmware)
- selinux in enforcing mode (see selinux notes below) (starting from released kernel 4.4.26+)
4.2. i2c
see instructions for rpi2
4.3. not working
4.4. untested
Other armhfp boards
As we build a RootFS, chances are that you can still use it on your armhfp device. Problem is that we can't test all possible boards, but if your board supports vanilla/upstream kernel, and also uboot, you can apply the following procedure :
After you have unpacked the Cubietruck image (generic RootFS using also vanilla kernel) 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 :
export boardmodel="Bananapro" export sdcard="/dev/mmcblk0" cd /tmp wget http://mirror.centos.org/altarch/7/extras/armhfp/Packages/uboot-images-armv7-2018.03-2.el7.noarch.rpm rpm2cpio uboot-images-armv7-2018.03-2.el7.noarch.rpm|cpio -ivdm dd if=./usr/share/${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-2016.09):
A10-OLinuXino-Lime A10s-OLinuXino-M A13-OLinuXino A13-OLinuXinoM A20-Olimex-SOM-EVB A20-OLinuXino-Lime A20-OLinuXino-Lime2 A20-OLinuXino_MICRO am335x_boneblack am335x_evm am335x_evm_usbspl am57xx_evm Ampe_A76 arndale Auxtek-T003 Auxtek-T004 ba10_tv_box Bananapi Bananapi_M2_Ultra 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 dserve_dsrv9703c evb-rk3229 fennec-rk3288 firefly-rk3288 highbank Hummingbird_A31 Hyundai_A7HD i12-tvbox icnova-a20-swac inet86dz iNet_86VS Itead_Ibox_A20 jesurun_q5 jetson-tk1 kc1 Lamobo_R1 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 mx6cuboxi nanopi_m1 nanopi_m1_plus nanopi_neo novena odroid odroid-xu3 omap3_beagle omap3_pandora omap4_panda omap5_uevm Orangepi orangepi_2 orangepi_lite Orangepi_mini orangepi_one orangepi_pc orangepi_pc_plus orangepi_plus orangepi_plus2e orangepi_zero origen paz00 polaroid_mid2809pxe04 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 rpi_2 rpi_3_32b Sinlinx_SinA31s Sinovoip_BPI_M2 Sinovoip_BPI_M2_Plus Sinovoip_BPI_M3 smdkv310 stih410-b2260 sunxi_Gemei_G9 tbs_a711 tinker-rk3288 trimslice turris_omnia udoo udoo_neo usbarmory UTOO_P66 vexpress_ca15_tc2 vexpress_ca9x4 wandboard warp warp7 Wexler_TAB7200 Wits_Pro_A20_DKT Yones_Toptech_BS1078_V2 zynq_microzed zynq_zed zynq_zybo |
How to install CentOS Userland armv7hl
1. 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
You can find those here (see [Supported Boards] section) : http://mirror.centos.org/altarch/7/isos/armhfp
|
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-Minimal-$RELEASE-$MODEL.img.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||
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 :
- root password : centos
- eth0 setting : dhcp
- selinux status : permissive or disabled (board/kernel specific, see [Supported Boards] section and your model)
- no ntp/chronyd setup
You can automatically set the correct time with the following commands :
yum install chrony systemctl start chronyd
2. 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 :
/usr/local/bin/rootfs-expand
Your board will reboot, load kernel/initrd, expand the partition, resize it and reboot. Once done, you'll be using your whole SD card.
3. SElinux status
Depending on your board model, the kernel used in the image can or not support selinux. See then first if that's the case (listed in the [Supported Boards] section)
Because of the way the images are generated on the buider machines, the selinux context isn't the correct one on the filesystem in those images. That's the reason why we decided to just have selinux configured in permissive mode (through /etc/sysconfig/selinux), but even started with selinux turned off (enforce=0 boot parameter)
If you want to switch to enforcing mode, you'll have so to first modify the following files
- /etc/sysconfig/selinux : change from "permissive" to "enforcing"
- rpi2/rpi3 : /boot/cmdline.txt: change "enforce=0" to "enforcing=1"
- other image/board[s]: /boot/extlinux/extlinux.conf : change the "enforce=0" to "enforce=1"
After that (and before rebooting ! ), be sure to issue the following command :
touch /.autorelabel
You can now reboot and the whole filesystem will get the correct selinux contexts applied
The relabel process can be really slow on such SD card : as an example, it can take up to 5 minutes on a cubietruck with a 4Gb SD card !
Interacting with the AltArch Arm32 group
1. Getting help
- Wiki release notes
- IRC : #centos-arm on freenode.net
2. Contributing to the Arm32 group
- IRC : #centos-arm on freenode.net
Dedicated Arm-dev mailing list
Willing to test armv7hl for specific packages ? or troubleshooting issues ? See the builders wiki page
FAQ
1. 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):
1.1. 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
1.2. "generic" kernel
After yum will have installed the updated kernel, you'll still have to edit /boot/extlinux.conf to modify the kernel/initrd and then reboot. To help with that, there is now a update-boot script that you can call yourself. That tool will detect latest kernel that was installed and will update /boot/extlinux.conf. Worth noting that such /usr/bin/update-boot wrapper script was only added in centos-userland-release-7-3.1611.el7.centos.0.2.armv7hl, so be sure to at least have that pkg installed before trying to call update-boot.
2. How can I enable EPEL 7 on armhfp ?
The answer is easy in a sense that there is no official EPEL repository for armfhp. 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 [epel] name=Epel rebuild for armhfp baseurl=https://armv7.dev.centos.org/repodir/epel-pass-1/ enabled=1 gpgcheck=0 EOF