From a05667a7c7004bdf2938159aa348228710da6c3d Mon Sep 17 00:00:00 2001 From: Markus Rosenstihl Date: Mon, 26 Mar 2018 15:21:11 +0200 Subject: [PATCH] Fix T92: kernel modules are build for all kernel headers general.cpp now compiles on stretch debian/compat bumped from 7 to 9 --- debian/compat | 2 +- drivers/Spectrum-MI40xxSeries/CMakeLists.txt | 69 ++++++++++++++------ drivers/SpinCore-PulseBlaster/CMakeLists.txt | 30 +++++---- machines/general.cpp | 18 ++--- 4 files changed, 77 insertions(+), 42 deletions(-) diff --git a/debian/compat b/debian/compat index 7f8f011..ec63514 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -7 +9 diff --git a/drivers/Spectrum-MI40xxSeries/CMakeLists.txt b/drivers/Spectrum-MI40xxSeries/CMakeLists.txt index abb6ece..5207a27 100644 --- a/drivers/Spectrum-MI40xxSeries/CMakeLists.txt +++ b/drivers/Spectrum-MI40xxSeries/CMakeLists.txt @@ -21,31 +21,58 @@ add_custom_command(OUTPUT ${SPC_HEADERS} # If the "linux" folder exists the driver will be build. # Alternatively you can set the SPC_SOURCE environment variable to the micx_drv folder -if(DEFINED ENV{SPC_SOURCE}) - message(STATUS "SPC_SOURCE environment variable set" $ENV{SPC_SOURCE}) +message("\nIf you have signed the NDA from Spectrum and got a kernel driver tarball (i.e. drvsrc_all_V*.tgz), put it in:\n\n\t" ${CMAKE_CURRENT_SOURCE_DIR} "\n\nto get a kernel module built\n") +file(GLOB MILIST "drvsrc_all_V*.tgz" ) +# sort and select last (alphabetic order) tarball driver +list(SORT MILIST ) +list(GET MILIST -1 MITGZ ) +message(STATUS ${MITGZ}) + +if(EXISTS ${MITGZ}) + message(STATUS "Using spectrum driver source tarball: " ${MITGZ}) + add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/linux/src_all/micx_drv + COMMAND tar xfvz ${MITGZ} + COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/linux/src_all/micx_drv/makefile.kernel26 ${CMAKE_CURRENT_SOURCE_DIR}/linux/src_all/micx_drv/Makefile + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Unpacking Spectrum driver tarball" + VERBATIM) + set(SPC_SRC "${CMAKE_CURRENT_SOURCE_DIR}/linux/src_all/micx_drv") + add_custom_target(spc_smp ALL DEPENDS linux/src_all/micx_drv) + +elseif(DEFINED ENV{SPC_SOURCE}) + message(STATUS "SPC_SOURCE environment variable set:" $ENV{SPC_SOURCE}) set(SPC_SRC $ENV{SPC_SOURCE}) -else() - set(SPC_SRC ${CMAKE_CURRENT_SOURCE_DIR}/linux/src_all/micx_drv) - message(WARNING "Spectrum driver source path not defined in envirnoment variable SPC_SOURCE, using default:" ${SPC_SOURCE}) -endif() -set(DRIVER_FILE ${SPC_SRC}/spc_smp.ko ) -set(KERNEL_DIR "/lib/modules/${CMAKE_SYSTEM_VERSION}/build" ) -set(KBUILD_CMD ${CMAKE_MAKE_PROGRAM} - -C ${KERNEL_DIR} - M=${SPC_SRC} modules) - -add_custom_command(OUTPUT ${DRIVER_FILE} - COMMAND ${KBUILD_CMD} - COMMENT "Building spc_smp.ko" - WORKING_DIRECTORY ${SPC_SRC} - VERBATIM) -if(EXISTS ${SPC_SRC}) - add_custom_target (micx_drv ALL DEPENDS ${DRIVER_FILE} ) - install(FILES ${DRIVER_FILE} DESTINATION /lib/modules/${CMAKE_SYSTEM_VERSION}/kernel/damaris) else() - message(WARNING "Spectrum MI40xx kernel driver not found " ${SPC_SRC} " unpack and configure it (i.e. set SPC_SOURCE variable") + set(SPC_SRC "${CMAKE_CURRENT_SOURCE_DIR}/linux/src_all/micx_drv") + message(WARNING "Spectrum driver source path not defined in envirnoment variable SPC_SOURCE, using default:" ${SPC_SRC}) endif() + + +set(DRIVER_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +file(GLOB KERNEL_VERSIONS_DIR RELATIVE "/lib/modules" "/lib/modules/*/build") +foreach(KERNEL_DIR ${KERNEL_VERSIONS_DIR}) + string(REPLACE "/build" "" KERNEL_VERSION ${KERNEL_DIR}) + message(STATUS "Compiling spc_smp.ko for kernel: " ${KERNEL_VERSION}) + set(DRIVER_FILE ${KERNEL_VERSION}/spc_smp.ko ) + set(KBUILD_CMD ${CMAKE_MAKE_PROGRAM} + -C "/lib/modules/${KERNEL_DIR}" + M=${SPC_SRC} modules) + + add_custom_command(OUTPUT ${DRIVER_FILE} + COMMAND ${KBUILD_CMD} + COMMAND mkdir -p ${DRIVER_DIRECTORY}/${KERNEL_VERSION} + COMMAND mv -fv ${SPC_SRC}/spc_smp.ko ${DRIVER_DIRECTORY}/${KERNEL_VERSION}/spc_smp.ko + COMMENT "Building spc_smp.ko for kernel version: " ${KERNEL_VERSION} + WORKING_DIRECTORY ${SPC_SRC} + VERBATIM) + if(EXISTS ${SPC_SRC}) + add_custom_target (micx_drv_${KERNEL_VERSION} ALL DEPENDS ${DRIVER_FILE} ) + install(FILES ${DRIVER_FILE} DESTINATION /lib/modules/${KERNEL_VERSION}/kernel/damaris) +else() + message(WARNING "Spectrum MI40xx kernel driver not found " ${SPC_SRC} " unpack and configure it (i.e. set SPC_SOURCE variable)") +endif() +endforeach(KERNEL_DIR) add_library(Spectrum_MI40xxSeries STATIC Spectrum-MI40xxSeries.cpp GatedData.cpp ${SPC_HEADERS}) add_executable(hw_test_ext hw_test_extclock.cpp GatedData.cpp ${SPC_HEADERS}) diff --git a/drivers/SpinCore-PulseBlaster/CMakeLists.txt b/drivers/SpinCore-PulseBlaster/CMakeLists.txt index d401b66..3f2142e 100644 --- a/drivers/SpinCore-PulseBlaster/CMakeLists.txt +++ b/drivers/SpinCore-PulseBlaster/CMakeLists.txt @@ -1,21 +1,29 @@ cmake_minimum_required(VERSION 3.0) -# Creating pulseblaster kernel module -set(DRIVER_FILE ${CMAKE_CURRENT_SOURCE_DIR}/pulseblaster.ko ) -set(KERNEL_DIR "/lib/modules/${CMAKE_SYSTEM_VERSION}/build" ) -set(KBUILD_CMD ${CMAKE_MAKE_PROGRAM} - -C ${KERNEL_DIR} + + +set(DRIVER_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +file(GLOB KERNEL_VERSIONS_DIR RELATIVE "/lib/modules" "/lib/modules/*/build") +foreach(KERNEL_DIR ${KERNEL_VERSIONS_DIR}) + string(REPLACE "/build" "" KERNEL_VERSION ${KERNEL_DIR}) + message(STATUS "Compiling pulseblaster.ko for kernel: " ${KERNEL_VERSION}) + + # Creating pulseblaster kernel module + set(DRIVER_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${KERNEL_VERSION}/pulseblaster.ko ) + set(KBUILD_CMD ${CMAKE_MAKE_PROGRAM} + -C "/lib/modules/${KERNEL_DIR}" M=${CMAKE_CURRENT_SOURCE_DIR} modules) -add_custom_command(OUTPUT ${DRIVER_FILE} + add_custom_command(OUTPUT ${DRIVER_FILE} COMMAND ${KBUILD_CMD} -# COMMAND cp -f ${DRIVER_FILE} ${DRIVER_BIN_FILE} - COMMENT "Building pulseblaster.ko" + COMMAND mkdir -p ${KERNEL_VERSION} + COMMAND mv -fv pulseblaster.ko ${DRIVER_FILE} + COMMENT "Building pulseblaster.ko for kernel version: " ${KERNEL_VERSION} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} VERBATIM) -add_custom_target(pulseblaster_drv ALL DEPENDS ${DRIVER_FILE} ) -install(FILES ${DRIVER_FILE} DESTINATION /lib/modules/${CMAKE_SYSTEM_VERSION}/kernel/damaris) - + add_custom_target(pulseblaster_driver_${KERNEL_VERSION} ALL DEPENDS ${DRIVER_FILE} ) + install(FILES ${DRIVER_FILE} DESTINATION /lib/modules/${KERNEL_VERSION}/kernel/damaris) +endforeach(KERNEL_DIR) #include_directories(..) add_library(SpinCore-PulseBlaster SpinCore-PulseBlaster.cpp) add_library(PulseBlasterProgram PulseBlasterProgram.cpp) diff --git a/machines/general.cpp b/machines/general.cpp index c44be95..c8d0f70 100644 --- a/machines/general.cpp +++ b/machines/general.cpp @@ -98,19 +98,19 @@ public: ttlout trigger; trigger.id = g_key_file_get_integer(cfg_file, "ADC", "id", &error); if (error) - g_error(error->message); + g_error("%s",error->message); error = NULL; trigger.ttls = (channel_array) (1 << g_key_file_get_integer(cfg_file, "ADC", "trigger_line", &error)); if (error) - g_error(error->message); + g_error("%s",error->message); error = NULL; int ext_reference_clock = (int) g_key_file_get_double(cfg_file, "ADC", "refclock", &error); // 50 MHz from PB24 SP17; defaults to 100MHz (PB24 SP 2) if (error) - g_error(error->message); + g_error("%s",error->message); error = NULL; double impedance = g_key_file_get_double(cfg_file, "ADC", "impedance", &error); // Ohm ( or 50 Ohm) if (error) - g_error(error->message); + g_error("%s",error->message); error = NULL; my_adc = new SpectrumMI40xxSeries(trigger, (float) impedance, ext_reference_clock); @@ -118,15 +118,15 @@ public: /* configure PulseBlaster */ int pb_id = g_key_file_get_integer(cfg_file, "PB", "id", &error); if (error) - g_error(error->message); + g_error("%s",error->message); error = NULL; double pb_refclock = g_key_file_get_double(cfg_file, "PB", "refclock", &error); if (error) - g_error(error->message); + g_error("%s",error->message); error = NULL; int pb_sync_bit = g_key_file_get_integer(cfg_file, "PB", "sync_line", &error); if (error) - g_error(error->message); + g_error("%s",error->message); error = NULL; int pb_sync = 0; if (pb_sync_bit != 128) { @@ -141,13 +141,13 @@ public: /* configure PTS */ int pts_id = g_key_file_get_integer(cfg_file, "PTS", "id", &error); if (error) - g_error(error->message); + g_error("%s",error->message); error = NULL; my_pts = new PTS_latched(pts_id); // PTS 500 has 0.36 or 0.72 above 200MHz ; PTS 310 has 0.225 degrees/step my_pts->phase_step = (float) g_key_file_get_double(cfg_file, "PTS", "phase_stepsize", &error); if (error) - g_error(error->message); + g_error("%s",error->message); error = NULL; // publish devices