|
很简单的一个模块,要在模块初始化的时候实现一个空的read()系统调用,可编译总出错
程序如下:
#define __KERNEL_SYSCALLS__
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/file.h>
#include <linux/unistd.h>
#include <linux/slab.h>
#include</usr/src/linux-2.4.20-8/include/linux/vmalloc.h>
#include <asm-i386/uaccess.h>
#include <asm-i386/msr.h>
#include <asm/fcntl.h>
#include <asm/errno.h>
#include "read.h"
MODULE_LICENSE("GPL");
void ksys_print(char *name, unsigned long value)
{
printk("ksystime: %3li -- %s\n", value, name);
}
int errno;
static int __init read_init(void)
{
printk("hello,this is my own items\n");
mm_segment_t fs;
unsigned long ini, end, now, best, tsc;
int i;
char buffer[4];
#define measure_time(code) \
for (i = 0; i < NTRIALS; i++) { \
rdtscl(ini); \
code; \
rdtscl(end); \
now = end - ini; \
if (now < best) best = now; \
}
/* time rdtsc (i.e. no code) */
best = ~0;
measure_time({});
tsc = best;
ksys_print("tsc", tsc);
/* time an empty read() */
fs=get_fs();
set_fs(get_ds());
best =~0;
measure_time( read(0, buffer, 0) );
set_fs(fs);
/* report data */
ksys_print("read()", best - tsc);
return 0;
}
static void __exit read_cleanup(void)
{
}
module_init(read_init);
module_exit(read_cleanup);
编译时提示current为定义,已经包含了sched.h,请问还要包含什么呢?或者小弟哪里用错了? |
|