Installing perf on a development board (e.g. RPi4)

I recently had a colleague encounter some troubles using perf on a new
Raspberry Pi 4 device.
Normally you would install it from a package repository (e.g. using apt, and the
package name linux-tools).
However, when youāre on a non-x86 platform, you cannot always rely that there will be packages for your device, and even if there are, they might be broken in subtle and frustrating ways. This was the case for my colleague.
Luckily, I had encountered a similar issue on an ODROID device, and had kept my notes. Iāve adapted the notes into an email to the colleague, and thought I might as well post it here.
The solution is to build perf yourself.
Donāt worry though, through trial and error a long-dead version of me has some commands for you, and it shouldnāt take too long.
First, make sure weāve got all the dependencies to build perf properly:
sudo apt-get -y install flex bison libdw-dev libnewt-dev binutils-dev libaudit-dev libgtk2.0-dev binutils-dev libssl-dev python-dev systemtap-sdt-dev libiberty-dev libperl-dev liblzma-dev libpython-dev libunwind-* asciidoc xmlto
sudo apt-get -y install flex bison
Next, get the source code for perf. It is part of the Linux kernel source
tree, thus the full git history is massive. Therefore weāll use the git clone
flag depth to ensure that we only get one commit, and reduce our download
size.
git clone --depth=1 --branch rpi-4.19.y https://github.com/raspberrypi/linux
Note weāre also using the Raspberry Pi fork of the Linux kernel. idk yet what is
different about it, but my journal says to use this, and who am I to question my
past self? This should work on other devices, though some development boards
might need to use the developerās kernel fork, e.g. Hikey or ODROID. Be sure to
get the correct branch for the kernel version of your device. Here, we use
rpi-4.19.y. To double check, run uname -a. On the Raspberry Pi 4 I got
4.19.97-v7l+, thus we are using kernel version 4.19.
Next, letās build only perf, rather than the whole kernel:
cd linux
make -C tools/perf/
Now, letās test if that worked:
cd tools/perf
sudo ./perf list
sudo ./perf stat -e L1-dcache-load-misses sleep 10
Those last two commands should have given output. If it did, copy the binaries
to if it works, /usr/bin, and you can now use perf for whatever activities
you desire!
On the Raspberry Pi 4, you might find that the counter is not available. In
fact, running sudo ./perf stat -a sleep you might only get very simple
counters. A hot fix might be to edit the file /boot/config.txt, and set
arm_64bit=1. Reboot your device, and you should get more counters.
If not, Iām sorryā¦