howto,

How to get ILI9486 Raspberry Pi 3.5" LCD to work with Fedora ARM

Izhar Firdaus Izhar Firdaus Follow Support Feb 17, 2021 · 5 mins read
How to get ILI9486 Raspberry Pi 3.5
Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.

Fedora ARM provides a full fledged Linux distro with rich ecosystem of server packages available for the ARM ecosystem.

However, ever since Fedora released an official ARM spin, specialized Fedora derivative for Raspberry Pi such as Fedberry and Pidora pretty much went out of development, and getting Rpi accessories to work with Fedora ARM, especially those that does not work with upstream Linux.org kernel, is not quite obvious,

In this tutorial, we would go about in getting ILI9486/XPT2046 3.5” LCD, which I bought from Lazada to work with Fedora ARM on Rpi3, up until the point where a framebuffer device is available for attaching CLI console to the display. The process provided by this tutorial in theory should also work with several other LCD devices, but because I only have this 3.5” LCD, so I can only test against it.

Installing Fedora ARM with downstream Raspbian Kernel

To start, you will need to use dwrobel’s spin of Fedora ARM image instead of the main official image. This image basically replaced the default Fedora kernel which is from upstream Linux.org kernel, to a kernel provided by Raspberry Pi Foundation. It is important for you to use this kernel to get the LCD to work, because a lot of kernel modules required to work with Rpi accessories are not yet available in upstream kernel for various reasons.

You will notice that the image download page splitted the file into two, fedora-server-aarch64-f33-20201230-sda.raw.xz.aa and fedora-server-aarch64-f33-20201230-sda.raw.xz.ab. You will need to merge these files into a single image before you can work with it:

# merge files
cat fedora-server-aarch64-f33-20201230-sda.raw.xz.aa \
    fedora-server-aarch64-f33-20201230-sda.raw.xz.ab \
    > fedora-server-aarch64-f33-20201230-sda.raw.xz

# verify checksum
sha512sum -c fedora-server-aarch64-f33-20201230-sda.raw.xz.sha512sum

After successful merging, you can then copy this image into your sdcard. Please take note, Fedora ARM Image Installer does not quite work correctly with this image.

# decompress
xz -d fedora-server-aarch64-f33-20201230-sda.raw.xz 

# dd into sdcard
dd if=fedora-server-aarch64-f33-20201230-sda.raw of=/dev/mmcblk0 

Afterwards, you may want to resize the root partition to make use of the whole sdcard, to do this, disconnect and reconnect the sdcard to reload, and then lets run parted.

umount /dev/mmcblk0* # just to be sure
parted /dev/mmcblk0

Then use resizepart to resize the btrfs partition.

[root@chihaya ~]# parted /dev/mmcblk0                                     
GNU Parted 3.3
Using /dev/mmcblk0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print free                                                       
Model: SD SN64G (sd/mmc)
Disk /dev/mmcblk0: 63.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
        1024B   4194kB  4193kB           Free Space
 1      4194kB  516MB   512MB   primary  fat16        boot, lba
 2      516MB   3016MB  2500MB  primary  btrfs
        3016MB  63.9GB  60.8GB           Free Space

(parted) resizepart 2                                                     
End?  [3016MB]? 63.9GB                                                    
(parted) q
Information: You may need to update /etc/fstab.

[root@chihaya ~]#        

The btrfs partition can now be mounted for resizing the filesystem and adding your SSH key for remote network access, which can be added using the following steps.

# mount
mkdir /tmp/disk
mount /dev/mmcblk0p2 /tmp/disk/
btrfs filesystem resize max /tmp/disk/

# add ssh key
mkdir /tmp/disk/root/root/.ssh/
cat /path/to/ssh/public/key > /tmp/disk/root/root/.ssh/authorized_keys
chmod og-rwx -R /tmp/disk/root/root/.ssh/

# remove root password 
sed -i 's/root:x:/root::/' /tmp/disk/root/etc/passwd

Static network IP can be configured using

cat > /tmp/disk/root/etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
DEVICE=eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DNS1=8.8.8.8
DNS2=8.8.4.4
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME="Default"
ONBOOT=yes
IPADDR=10.42.0.210
PREFIX=24
GATEWAY=10.42.0.1
EOF

Finally, unmount the sdcard.

umount /tmp/disk

If nothing went wrong with the steps, you can now hook up your Rpi to the network, boot it up and connect to it.

Setting up LCD framebuffer device

To setup the LCD device, you will need to install additional device tree overlays for the LCD. The LCD-show github repository from goodtft provides the necessary files, however, the script provided by the repo is designed to work only on raspbian based platforms. In Fedora ARM, we’ll have to do this manually with the following steps.

SSH into the Rpi

ssh 10.42.0.210 -l root

In /boot/config.txt, you will need to add the following lines before [pi4] section of the config (implicit [all] section).

hdmi_force_hotplug=1
dtparam=i2c_arm=on
dtparam=spi=on
dtoverlay=tft35a:rotate=90

Download the 3.5” LCD overlay:

wget https://github.com/goodtft/LCD-show/raw/master/usr/tft35a-overlay.dtb \
   -O /boot/efi/overlays/tft35a.dtbo

Reboot the device.

With the steps above, it should be enough to get the LCD working with a framebuffer device at /dev/fb1. The LCD should be showing black screen after the reboot.

You can then use this framebuffer device either to run a console, or to use with your PyGame application, or to run X server.

To test the framebuffer device, you can run the following command, and the screen should be showing random black and white dots.

cat /dev/urandom > /dev/fb1

You can also, configure the LCD device as the default kernel console output adding fbcon=map:10 fbcon=font:ProFont6x11 to the kernel boot option in /boot/efi/cmdline.txt, and reboot the device.

I have yet to try getting X GUI running on this, but I will definitely share once I got time to try and figure it out.

Hope this guide would be helpful to those who own such LCD and do share if you found this guide useful.

Written by Izhar Firdaus Follow Support
I'm a system architect, data engineer and developer advocate with passion in Free / Open Source software, entrepreneurship, community building, education and martial art. I take enjoyment in bridging and bringing together different FOSS technologies to help businesses and organizations utilize IT infrastructure to aid and optimize their business and organizational process.

Is CentOS Dead? The reports of its demise are greatly exaggerated.

End of last year, CentOS project announced that they are shifting theirfocus to CentOS Stream.

In blog, Feb 16, 2021

« Previous Post

Creating XDG custom url scheme handler

If you develop system tools or desktop software on Linux that also have an accompanying web application, you might want to have a way...

In howto, Feb 18, 2021

Next Post »