diff --git a/CMakeLists.txt b/CMakeLists.txt index a226aa7..90e5329 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,9 +3,11 @@ cmake_minimum_required(VERSION 3.13) include(pico_sdk_import.cmake) project(pico_rng C CXX ASM) + set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) pico_sdk_init() add_subdirectory(firmware) +add_subdirectory(driver) diff --git a/driver/CMakeLists.txt b/driver/CMakeLists.txt new file mode 100644 index 0000000..ae638a2 --- /dev/null +++ b/driver/CMakeLists.txt @@ -0,0 +1,49 @@ +cmake_minimum_required(VERSION 3.13) + +project(pico_rng_driver LANGUAGES C) +set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) + +# Find kernel headers +execute_process( + COMMAND uname -r + OUTPUT_VARIABLE KERNEL_RELEASE + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +# Find the headers +find_path(KERNELHEADERS_DIR + include/linux/user.h + PATHS /usr/src/linux-headers-${KERNEL_RELEASE} + ) + +message(STATUS "Kernel release: ${KERNEL_RELEASE}") +message(STATUS "Kernel headers: ${KERNELHEADERS_DIR}") + +if (KERNELHEADERS_DIR) + set(KERNELHEADERS_INCLUDE_DIRS + ${KERNELHEADERS_DIR}/include + ${KERNELHEADERS_DIR}/arch/x86/include + CACHE PATH "Kernel headers include dirs" + ) + set(KERNELHEADERS_FOUND 1 CACHE STRING "Set to 1 if kernel headers were found") +else (KERNELHEADERS_DIR) + set(KERNELHEADERS_FOUND 0 CACHE STRING "Set to 1 if kernel headers were found") +endif (KERNELHEADERS_DIR) + +mark_as_advanced(KERNELHEADERS_FOUND) + +#find_package(KernelHeaders REQUIRED) +include_directories(${KERNELHEADERS_INCLUDE_DIRS}) + +set(DRIVER_FILE pico_rng.ko) +set(KBUILD_CMD $(MAKE) -C ${KERNELHEADERS_DIR} modules M=${CMAKE_CURRENT_BINARY_DIR} src=${CMAKE_CURRENT_SOURCE_DIR}) +#FILE(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/Kbuild "obj-m := pico_rng.o") + +add_custom_command(OUTPUT ${DRIVER_FILE} + COMMAND ${KBUILD_CMD} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS pico_rng.c VERBATIM) + +add_custom_target(pico_rng_driver ALL DEPENDS ${DRIVER_FILE}) + diff --git a/driver/Kbuild b/driver/Kbuild new file mode 100644 index 0000000..47e9a50 --- /dev/null +++ b/driver/Kbuild @@ -0,0 +1 @@ +obj-m := pico_rng.o diff --git a/driver/pico_rng.c b/driver/pico_rng.c new file mode 100644 index 0000000..3fe3ce4 --- /dev/null +++ b/driver/pico_rng.c @@ -0,0 +1,23 @@ +#include +#include +#include + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Mickey Malone"); +MODULE_DESCRIPTION("Random number generator using a Raspberry Pi Pico"); +MODULE_VERSION("1.0"); + +static int __init driver_init(void) +{ + printk(KERN_INFO "Raspberry Pi Pico RNG\n"); + return 0; +} + +static void __exit driver_exit(void) +{ + return; +} + +module_init(driver_init); +module_exit(driver_exit); +