linux内核实验五实现过程

本文详细介绍如何在Linux内核中实现自定义系统调用,包括修改内核源码、编译内核、编写测试代码等步骤。通过具体示例说明了如何创建并使用名为lightbluetest和lightbluecall的系统调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值