手機 - Motorola XT897 - Sailfish OS 3.3.0.16 - Build perf



步驟如下:

$ 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