도와주세요 ㅠㅠ
리눅스에서 시스템 콜을 구현하고 있습니다.
그런데 전분명 timeval로 선언을 했는데 컴파일 해보니
timespec에 tv_usec 이라는 멤버가 없다고 ㅡㅡ;;
그래서 혹시나 해서 tv_usec을 tv_nsec으로 바꿔도 마찬가지이구요..
그리고 ctime은 왜 사용을 못하는 걸까요 ㅠㅠ
time.h 선언하니까 그런 파일이나 디렉토리를 찾을 수 없다고 하고...
do_gettimeofday 이 함수를 ctime 대신 써도 되려나요??? 프린트문에서...
워닝은 그냥 그렇다 치지만 에러가 나니 난감하네요...
혹시나 해서 소스랑 에러 첨부합니다.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
asmlinkage int sys_pedagogictime(int flag, struct timeval *thetime){
int write_failed;
struct timeval *temp;
/*verify we can write to user space*/
write_failed = access_ok(VERIFY_WRITE, thetime, sizeof(thetime));
if(!write_failed){
printk("skelcall : Cannot write into user space");
return 0;
}
local_irq_disable(); //disable interrupts
//write into user space the values in xtime
copy_to_user(&thetime->tv_sec, &xtime.tv_sec, sizeof(xtime.tv_sec));
copy_to_user(&thetime->tv_usec, &xtime.tv_usec, sizeof(xtime.tv_usec));
local_irq_enable(); //enable interrupts
//verify we can read from user space
write_failed = access_ok(VERIFY_READ, thetime, sizeof(thetime));
if(!write_failed){
printk("skelcall: Cannot read freom user space");
return 0;
}
//copy back from user space into temporary variable for printing
temp = NULL;
copy_from_user(&temp->tv_sec, &thetime->tv_sec, sizeof(thetime->tv_sec));
copy_from_user(&temp->tv_usec, &thetime->tv_usec, sizeof(thetime->tv_usec));
//printf time if flag is true
if(flag)
printk("%s", ctime(temp->tv_sec));
return(!(write_failed));
}
댓글 달기