Writing a simple Character Device Driver – TutorialsDaddy
On this article we are going to write a personality driver which is able to assist varied operate like open, shut , learn and write. In primary character driver construction as we now have mentioned the elements of a driver. following are the steps to jot down a personality driver.
1) write character driver code:- character driver code incorporates following part
1) Register driver
On the time of init , driver have to register with kernel. We are able to register driver by following operate
main_ quantity :- In our driver code we are going to assume main quantity is 90 .
gadget:- gadget is the title of gadget for which you’re writing the driving force. In our character driver we’re conserving title of our gadget is “mydev” .
file_operation:- File operation is the construction which incorporates the features supported by your gadget.
2) unregister driver
On the time of exit our driver must be unregister with kernel. We are able to unregister it through the use of following operate
3) gadget features
Our driver has to implement all of the features supported by our driver. In our character driver we’re implementing open, learn , write and launch operate.
Under is the code of our driver . Save this file as take a look at.c
static char ker_buf; //driver native buffer
static int dev_open(struct inode *inod, struct file *fil);
static ssize_t dev_read(struct file *filep,char *buf,size_t len,loff_t *off);
static ssize_t dev_write(struct file *flip,const char *buff,size_t len,loff_t *off);
static int dev_release(struct inode *inod,struct file *fil);
//construction containing gadget operation
static struct file_operations fops=
.learn=dev_read, //pointer to gadget learn funtion
.write=dev_write, //pointer to gadget write operate
.open=dev_open, //pointer to gadget open operate
.launch=dev_release, //pointer to gadget realese operate
static int hello_init(void) //init operate to be known as on the time of insmod
printk(KERN_ALERT “gadget registration failed.”);
printk(KERN_ALERT “gadget registredn”);
static void hello_exit(void) //exit operate to be known as on the time of rmmod
static int dev_open(struct inode *inod, struct file *fil)
printk(“KERN_ALERT gadget opened”);
static ssize_t dev_read(struct file *filep,char *buf,size_t len,loff_t *off)
static ssize_t dev_write(struct file *flip,const char *buf,size_t len,loff_t *off)
static int dev_release(struct inode *inod,struct file *fil)
printk(“KERN_ALERT gadget closedn”);
2) Construct driver
To construct driver we have to write, make file and put it aside in the identical listing the place our driver code is save. Under is the instance of make file.
save this file as Makefile. Please be aware that title of file ought to has M capital.
now give make to construct the module.
it can generate take a look at.ko file as an output.
3)inserting driver module
We are able to insert our driver module in kernel through the use of insmod command.
4) make gadget node
As we all know that for person our gadget is only a file. so we have to create a tool node in kernel gadget tree. Following is the command to create the gadget node
mknod path sort main minor
path:- path is the place the place gadget file must be created . Principally we create our gadget file below /dev listing. we give identical title of gadget file which we registered on the time registering our driver. As in above code wehad given gadget title is “mydev”. So we are going to give path as /dev/mydev.
sort:- sort can be “c” or “b” . Climate our gadget can be registered as character gadget or block gadget.
main :- Main variety of driver. In our case we assumed gadget main quantity as 90.
minor:- minor quantity is outlined as minor variety of gadget. we’re assuming this worth to 1.
after creating node you may see your node by giving following command
it can listing out all of the units registered in your system.
6) change permission of gadget
To permits processes to learn and write our gadget we have to change the permission of our gadget by following command
chmod a+r+w /dev/mydev
our driver is prepared now , gadget node is created . we will take a look at our driver by writing a small person house software which is able to open our gadget and can attempt to write and skim to gadget. Following is the code of our take a look at software
this software is writing good day to gadget and studying identical from gadget.
save this file as test_app.c and compile this file as we compile different c file.
cc -o test_app test_app.c
execute this file to check the driving force by following command.