驅動程式 - Linux Device Driver(LDD) - 解決Error: test_attr__enabled undeclared問題



參考資訊:
https://github.com/nevermosby/linux-bpf-learning/blob/master/bpf/perf-sys.h

問題如下:

$ make M=samples/bpf
    make -C /usr/src/linux-source-4.19/samples/bpf/../../tools/lib/bpf/ RM='rm -rf' LDFLAGS= srctree=/usr/src/linux-source-4.19/samples/bpf/../../ O=
    Warning: Kernel ABI header at 'tools/include/uapi/linux/bpf.h' differs from latest version at 'include/uapi/linux/bpf.h'
    Warning: Kernel ABI header at 'tools/include/uapi/linux/netlink.h' differs from latest version at 'include/uapi/linux/netlink.h'
      HOSTCC  samples/bpf/bpf_load.o
    In file included from ./tools/perf/perf-sys.h:9,
                     from samples/bpf/bpf_load.c:29:
    ./tools/perf/perf-sys.h: In function ‘sys_perf_event_open’:
    ./tools/perf/perf-sys.h:68:15: error: ‘test_attr__enabled’ undeclared (first use in this function)
      if (unlikely(test_attr__enabled))
                   ^~~~~~~~~~~~~~~~~~
    ./tools/include/linux/compiler.h:74:43: note: in definition of macro ‘unlikely’
     # define unlikely(x)  __builtin_expect(!!(x), 0)
                                               ^
    ./tools/perf/perf-sys.h:68:15: note: each undeclared identifier is reported only once for each function it appears in
      if (unlikely(test_attr__enabled))
                   ^~~~~~~~~~~~~~~~~~
    ./tools/include/linux/compiler.h:74:43: note: in definition of macro ‘unlikely’
     # define unlikely(x)  __builtin_expect(!!(x), 0)
                                               ^
    In file included from samples/bpf/bpf_load.c:29:
    ./tools/perf/perf-sys.h:69:3: warning: implicit declaration of function ‘test_attr__open’ [-Wimplicit-function-declaration]
       test_attr__open(attr, pid, cpu, fd, group_fd, flags);
       ^~~~~~~~~~~~~~~
    make[1]: *** [scripts/Makefile.host:107: samples/bpf/bpf_load.o] Error 1
    make: *** [Makefile:1564: _module_samples/bpf] Error 2

解法如下:

$ vim tools/perf/perf-sys.h
    67  #ifdef HAVE_ATTR_TEST
    68      //if (unlikely(test_attr__enabled))
    69      //test_attr__open(attr, pid, cpu, fd, group_fd, flags);
    70  #endif