Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48064
  • 博文数量: 14
  • 博客积分: 390
  • 博客等级: 一等列兵
  • 技术积分: 112
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-28 23:41
文章分类
文章存档

2011年(14)

我的朋友

分类: LINUX

2011-10-20 22:32:08

由于程序跑在内核态下,所以需要做内核模块中的程序运行时间测量(可以用于驱动程序)。这与用户态下的时间测量有点区别,其中内核中不能使用浮点运算,同时计时函数有区别。
用户态下时间测量函数 int gettimeofday(struct timeval *tv,struct timezone *tz);
而内核态中函数 void do_gettimeofday(struct timeval *tv);
以下是自己所写的内核模块(baotime.c):
#include
#include
#include
#include
MODULE_LICENSE("GPL");
int init_module(void){
struct timeval tpstart,tpend;
unsigned long timeuses=0;
unsigned long timeuseu=0;
int i=0;
do_gettimeofday(&tpstart);
for(i=0;i<1000000000;i++);
do_gettimeofday(&tpend);
printk("%ld ",tpend.tv_sec);
printk("%ld ",tpstart.tv_sec);
timeuses=(tpend.tv_sec-tpstart.tv_sec)*1000000+tpend.tv_usec-tpstart.tv_usec;
timeuseu=timeuses/1000000;
timeuses=timeuses-timeuseu*1000000;
printk("processor time is %ld s,%ld us",timeuseu,timeuses);
return 0;
}
void cleanup_module(void){
printk("<1>Goodbye cruel word\n");
}
开始加载模块是出现了编译版本不一致问题,编译使用的2.4.20,而内核版本为2.4.20-8。
解决方法:找到/usr/include/linux/version.h
把#define UTS_RELEASE "2.4.20"改为#define UTS_RELEASE "2.4.20-8"即可
以下是makefile文件:
CC=gcc
MODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX -I/usr/src/linux-2.4/include
baotime.o :baotime.c
$(CC) $(MODCFLAGS) -c baotime.c
echo insmod baotime.o to turn it on
echo rmmod baotime to turn it off
echo
加载之后,程序运行时间测试为processor time is 3 s,713806 us。
阅读(970) | 评论(0) | 转发(0) |
0

上一篇:ios

下一篇:latency资料

给主人留下些什么吧!~~