step 1:/usr/src/linux../arch/x86/kernel/syscall_tabel32.S
.long sys_lightbluetest
.long sys_lightbluecall
step 2:/usr/src/linux../arch/x86/include/asm/unistd_32.h
#/usr/src/linux../include/asm-generic/unistd.h
#define __NR_lightbluetest 337
#define __NR_lightbluecall 338
and modify the __NR_syscall 339
become
#define __NR_lightbluetest 337
#define __NR_lightbluecall 338
#ifdef __KERNEL__
#define __NR_syscall 339
step 3:/usr/src/linux../include/linux/syscall.h
#include <linux/time.h>
asmlinkage int sys_lightbluetest();
asmlinkage int sys_lightbluecall(struct time* v_time,struct timespec * s_time);
step 4:/usr/src/linux../kernel/sys.c
#include <linux/time.h>
asmlinkage int sys_lightbluetest(){
printk("lightblue test\n");
return 222;
}
asmlinkage int sys_lightbluecall(timeval* v_time,timespec *s_time){
printk("hello call\n");
*s_time=current_kernel_time();
do_gettimeofday(v_time);
return 17;
}
step 5:
cd /usr/src/linux[tab]/
make mrproper
cp /boot/config[tab] .config
make oldconfig
make
make modules_install
make install
reboot
step 6:
test codes
//test.c
1.#include <stdio.h>
2 #include <stdlib.h>
3 #include <sys/time.h>
4 #include <linux/unistd.h>
5 #include <sys/syscall.h>
6
7 int main(){
8 printf("hello\n");
9 struct timespec *s_time=(struct timespec *)malloc(20);
10 struct timeval *v_time=(struct timeval*)malloc(20);
11 unsigned long times=0;
12 syscall(339,v_time,s_time,×);
13 printf("%lu %lu\n",times,s_time->tv_sec);
14 int ret=syscall(337);
15 printf("%d\n",ret);
16
17 free(s_time);
18 free(v_time);
19 return 0;
20 }
linux内核实验五实现过程
最新推荐文章于 2024-09-25 19:08:10 发布