Friday, February 26, 2016

Kernel Module Basic Programs

*******************  Kernel Module Basic Programs************************************

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Program Name :- Module1.c

Description :- This program illustrate the concept of first kernel module program.

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include<linux/module.h>
#include<linux/kernel.h>

int init_module(void)
{
printk(KERN_INFO "Jay shreeKrishna\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Hare Ram\n");
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

File Name :- Makefile

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

obj-m += Module1.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


Program Name :- Module2.c

Description : - This program illustrate the concept, we have to write your user defined entry point functions and its calling mechanism.

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>

static int __init Module_2_init(void)
{
printk(KERN_INFO "Jay shreeKrishna\n");
return 0;
}
static void __exit Module_2_exit(void)
{
printk(KERN_INFO "Jay RadheShyam\n");
}
module_init(Module_2_init);
module_exit(Module_2_exit);

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

File Name :- Makefile

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

obj-m += Module2.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Program Name :- Module3.c

Description :- This program illustrate concept of to define integer variable and print it in kernel log file using kernel module. 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>

static int Module3_data __initdata = 3;

static int __init Module_3_init(void)
{
printk(KERN_INFO "Jay shreeKrishna %d\n", Module3_data);
return 0;
}
static void __exit Module_3_exit(void)
{
printk(KERN_INFO "Jay RadheShyam\n");
}
module_init(Module_3_init);
module_exit(Module_3_exit);

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

File Name :- Makefile

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

obj-m += Module3.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Program Name :- Module4.c

Description :- This program illustrate the concept of GPL Licening schem. See this information using command as " modinfo Module4.ko " 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>

static int __init Module_4_init(void)
{
printk(KERN_INFO "Hello Sunil \n");
return 0;
}

static void __exit Module_4_exit(void)
{
printk(KERN_INFO "Bye Sunil \n");
}

module_init(Module_4_init);
module_exit(Module_4_exit);

MODULE_LICENSE("GPL");

MODULE_AUTHOR("Sunil Bhagwat");

MODULE_DESCRIPTION("This my kernel module");

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

File Name :- Makefile

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

obj-m += Module4.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Program Name :- Module5.c

Description :- This program illustrate the concept of fulle GPL Licening schem.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/*
* hello3.c - Demonstrates module documentation.
*/

#include<linux/module.h> /* Needed by all modules */
#include<linux/kernel.h> /* Needed for KERN_INFO */
#include<linux/init.h> /* Needed for the macros */
#define DRIVER_AUTHOR "Sunil V Bhagwat <p@dirac.org>"
#define DRIVER_DESC "A Sample Driver"

static int __init init_Module_5(void)
{
printk(KERN_INFO "Jay shreeKrishna 3\n");
return 0;
}
static void __exit cleanup_Module_5(void)
{
printk(KERN_INFO "Jay RadheShyam 3\n");
}
module_init(init_Module_5);
module_exit(cleanup_Module_5);
/*
* You can use string, like this:
*/

/*
* Get rid of taint message by declaring code as GPL.
*/
MODULE_LICENSE("GPL");

/*
* Or with defines, like this:
*/

MODULE_AUTHOR(DRIVER_AUTHOR); /* Who wrote this module? */
MODULE_DESCRIPTION(DRIVER_DESC); /* What does this module do */

/*
* This module uses /dev/testdevice. The MODULE_SUPPORTED_DEVICE macro might
* be used in the future to help automatic configuration of modules, but is
* currently unused other than for documentation purposes.
*/
MODULE_SUPPORTED_DEVICE("testdevice"); 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

File Name :- Makefile

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

obj-m += Module5.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Program Name :- Module6.c

Description :- This program illustrate the concept of setting access permission to users.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>
#include<linux/moduleparam.h>
#include<linux/stat.h>

int myint = 20;

module_param(myint, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
MODULE_PARM_DESC(myint, "integer variable");

static int __init Module_6_init(void)
{
printk(KERN_INFO "Hello Sunil %d\n", myint);
return 0;
}

static void __exit Module_6_exit(void)
{
printk(KERN_INFO "Bye sunil\n");
}

module_init(Module_6_init);
module_exit(Module_6_exit);

MODULE_LICENSE("GPL");

MODULE_AUTHOR("Sunil Bhagwat");

MODULE_DESCRIPTION("This is my module for int variable demo");

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

File Name :- Makefile

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

obj-m += Module5.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Program Name :- First.c

Description :- This program illustrate the concept of module split into various file. 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>

int init_module(void)
{
printk(KERN_INFO "Hello sunil bhagwat");
return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Program Name :- Second.c

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>

void cleanup_module(void)
{
printk(KERN_INFO "Bye sunil bhagwat");
}

MODULE_LICENSE("GPL");

MODULE_AUTHOR("Sunil Bhagwat");

MODULE_DESCRIPTION("This is my module");

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

File Name :- Makefile

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

obj-m += FirstSecond.o

FirstSecond-objs := First.o Second.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Program Name :- Driver_1.c

Description :- This Program illustrate the concept of first Driver virtual program .

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include<linux/init.h>
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/fs.h>
#include<asm/uaccess.h>
#include<linux/device.h>

#define DEVICE_NAME "My Driver"

#define CLASS_NAME "MY DEVICE DRIVER"

MODULE_LICENSE("GPL");

MODULE_AUTHOR("Sunil Bhagwat");

MODULE_DESCRIPTION("My Demo Device Driver");

MODULE_VERSION("0.1");

static int majorNumber;

static char message[250] = {0};

static short size_of_message;

static int numberOpens = 0;

static struct class* charClass = NULL;

static struct device* charDevice = NULL;

static int dev_open(struct inode *, struct file *);

static int dev_release(struct inode *, struct file *);

static ssize_t dev_read(struct file *, char *, size_t, loff_t *);

static ssize_t dev_write(struct file *, const char *, size_t, loff_t *);

static struct file_operations fops = 
{
.open = dev_open,
.read = dev_read,
.write = dev_write,
.release = dev_release,
};

static int __init char_init(void)
{
printk(KERN_INFO "MyDriver : Driver loaded sucessfully \n");
majorNumber = register_chrdev(0, DEVICE_NAME, &fops);

if(majorNumber < 0)
{
printk(KERN_ALERT "MyDriver : failed to register a major number \n");
return majorNumber;
}
printk(KERN_INFO "MyDriver : reistered correctly with major number %d \n", majorNumber);

charClass = class_create(THIS_MODULE, CLASS_NAME);

if(IS_ERR(charClass))
{
unregister_chrdev(majorNumber, DEVICE_NAME);
printk(KERN_ALERT "Failed to create the device \n");

return PTR_ERR(charClass);
}
printk(KERN_INFO "MyDriver : device class registered correctly \n");

charDevice = device_create(charClass, NULL, MKDEV(majorNumber, 0), NULL, DEVICE_NAME);

if(IS_ERR(charDevice))
{
class_destroy(charClass);
unregister_chrdev(majorNumber, DEVICE_NAME);
printk(KERN_ALERT  "Failed to create the device \n");
return PTR_ERR(charDevice);
}
printk(KERN_INFO "MyDriver : device class created correctly \n");
return 0;
}

static void __exit char_exit(void)
{
device_destroy(charClass, MKDEV(majorNumber, 0));
class_unregister(charClass);
class_destroy(charClass);
unregister_chrdev(majorNumber, DEVICE_NAME);
printk(KERN_INFO "MyDevice : Goodbye from our driver! \n");
}

static int dev_open(struct inode *inodep, struct file *filep)
{
numberOpens++;
printk(KERN_INFO "MyDriver : Device has been opened %d time(s) \n", numberOpens);
return 0;
}

static ssize_t dev_read(struct file *filep, char *buffer, size_t len, loff_t *offset)
{
int error_count = 0;
error_count = copy_to_user(buffer, message, size_of_message);
if(error_count == 0)
{
printk(KERN_INFO "MyDriver : Sent %d characters to the user \n", size_of_message);
return (size_of_message = 0);
}
else
{
printk(KERN_INFO "MyDriver : Failed to send %d characters to the user \n", error_count);
return -EFAULT;
}
}

static ssize_t dev_write(struct file *filep, const char *buffer, size_t len, loff_t *offset)
{
sprintf(message, "%s(%d letters)", buffer, len);
size_of_message = strlen(message);
printk(KERN_INFO "MyDriver : Received %dcharacters from the user \n",len);
return len;
}

static int dev_release(struct inode *inodep, struct file *filep) 
{
printk(KERN_INFO "MyDriver : Device successfully closed \n");
return 0;
}


module_init(char_init);
module_exit(char_exit);

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

File Name :- Makefile

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

obj-m += Driver_1.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Program Name :- Demo.c

Description :- This is a demo program to access that virtual device.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<fcntl.h>
#include<string.h>

#define BUFFER_LENGTH 256

static char receive[BUFFER_LENGTH];

int main()
{
int ret, fd;
char stringToSend[BUFFER_LENGTH];
printf("Starting device test code example...\n");
fd = open("/dev/My Driver", O_RDWR);
if(fd < 0)
{
perror("Failed to open the device...");
return errno;
}
printf("Type in a short string to send to the kernel module: \n ");
scanf("%[^\n]%*c",stringToSend);
printf("Writing message to he device [%s].\n",stringToSend);
ret = write(fd, stringToSend, strlen(stringToSend));

if(ret < 0)
{
perror("Failed to write the message to the device.");
return errno;
}
printf("Press Enter to read back from the device...\n");
getchar();
printf("Reading from the device...\n");
ret = read(fd, receive, BUFFER_LENGTH);
if(ret < 0)
{
perror("Failed to read the message from the device.");
return errno;
}
printf("The received message is:[%s]\n",receive);
printf("End of the program\n");
return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Program Name :- Driver_2.c

Description :- This program illustrate the concept of registering the Driver program.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include<linux/module.h>
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/types.h>
#include<linux/fs.h>
#include<linux/kdev_t.h>

static dev_t mydev;

static char buffer[64];

MODULE_AUTHOR("Sunil Bhagwat");
MODULE_LICENSE("GPL");

static __init chardrv_in(void)
{
printk(KERN_INFO "Character driver being loaded.\n");
alloc_chrdev_region(&mydev, 0, 1, "Demo Driver");

printk(KERN_INFO "Information of our driver is %s \n", format_dev_t(buffer, mydev));
return 0;
}

static void __exit chardrv_out(void)
{
printk(KERN_INFO "Characterr driver being unloaded. \n");
unregister_chrdev_region(mydev, 1);
}

module_init(chardrv_in);
module_exit(chardrv_out);

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


File Name :- Makefile

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

obj-m += Driver_2.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


No comments:

Post a Comment

SYBSc (CS) Sem III : Data Structure Slip 20 Que - 2

    SAVITIBAI PHULE UNIVERSITY OF PUNE S. Y. B.Sc. (Computer Science) Semester III Practical Examination       SUBJECT: CS-233 Practical cou...