params.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. modprobe insertion can also set default parameters via the /etc/modprobe.conf file. So:
  19. modprobe params
  20. Outputs:
  21. 12 34
  22. */
  23. #include <linux/delay.h> /* usleep_range */
  24. #include <linux/kernel.h>
  25. #include <linux/kthread.h>
  26. #include <linux/module.h>
  27. #include <uapi/linux/stat.h> /* S_IRUSR | S_IWUSR */
  28. static int i = 0;
  29. static int j = 0;
  30. module_param(i, int, S_IRUSR | S_IWUSR);
  31. module_param(j, int, S_IRUSR | S_IWUSR);
  32. MODULE_PARM_DESC(i, "my favorite int");
  33. MODULE_PARM_DESC(j, "my second favorite int");
  34. static struct task_struct *kthread;
  35. static int work_func(void *data)
  36. {
  37. while (!kthread_should_stop()) {
  38. pr_info("%d %d\n", i, j);
  39. usleep_range(1000000, 1000001);
  40. }
  41. return 0;
  42. }
  43. static int myinit(void)
  44. {
  45. kthread = kthread_create(work_func, NULL, "mykthread");
  46. wake_up_process(kthread);
  47. return 0;
  48. }
  49. static void myexit(void)
  50. {
  51. kthread_stop(kthread);
  52. }
  53. module_init(myinit)
  54. module_exit(myexit)
  55. MODULE_LICENSE("GPL");