步驟如下:
$ arm-linux-gnueabihf-gcc --version
arm-linux-gnueabihf-gcc (Debian 12.2.0-14) 12.2.0
$ cd
$ wget https://github.com/steward-fu/website/releases/download/xt897/gcc-4.9.tar.gz
$ tar xvf gcc-4.9.tar.gz
$ sudo mv gcc-4.9 /opt
$ export PATH=/opt/gcc-4.9/bin:$PATH
$ arm-linux-gnueabihf-gcc -v
gcc version 4.9.4 (Linaro GCC 4.9-2017.01)
$ wget https://github.com/steward-fu/website/releases/download/xt897/sailfishos_kernel.tar.gz
$ tar xvf sailfishos_kernel.tar.gz
$ cd kernel
$ vim tools/perf/Makefile +70
EXTRA_WARNINGS := -w -Wformat
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make -C tools/perf
builtin-sched.c:396:23: error: storage size of ‘ru’ isn’t known
396 | struct rusage ru;
| ^~
builtin-sched.c:400:25: error: ‘RUSAGE_SELF’ undeclared (first use in this function)
400 | err = getrusage(RUSAGE_SELF, &ru);
$ vim tools/perf/builtin-sched.c +15
#include <sys/resource.h>
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make -C tools/perf
arch/arm/util/dwarf-regs.o
arch/arm/util/dwarf-regs.c:11:10: fatal error: libio.h: No such file or directory
11 | #include <libio.h>
$ vim tools/perf/arch/arm/util/dwarf-regs.c +11
#include <stdio.h>
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make -C tools/perf
/usr/lib/gcc-cross/arm-linux-gnueabihf/12/../../../../arm-linux-gnueabihf/bin/ld: builtin-periodic.o:/home/steward/Downloads/kernel/tools/perf/builtin-periodic.c:60: multiple definition of `evsel_list'; builtin-stat.o:/home/steward/Downloads/kernel/tools/perf/builtin-stat.c:174: first defined here
collect2: error: ld returned 1 exit status
$ vim tools/perf/builtin-periodic.c +60
extern struct perf_evlist *evsel_list;
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make -C tools/perf
$ file tools/perf/perf
tools/perf/perf: ELF 32-bit LSB pie executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3