Linux Kernel timer usage

Source: Internet
Author: User
Linux Kernel timer usage-general Linux technology-Linux programming and kernel information. The following is a detailed description. According to the linux driver development details, I copied a second program and used timer.

In general, the usage of timer is still very simple. You need to define a timer_list variable timer and initialize timer first.

Init_timer (& timer );
Then assigns values to related timer parameters:
Timer. function = fun;
Timer. expires = jiffies + TIMER_DELAY;

Add_timer (& timer );
When the timer time is reached, fun will be executed. If you continue the timer, you can
Run
Mod_timer (& timer, jiffies + TIMER_DELAY );

Call
Del_timer (& timer );
Delete the timer.

Simple. Such a simple timer is complete.
Haha.

Appendix:
CODE: # include
# Include
# Include
# Include
# Include
# Include
# Include
# Include
# Include
# Include
# Include
# Include
# Include

# Define SECOND_MAJOR 0

Static int second_major = SECOND_MAJOR;

Struct second_dev
{
Struct cdev;
Atomic_t counter;
Struct timer_list s_timer;
};

Struct second_dev * second_devp;

Static void second_timer_handle (unsigned long arg)
{
Mod_timer (& second_devp-> s_timer, jiffies + HZ );
Atomic_inc (& second_devp-> counter );

Printk (KERN_ERR "current jiffies is % ld \ n", jiffies );
}

Int second_open (struct inode * inode, struct file * filp)
{
Init_timer (& second_devp-> s_timer );
Second_devp-> s_timer.function = & second_timer_handle;
Second_devp-> s_timer.expires = jiffies + HZ;

Add_timer (& second_devp-> s_timer );
Atomic_set (& second_devp-> counter, 0 );
Return 0;
}

Int second_release (struct inode * inode, struct file * filp)
{
Del_timer (& second_devp-> s_timer );

Return 0;
}
Static ssize_t second_read (struct file * filp, char _ user * buf, size_t count,
Loff_t * ppos)
{
Int counter;

Counter = atomic_read (& second_devp-> counter );
If (put_user (counter, (int *) buf ))
{
Return-EFAULT;
} Else
{
Return sizeof (unsigned int );
}

}

Static const struct file_operations second_fops =
{
. Owner = THIS_MODULE,
. Open = second_open,
. Release = second_release,
. Read = second_read,
};
Static void second_setup_cdev (struct second_dev * dev, int index)
{
Int err, devno = MKDEV (second_major, index );
Cdev_init (& dev-> cdev, & second_fops );
Dev-> cdev. owner = THIS_MODULE;
Dev-> cdev. ops = & second_fops;
Err = cdev_add (& dev-> cdev, devno, 1 );
If (err)
{
Printk (KERN_NOTICE "Error % d add second % d", err, index );
}
}
Int second_init (void)
{
Int ret;
Dev_t devno = MKDEV (second_major, 0 );

If (second_major)
{
Ret = register_chrdev_region (devno, 1, "second ");
} Else
{
Ret = alloc_chrdev_region (& devno, 0, 1, "second ");
Second_major = MAJOR (devno );
}
If (ret <0)
{
Return ret;
}

Second_devp = kmalloc (sizeof (struct second_dev), GFP_KERNEL );
If (! Second_devp)
{
Ret =-ENOMEM;
Goto fail_malloc;
}

Memset (second_devp, 0, sizeof (struct second_dev ));

Second_setup_cdev (second_devp, 0 );

Return 0;

Fail_malloc:
Unregister_chrdev_region (devno, 1 );
}

Void second_exit (void)
{
Cdev_del (& second_devp-> cdev );
Kfree (second_devp );
Unregister_chrdev_region (MKDEV (second_major, 0), 1 );
}

MODULE_AUTHOR ("Song Baohua ");
MODULE_LICENSE ("Dual BSD/GPL ");

Module_param (second_major, int, S_IRUGO );

Module_init (second_init );
Module_exit (second_exit );

Attach the client test program:
# Include
# Include
# Include

Int main (void)
{
Int fd, I;
Int data;
Fd = open ("/dev/second", O_RDONLY );
If (fd <0)
{
Printf ("open/dev/second error \ n ");
}
For (I = 0; I <20; I ++)
{
Read (fd, & data, sizeof (data ));
Printf ("read/dev/second is % d \ n", data );
Sleep (1 );
}
Close (fd );
}
Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.