params.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*
  2. Allows passing parameters at insertion time.
  3. Those parameters can also be read and modified at runtime from /sys.
  4. insmod /params.ko
  5. # dmesg => 0 0
  6. cd /sys/module/params/parameters
  7. cat i
  8. # => 1 0
  9. printf 1 >i
  10. # dmesg => 1 0
  11. rmmod params
  12. insmod /params.ko i=1 j=1
  13. # dmesg => 1 1
  14. rmmod params
  15. modinfo
  16. /params.ko
  17. # Output contains MODULE_PARAM_DESC descriptions.
  18. */
  19. #include <linux/delay.h> /* usleep_range */
  20. #include <linux/kernel.h>
  21. #include <linux/kthread.h>
  22. #include <linux/module.h>
  23. #include <uapi/linux/stat.h> /* S_IRUSR | S_IWUSR */
  24. MODULE_LICENSE("GPL");
  25. static int i = 0;
  26. static int j = 0;
  27. module_param(i, int, S_IRUSR | S_IWUSR);
  28. module_param(j, int, S_IRUSR | S_IWUSR);
  29. MODULE_PARM_DESC(i, "my favorite int");
  30. MODULE_PARM_DESC(j, "my second favorite int");
  31. static struct task_struct *kthread;
  32. static int work_func(void *data)
  33. {
  34. while (!kthread_should_stop()) {
  35. pr_info("%d %d\n", i, j);
  36. usleep_range(1000000, 1000001);
  37. }
  38. return 0;
  39. }
  40. static int myinit(void)
  41. {
  42. kthread = kthread_create(work_func, NULL, "mykthread");
  43. wake_up_process(kthread);
  44. return 0;
  45. }
  46. static void myexit(void)
  47. {
  48. kthread_stop(kthread);
  49. }
  50. module_init(myinit)
  51. module_exit(myexit)