Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<linux/module.h>
- #include<linux/random.h>
- #include<linux/kfifo.h>
- #define NUMBER_OF_ELEMENTS 2
- static char* foo = "Pierwszy ciag znakowy";
- module_param(foo,charp,0644);
- MODULE_PARM_DESC(foo,"ciag pierwszy");
- static char* foo2 = "drugi ciag znakowy";
- module_param(foo2,charp,0644);
- MODULE_PARM_DESC(foo2,"ciag drugi");
- static struct kfifo fifo_queue;
- static int __init fifomod_init(void)
- {
- int returned_value;
- unsigned int returned_size;
- char buff[20];
- int fifo_size = sizeof(foo)+sizeof(foo2);
- returned_value = kfifo_alloc(&fifo_queue,fifo_size,GFP_KERNEL);
- if(returned_value) {
- pr_alert("Error allocating kfifo!\n");
- return -ENOMEM;
- }
- while(!kfifo_is_full(&fifo_queue)) {
- returned_size = kfifo_in(&fifo_queue,foo,sizeof(foo));
- if(returned_size!=sizeof(foo))
- pr_alert("Enqueue error 1\n");
- returned_size = kfifo_in(&fifo_queue,foo2,sizeof(foo2));
- if(returned_size!=sizeof(foo2))
- pr_alert("Enqueue error 2\n");
- }
- returned_size = kfifo_out_peek(&fifo_queue,buff,sizeof(buff));
- if(returned_size!=sizeof(buff))
- pr_alert("Error peeking element form the queue!\n");
- pr_notice("Value in the queue: %u\n",buff);
- return 0;
- }
- static void __exit fifomod_exit(void)
- {
- int returned_size;
- char buff[20];
- while(!kfifo_is_empty(&fifo_queue)) {
- returned_size = kfifo_out(&fifo_queue,buff,sizeof(buff));
- if(returned_size!=sizeof(buff))
- pr_alert("Dequeue error!\n");
- pr_notice("Value from the queue: %u\n",buff);
- }
- kfifo_free(&fifo_queue);
- }
- module_init(fifomod_init);
- module_exit(fifomod_exit);
- MODULE_AUTHOR("Arkadiusz Chrobot <a.chrobot@tu.kielce.pl>");
- MODULE_LICENSE("GPL");
- MODULE_DESCRIPTION("An exemplary module demonstrating the usage of a kernel FIFO queue.");
- MODULE_VERSION("1.0");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement