I wrote the following kernel module:
#include <linux/module.h> #include <linux/kernel.h> #include <linux/delay.h> #include <linux/kthread.h> #include <linux/sched.h> #include <linux/semaphore.h> #include <linux/spinlock.h> MODULE_LICENSE("GPL"); MODULE_AUTHOR("Madhuparna Bhowmik <madhuparnabhowmik04@gmail.com>"); MODULE_DESCRIPTION("Example for using threads"); static struct task_struct *t1; static struct task_struct *t2; static int t1_f(void *unused) { printk(KERN_INFO "Current value in t1 is %d",7); do_exit(0); return 0; } static int t2_f(void *unused) { printk(KERN_INFO "Current value in t2 is %d",8); do_exit(0); return 0; } static int __init start_init(void){ printk(KERN_INFO "Thread Creating...\n"); t1 = kthread_run(t1_f,NULL,"mythread1"); t2 = kthread_run(t2_f,NULL,"mythread2"); return 0; } static void __exit end_exit(void){ printk(KERN_INFO "Cleaning Up...\n"); } module_init(start_init) module_exit(end_exit)
When I load this module using :
sudo insmod test1.ko
Checking kern.log file gives the following result:
Oct 8 00:24:13 madhuparna-VirtualBox kernel: [ 5752.075918] Thread creating ...Oct 8 00:24:13 madhuparna-VirtualBox kernel: [ 5752.076009] Current value in t1 is 7
There is no log for thread2 yet.
After I execute :
sudo rmmod test1.ko
The log is:
Oct 8 00:24:13 madhuparna-VirtualBox kernel: [ 5752.075918] Thread creating ...Oct 8 00:24:13 madhuparna-VirtualBox kernel: [ 5752.076009] Current value in t1 is 7Oct 8 00:24:54 madhuparna-VirtualBox kernel: [ 5752.077780] Current value in t2 is 8Oct 8 00:24:54 madhuparna-VirtualBox kernel: [ 5793.099359] Cleaning up ...
So, can someone please explain that why does thread 2 does not start running until I use rmmod and unload the kernel? Why is only thread1 executing?