Merge branch 'master' of github.com:cirosantilli/linux-kernel-module-cheat

This commit is contained in:
Ciro Santilli
2018-05-08 21:11:41 +01:00
6 changed files with 63 additions and 16 deletions

View File

@@ -4164,7 +4164,6 @@ Buildroot built-in libraries, mostly under Libraries > Other:
* Armadillo `C++`: linear algebra
* fftw: Fourier transform
* Eigen: linear algebra
* Flann
* GSL: various
* liblinear
@@ -4174,21 +4173,21 @@ Buildroot built-in libraries, mostly under Libraries > Other:
There are not yet enabled, but it should be easy to so, see: <<add-new-buildroot-packages>>
===== OpenMP
Implemented by GCC itself, so just a toolchain configuration, no external libs, and we enable it by default:
....
/openmp.out
....
===== BLAS
Buildroot supports it, which makes everything just trivial:
....
./build \
-a arm \
-B 'BR2_PACKAGE_OPENBLAS=y' \
;
....
and then inside the guest run our test program:
....
/openblas.out
./build -a arm -B 'BR2_PACKAGE_OPENBLAS=y' -k
./run -F '/openblas.out'
....
For x86, you also need:
@@ -4203,6 +4202,15 @@ to overcome this bug: https://bugs.busybox.net/show_bug.cgi?id=10856
sgemm_kernel.o: No such file or directory
....
===== Eigen
Header only linear algebra library supported by Buildroot:
....
./build -B 'BR2_PACKAGE_EIGEN=y' -k
./run -F '/eigen.out'
....
===== PARSEC benchmark
We have ported parts of the link:http://parsec.cs.princeton.edu[PARSEC benchmark] for cross compilation at: https://github.com/cirosantilli/parsec-benchmark See the documentation on that repo to find out which benchmarks have been ported. Some of the benchmarks were are segfaulting, they are documented in that repo.

View File

@@ -11,9 +11,14 @@ KERNEL_MODULE_SITE_METHOD = local
ifeq ($(BR2_PACKAGE_OPENBLAS),y)
KERNEL_MODULE_DEPENDENCIES += openblas
endif
ifeq ($(BR2_PACKAGE_EIGEN),y)
KERNEL_MODULE_DEPENDENCIES += eigen
endif
define KERNEL_MODULE_BUILD_CMDS
$(MAKE) -C '$(@D)/user' $(TARGET_CONFIGURE_OPTS) BR2_PACKAGE_OPENBLAS="$(BR2_PACKAGE_OPENBLAS)"
$(MAKE) -C '$(@D)/user' $(TARGET_CONFIGURE_OPTS) \
BR2_PACKAGE_OPENBLAS="$(BR2_PACKAGE_OPENBLAS)" \
BR2_PACKAGE_EIGEN="$(BR2_PACKAGE_EIGEN)"
endef
define KERNEL_MODULE_INSTALL_TARGET_CMDS

View File

@@ -1,21 +1,31 @@
.PHONY: all clean
CFLAGS_EXTRA ?= -fopenmp -std=c99 -Wall -Werror -Wextra
IN_EXT ?= .c
IN_EXT_C ?= .c
IN_EXT_CXX ?= .cpp
LIBS :=
OUT_EXT ?= .out
OUTS := $(addsuffix $(OUT_EXT), $(basename $(wildcard *$(IN_EXT))))
OUTS := $(foreach IN_EXT,$(IN_EXT_C) $(IN_EXT_CXX),$(addsuffix $(OUT_EXT), $(basename $(wildcard *$(IN_EXT)))))
ifeq ($(BR2_PACKAGE_OPENBLAS),y)
LIBS += -lopenblas
else
OUTS := $(filter-out openblas.out,$(OUTS))
OUTS := $(filter-out openblas$(OUT_EXT),$(OUTS))
endif
ifeq ($(BR2_PACKAGE_EIGEN),y)
# Header only.
#LIBS += -leigen
else
OUTS := $(filter-out eigen%$(OUT_EXT),$(OUTS))
endif
all: $(OUTS)
%$(OUT_EXT): %$(IN_EXT)
%$(OUT_EXT): %$(IN_EXT_C)
$(CC) $(CFLAGS) $(CFLAGS_EXTRA) -o '$@' '$<' $(LIBS)
%$(OUT_EXT): %$(IN_EXT_CXX)
$(CXX) $(CXXFLAGS) $(CXXFLAGS_EXTRA) -o '$@' '$<' $(LIBS)
clean:
rm -f *'$(OUT_EXT)'

View File

@@ -10,6 +10,7 @@ These programs can also be compiled and used on host.
. Standalone
.. link:hello.c[]
.. link:hello_cpp.cpp[]
.. link:myinsmod.c[]
.. link:myrmmod.c[]
.. link:sched_getaffinity.c[]
@@ -29,3 +30,7 @@ These programs can also be compiled and used on host.
.. link:ioctl.c[]
.. link:netlink.c[]
.. link:poll.c[]
. Buildroot libraries
.. link:eigen.cpp[]
.. link:openmp.c[]
.. link:openblas.c[]

View File

@@ -0,0 +1,14 @@
/* Official hello world. */
#include <iostream>
#include <eigen3/Eigen/Dense>
using Eigen::MatrixXd;
int main()
{
MatrixXd m(2,2);
m(0,0) = 3;
m(1,0) = 2.5;
m(0,1) = -1;
m(1,1) = m(1,0) + m(0,1);
std::cout << m << std::endl;
}

View File

@@ -0,0 +1,5 @@
#include <iostream>
int main() {
std::cout << "hello world" << std::endl;
}