3 Commits

Author SHA1 Message Date
ace684facc hotfix: checkpatch-related issues 2024-12-01 20:49:22 +02:00
f11d2bc921 add script for automatic module insertion testing 2024-12-01 20:42:43 +02:00
331a1ecb0b hotfix: move msg_count argument
Move msg_count handling to hello2 to comply with lab5 requirements
2024-12-01 19:43:54 +02:00
5 changed files with 72 additions and 21 deletions

View File

@@ -44,7 +44,6 @@ struct TimingList {
ktime_t t_after; ktime_t t_after;
}; };
static unsigned int msg_count = 1;
static struct TimingList *tl_head; static struct TimingList *tl_head;
static struct TimingList *write_first_node(void) static struct TimingList *write_first_node(void)
@@ -94,22 +93,14 @@ void destroy_list(void)
curr_tl = next_tl; curr_tl = next_tl;
} }
} }
EXPORT_SYMBOL(destroy_list);
static int __init hello_init(void) static int __init hello_init(void)
{ {
if (msg_count > 10) {
pr_err("Error: msg_count too large (%d > 10)\n", msg_count);
return -EINVAL;
}
if (msg_count == 0 || msg_count >= 5) {
pr_warn("Warning: msg_count = %d (msg_count == 0 or 5 <= msg_count <= 10)\n", msg_count);
}
return 0; return 0;
} }
void print_hello(void) void print_hello(int msg_count)
{ {
int i; int i;
struct TimingList *current_tail = tl_head; struct TimingList *current_tail = tl_head;
@@ -122,17 +113,13 @@ void print_hello(void)
current_tail->t_after = ktime_get(); current_tail->t_after = ktime_get();
} }
} }
EXPORT_SYMBOL(print_hello);
static void __exit hello_exit(void) static void __exit hello_exit(void)
{ {
destroy_list(); destroy_list();
} }
module_param(msg_count, uint, 0444);
MODULE_PARM_DESC(msg_count, "Amount of hello world outputs on load");
EXPORT_SYMBOL(print_hello);
EXPORT_SYMBOL(destroy_list);
module_init(hello_init); module_init(hello_init);
module_exit(hello_exit); module_exit(hello_exit);

View File

@@ -40,9 +40,19 @@ MODULE_AUTHOR("Serhii Popovych <serhii.popovych@globallogic.com>");
MODULE_DESCRIPTION("Hello, world in Linux Kernel Training"); MODULE_DESCRIPTION("Hello, world in Linux Kernel Training");
MODULE_LICENSE("Dual BSD/GPL"); MODULE_LICENSE("Dual BSD/GPL");
static unsigned int msg_count = 1;
static int __init hello_init(void) static int __init hello_init(void)
{ {
print_hello(); if (msg_count > 10) {
pr_err("Error: msg_count too large (%d > 10)\n", msg_count);
return -EINVAL;
}
if (msg_count == 0 || msg_count >= 5)
pr_warn("Warning: msg_count = %d (msg_count == 0 or 5 <= msg_count <= 10)\n", msg_count);
print_hello(msg_count);
return 0; return 0;
} }
@@ -51,5 +61,8 @@ static void __exit hello_exit(void)
destroy_list(); destroy_list();
} }
module_param(msg_count, uint, 0444);
MODULE_PARM_DESC(msg_count, "Amount of hello world outputs on load");
module_init(hello_init); module_init(hello_init);
module_exit(hello_exit); module_exit(hello_exit);

View File

@@ -1,2 +1,2 @@
void print_hello(void); void print_hello(int msg_count);
void destroy_list(void); void destroy_list(void);

18
test.sh Executable file
View File

@@ -0,0 +1,18 @@
#!/bin/sh
if [ -z "$1" ]; then
echo "Error: no script supplied"
echo "Usage: $0 path/to/testing/script"
exit 1
fi
while read l; do
if [ -z "$l" ]; then
continue;
fi;
echo "$ $l";
$($l);
echo -e ""
done < $1

33
tests/lab5-test Normal file
View File

@@ -0,0 +1,33 @@
insmod hello2.ko
insmod hello1.ko
insmod hello2.ko
rmmod hello2.ko
insmod hello2.ko msg_count=0
rmmod hello2.ko
insmod hello2.ko msg_count=1
rmmod hello2.ko
insmod hello2.ko msg_count=3
rmmod hello2.ko
insmod hello2.ko msg_count=5
rmmod hello2.ko
insmod hello2.ko msg_count=8
rmmod hello2.ko
insmod hello2.ko msg_count=10
rmmod hello2.ko
insmod hello2.ko msg_count=12
rmmod hello2.ko
insmod hello2.ko
rmmod hello1.ko
rmmod hello2.ko
rmmod hello1.ko