diff --git a/Makefile.dep b/Makefile.dep index 47f9d795bba43ab9972175a674ab1fa4364a0ed5..b5012a6f426b3c496072eab1500a2f888f5640a0 100644 --- a/Makefile.dep +++ b/Makefile.dep @@ -656,6 +656,8 @@ ifneq (,$(filter random,$(USEMODULE))) ifneq (,$(filter prng_tinymt32,$(USEMODULE))) USEMODULE += tinymt32 endif + + USEMODULE += luid endif ifneq (,$(filter openthread_contrib,$(USEMODULE))) diff --git a/sys/auto_init/auto_init.c b/sys/auto_init/auto_init.c index 726b673ab736a205d8289af7aa8626c305d94d9f..fa1248e3a6bea2703fd9ed331914c42aca1db8c8 100644 --- a/sys/auto_init/auto_init.c +++ b/sys/auto_init/auto_init.c @@ -80,10 +80,6 @@ #include "net/fib.h" #endif -#ifdef MODULE_PRNG -#include "random.h" -#endif - #ifdef MODULE_GCOAP #include "net/gcoap.h" #endif @@ -99,7 +95,8 @@ void auto_init(void) { #ifdef MODULE_PRNG - random_init(0); + void auto_init_random(void); + auto_init_random(); #endif #ifdef MODULE_XTIMER DEBUG("Auto init xtimer module.\n"); diff --git a/sys/random/Makefile b/sys/random/Makefile index 372beceac515d95746396f34e8deb2306d97f80f..1068de18a3ee1fb73a29a0a6a06ff887a1753ea0 100644 --- a/sys/random/Makefile +++ b/sys/random/Makefile @@ -1,3 +1,5 @@ +SRC := seed.c + BASE_MODULE := prng SUBMODULES := 1 diff --git a/sys/random/seed.c b/sys/random/seed.c new file mode 100644 index 0000000000000000000000000000000000000000..b60f1285c797bc9e9e093926873549e97ef16d1c --- /dev/null +++ b/sys/random/seed.c @@ -0,0 +1,41 @@ +/** + * Copyright (C) 2017 Kaspar Schleiser <kaspar@schleiser.de> + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + + /** + * @ingroup sys_random + * @{ + * @file + * + * @brief PRNG seeding + * + * @author Kaspar Schleiser <kaspar@schleiser.de> + * @} + */ + +#include <stdint.h> + +#include "log.h" +#include "luid.h" +#include "periph/cpuid.h" +#include "random.h" + +#define ENABLE_DEBUG (0) +#include "debug.h" + +void auto_init_random(void) +{ + uint32_t seed; +#ifdef MODULE_PERIPH_CPUID + luid_get(&seed, 4); +#else + LOG_WARNING("random: NO SEED AVAILABLE!\n"); + seed = 1; +#endif + DEBUG("random: using seed value %u\n", (unsigned)seed); + random_init(seed); +}