【Linux设备驱动程序(第三版)】----获取当前时间
jit.c
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/time.h>
#include <linux/timer.h>
#include <linux/proc_fs.h>
#include <linux/spinlock.h>
#include <linux/interrupt.h>
#include <asm/hardirq.h>
#include <linux/sched.h>//jiffies
#include <linux/kernel.h>
#include <linux/types.h>//u64
#include <linux/fs.h>//file_operations, file
#include <linux/completion.h>
#include <asm/uaccess.h>//copy_to_user & copy_from_user
int jit_currentime(char *buf, char **start, off_t offset, int len, int *eof, void *data)
{
struct timeval tv1;
struct timespec tv2;
unsigned long j1;
u64 j2;
j1 = jiffies;
j2 = get_jiffies_64();
do_gettimeofday(&tv1);
tv2 = current_kernel_time();
len = 0;
len += sprintf(buf,"0x%08lx 0x%016Lx %10i.%06i\n"
"%40i.%09i\n",
j1, j2,
(int) tv1.tv_sec, (int) tv1.tv_usec,
(int) tv2.tv_sec, (int) tv2.tv_nsec);
*start = buf;
return len;
}
int __init jit_init(void)
{
printk(KERN_DEBUG "jit_init......");
create_proc_read_entry("jit_currentime", 0, NULL, jit_currentime, NULL);
return 0;
}
void __exit jit_exit(void)
{
remove_proc_entry("jit_currentime", NULL);
}
MODULE_LICENSE("Dual BSD/GPL");
module_init(jit_init);
module_exit(jit_exit);
Makefile
obj-m:= jit.o
modules-objs:= jit.o
KDIR:= /usr/src/linux-headers-2.6.31-14-generic/
PWD:= $(shell pwd)
default:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.ko *.mod.c *.mod.o *.o *.markers *.symvers *.order
装载驱动
insmod jit.ko
测试
cat /proc/jit_currentime
输出结果:
0x000d52fd 0x00000001000d52fd 1310097626.455468
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455470
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455472
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455474
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455476
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455478
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455481
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455483
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455485
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455487
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455489
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455491
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455493
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455495
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455497
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455499
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455502
1310097626.454516548
0x000d52fd 0x00000001000d52fd 1310097626.455504
1310097626.454516548
卸载
rmmod jit