Skip to content
This repository has been archived by the owner on Nov 1, 2023. It is now read-only.

Commit

Permalink
Add logic to aid in the in-kernel build
Browse files Browse the repository at this point in the history
In the in-kernel build, Kbuild replaces autotools
for the user space part. Add some makefile snippets
and a script used to aid in that setup.
Not used by the github version at the moment.

Change-Id: Id2d9508cdabf0da2b9efcec0a0fca99ada90922b
Signed-off-by: Knut Omang <knut.omang@oracle.com>
Reviewed-on: https://review.no.oracle.com:8443/c/ktf/+/16363
Reviewed-by: Alan Maguire <alan.maguire@oracle.com>
  • Loading branch information
Knut Omang committed Aug 12, 2019
1 parent 90d73a0 commit a5ccb72
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 1 deletion.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,4 @@ libtool
*.cmd
*.o
*.ko
*.mk
*.xml
16 changes: 16 additions & 0 deletions scripts/ktf_syms.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
ktf_symfile=$(shell (cd $(srctree)/$(src) && ls ktf_syms.txt 2> /dev/null || true))
ktf_syms = $(ktf_symfile:%.txt=%.h)

ifneq ($(ktf_symfile),)

$(obj)/self.o: $(obj)/$(ktf_syms)

ktf_scripts = $(srctree)/$(src)/../scripts

$(obj)/$(ktf_syms): $(srctree)/$(src)/ktf_syms.txt $(ktf_scripts)/resolve
@echo " KTFSYMS $@"
$(Q)$(ktf_scripts)/resolve $(ccflags-y) $< $@

clean-files += $(ktf_syms)

endif
3 changes: 3 additions & 0 deletions scripts/runtests.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
TEST_PROGS := scripts/runtests.sh

include ../lib.mk
100 changes: 100 additions & 0 deletions scripts/runtests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
#!/bin/bash -e

verbose=1

# Convenience function to return a string that
# is a reverse list of the incoming arguments:
#
reverse()
{
args=($*)
for (( i=((${#args[*]} - 1)); i >= 0; i-- )); do
echo ${args[$i]}
done
}

# Set paths to a particular module - if no path is set to a module, use modprobe:
#
declare -A a_mpath
mpath()
{
local module="$1"
local mpath="$2"
[[ $mpath != "" ]] || fail "Usage: mpath module path"

a_mpath[$module]="$BUILD/$mpath"
}

# Set parameters to load a given module with for test purposes:
declare -A a_params
params()
{
local module="$1"
shift
a_params[$module]="$*"
}

log()
{
(( $verbose )) && echo $*
}

mod_probe()
{
local fm=""
local name="$1"
shift

mp=${a_mpath[$name]}
if [[ $mp != "" ]]; then
fm="$mp"
fi

is_loaded=$(lsmod | egrep "^$name" || true)
if [[ $is_loaded != "" ]]; then
echo "Module \"$name\" is already loaded!" 1>&2
return 0
fi

if [[ $fm == "" ]]; then
log "Modprobing $name"
$sudo modprobe $name ${a_params[$name]}
else
fm=${a_mpath[$name]}
log "Insmod'ing module \"$name\"" 1>&2
$sudo insmod $fm ${a_params[$name]}
fi
}

# If/when more modules are to be loaded, this could go in a config file
# but for the purpose of this example, just do it inline:
#
mpath ktf ktf/kernel/ktf.ko
mpath selftest ktf/selftest/selftest.ko

load_modules="ktf selftest"

unload_modules=$(reverse $load_modules)

sudo=""
if [[ $USER != "root" ]]; then
sudo="sudo"
fi

for m in $load_modules; do
mod_probe $m
done

if [[ $GTEST_PATH == "" ]];then
echo "Set environment variable GTEST_PATH to point to your googletest build!"
exit 1
fi

export LD_LIBRARY_PATH="$BUILD/ktf/lib:$GTEST_PATH/lib64:$GTEST_PATH/lib"
$BUILD/ktf/user/ktftest || stat=$?

for m in $unload_modules; do
$sudo rmmod $m
done

exit $stat
14 changes: 14 additions & 0 deletions scripts/top_make.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
ifneq ($(TARGETS),)
# We end up here if called from selftests/Makefile
# Invoke our "module target" to get everything built
all:
$(Q)$(MAKE) -C $(abs_objtree) M=tools/testing/selftests/ktf

clean:
$(Q)$(MAKE) -C $(abs_objtree) M=tools/testing/selftests/ktf clean

run_tests:
@echo "running tests"
$(MAKE) BUILD=$(abs_objtree)/tools/testing/selftests -f scripts/runtests.mk $@

endif

0 comments on commit a5ccb72

Please sign in to comment.