mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-04-20 04:38:41 +02:00
initial buildability of full libwolfssl.ko loadable kernel module for Linux via ./configure --enable-linuxkm && make.
This commit is contained in:
29
linuxkm/Kbuild
Normal file
29
linuxkm/Kbuild
Normal file
@@ -0,0 +1,29 @@
|
||||
# libwolfssl Kbuild
|
||||
|
||||
# wolfcrypto asm provokes many objtool complaints:
|
||||
# "call without frame pointer save/setup",
|
||||
# "BP used as a scratch register",
|
||||
# "indirect jump found in RETPOLINE build",
|
||||
# and "is missing an ELF size annotation"
|
||||
# see /usr/src/linux/tools/objtool/Documentation/stack-validation.txt
|
||||
OBJECT_FILES_NON_STANDARD := y
|
||||
|
||||
obj-m := libwolfssl.o
|
||||
|
||||
ifeq "$(WOLFSSL_OBJ_FILES)" ""
|
||||
$(error $$WOLFSSL_OBJ_FILES is unset.)
|
||||
endif
|
||||
|
||||
ifeq "$(WOLFSSL_CFLAGS)" ""
|
||||
$(error $$WOLFSSL_CFLAGS is unset.)
|
||||
endif
|
||||
|
||||
ifeq "$(WOLFSSL_ASFLAGS)" ""
|
||||
$(error $$WOLFSSL_ASFLAGS is unset.)
|
||||
endif
|
||||
|
||||
libwolfssl-y := $(WOLFSSL_OBJ_FILES)
|
||||
|
||||
ccflags-y := $(WOLFSSL_CFLAGS)
|
||||
|
||||
asflags-y := $(WOLFSSL_ASFLAGS)
|
||||
38
linuxkm/Makefile
Normal file
38
linuxkm/Makefile
Normal file
@@ -0,0 +1,38 @@
|
||||
all: libwolfssl.ko
|
||||
|
||||
.PHONY: libwolfssl.ko
|
||||
|
||||
ifndef MODULE_TOP
|
||||
MODULE_TOP=$(CURDIR)
|
||||
endif
|
||||
|
||||
ifndef SRC_TOP
|
||||
SRC_TOP=$(shell dirname $(MODULE_TOP))
|
||||
endif
|
||||
|
||||
ifeq "$(KROOT)" ""
|
||||
$(error $$KROOT is unset.)
|
||||
endif
|
||||
|
||||
ifeq "$(AM_CFLAGS)$(CFLAGS)" ""
|
||||
$(error $$AM_CFLAGS and $$CFLAGS are both unset.)
|
||||
endif
|
||||
|
||||
ifeq "$(AM_CCASFLAGS)$(CCASFLAGS)" ""
|
||||
$(error $$AM_CCASFLAGS and $$CCASFLAGS are both unset.)
|
||||
endif
|
||||
|
||||
ifeq "$(src_libwolfssl_la_OBJECTS)" ""
|
||||
$(error $$src_libwolfssl_la_OBJECTS is unset.)
|
||||
endif
|
||||
|
||||
WOLFSSL_CFLAGS=-DHAVE_CONFIG_H -I$(SRC_TOP) -DBUILDING_WOLFSSL $(AM_CFLAGS) $(CFLAGS) -Wframe-larger-than=262144
|
||||
WOLFSSL_ASFLAGS=-DHAVE_CONFIG_H -I$(SRC_TOP) -DBUILDING_WOLFSSL $(AM_CCASFLAGS) $(CCASFLAGS)
|
||||
WOLFSSL_OBJ_FILES=linuxkm/module_hooks.o $(patsubst %.lo, %.o, $(patsubst src/libwolfssl_la-%, src/%, $(patsubst wolfcrypt/src/src_libwolfssl_la-%, wolfcrypt/src/%, $(src_libwolfssl_la_OBJECTS))))
|
||||
|
||||
export WOLFSSL_CFLAGS WOLFSSL_ASFLAGS WOLFSSL_OBJ_FILES
|
||||
|
||||
libwolfssl.ko:
|
||||
@mkdir -p linuxkm src wolfcrypt/src
|
||||
@if [[ ! -h $(SRC_TOP)/Kbuild ]]; then ln -s $(MODULE_TOP)/Kbuild $(SRC_TOP)/Kbuild; fi
|
||||
make -C $(KROOT) M=$(MODULE_TOP) src=$(SRC_TOP)
|
||||
@@ -1,5 +0,0 @@
|
||||
EXTRA_PROGRAMS = automake_dummy
|
||||
automake_dummy_SOURCES = wolfssl_linuxkm.c
|
||||
module_DATA = wolfssl_linuxkm.o
|
||||
#include ../Makefile.common
|
||||
include Makefile.common
|
||||
@@ -1,20 +0,0 @@
|
||||
# Makefile.common
|
||||
moduledir = @moduledir@
|
||||
KERNEL_LOCATION=@kerneldir@
|
||||
KBUILD_VERBOSE = 1
|
||||
MOD_DEVDIR = $(PWD)
|
||||
|
||||
export module_DATA
|
||||
|
||||
$(module_DATA): $(automake_dummy_SOURCES)
|
||||
echo "not building kernel module yet"
|
||||
|
||||
# mv Makefile Makefile.automake
|
||||
# cp $(srcdir)/../Makefile.kernel Makefile
|
||||
# CPPFLAGS="" CFLAGS="" LDFLAGS="" \
|
||||
# $(MAKE) -C $(KROOT) \
|
||||
# ARCH="$KARCH" CC="gcc" M=$(PWD) modules\
|
||||
# KBUILD_VERBOSE=$(KBUILD_VERBOSE)
|
||||
# mv Makefile.automake Makefile
|
||||
|
||||
CLEANFILES = $(module_DATA) .$(module_DATA).flags $(module_DATA:.o=.mod.c) $(module_DATA:.o=.@kernelext@) *~
|
||||
43
linuxkm/module_hooks.c
Normal file
43
linuxkm/module_hooks.c
Normal file
@@ -0,0 +1,43 @@
|
||||
/* http://h-wrt.com/en/mini-how-to/autotoolsSimpleModule */
|
||||
|
||||
/* src/module_hello.c */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <wolfssl/wolfcrypt/settings.h>
|
||||
#include <wolfssl/wolfcrypt/error-crypt.h>
|
||||
#include <wolfssl/ssl.h>
|
||||
|
||||
static int __init wolfssl_init(void)
|
||||
{
|
||||
int ret = wolfSSL_Init();
|
||||
if (ret != WOLFSSL_SUCCESS) {
|
||||
pr_err("wolfSSL_Init() failed: %s", wc_GetErrorString(ret));
|
||||
return -ENOTRECOVERABLE;
|
||||
}
|
||||
|
||||
pr_info("wolfSSL " LIBWOLFSSL_VERSION_STRING " loaded. See https://www.wolfssl.com/ for information.\n");
|
||||
pr_info("Copyright (C) 2006-2020 wolfSSL Inc. All Rights Reserved.\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
module_init(wolfssl_init);
|
||||
|
||||
static void __exit wolfssl_exit(void)
|
||||
{
|
||||
int ret = wolfSSL_Cleanup();
|
||||
if (ret != WOLFSSL_SUCCESS)
|
||||
pr_err("wolfSSL_Cleanup() failed: %s", wc_GetErrorString(ret));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
module_exit(wolfssl_exit);
|
||||
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_AUTHOR("https://www.wolfssl.com/");
|
||||
MODULE_DESCRIPTION("libwolfssl cryptographic and protocol facilities");
|
||||
MODULE_VERSION(LIBWOLFSSL_VERSION_STRING);
|
||||
@@ -1,28 +0,0 @@
|
||||
/* http://h-wrt.com/en/mini-how-to/autotoolsSimpleModule */
|
||||
|
||||
/* src/module_hello.c */
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
static int __init
|
||||
hello_init(void)
|
||||
{
|
||||
printk("Hello, world!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
module_init(hello_init);
|
||||
|
||||
static void __exit
|
||||
hello_exit(void)
|
||||
{
|
||||
printk("Goodbye, world!\n");
|
||||
}
|
||||
|
||||
module_exit(hello_exit);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("noname ");
|
||||
MODULE_DESCRIPTION("\"Hello, world!\" test module");
|
||||
MODULE_VERSION("printk");
|
||||
Reference in New Issue
Block a user