prcd.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include <linux/fs.h>
  2. #include <linux/init.h>
  3. #include <linux/device.h>
  4. #include <linux/miscdevice.h>
  5. #include <linux/module.h>
  6. #include <linux/gpio.h>
  7. #include <linux/of.h>
  8. #include <linux/of_gpio.h>
  9. #include <asm/uaccess.h>
  10. #include <asm/delay.h>
  11. #include <linux/random.h>
  12. #include "bestemmie.h"
  13. static ssize_t prcd_dev_read(struct file *filep, char *buffer, size_t len, loff_t *offset);
  14. static const struct file_operations prcd_fops = {
  15. .owner = THIS_MODULE,
  16. .read = prcd_dev_read
  17. };
  18. static struct miscdevice prcd_dev = {
  19. MISC_DYNAMIC_MINOR,
  20. "prcd",
  21. &prcd_fops
  22. };
  23. static ssize_t prcd_dev_read(struct file *filep, char *buffer, size_t len, loff_t *offset) {
  24. uint i;
  25. int count;
  26. get_random_bytes(&i, sizeof(i));
  27. i = i % N_BESTEMMIE;
  28. count = strlen(bestemmie[i]);
  29. if (len < count)
  30. return -EINVAL;
  31. if (*offset != 0)
  32. return 0;
  33. if (copy_to_user(buffer, bestemmie[i], count))
  34. return -EINVAL;
  35. *offset = count;
  36. return count;
  37. }
  38. static int __init prcd_init(void) {
  39. int ret;
  40. ret = misc_register(&prcd_dev);
  41. if(ret) {
  42. printk(KERN_ERR "Unable to register prcd device\n");
  43. return ret;
  44. }
  45. return ret;
  46. }
  47. static void __exit prcd_exit(void) {
  48. misc_deregister(&prcd_dev);
  49. }
  50. module_init(prcd_init);
  51. module_exit(prcd_exit);
  52. MODULE_LICENSE("GPL");
  53. MODULE_AUTHOR("encrypt <encrypt@labr.xyz>");
  54. MODULE_DESCRIPTION("prcd in kernel");
  55. MODULE_VERSION("0.1");