自己写一个linux的系统调用

本文介绍了如何在Linux内核中添加一个自定义系统调用,包括理解SWI指令的作用,用户空间到内核空间的切换过程,以及在kernel文件、calls.s和Unistd.h中的修改步骤。在entry_common.S中,系统调用号从R7转移到scno,然后调用相应的系统调用函数。然而,实验结果显示自定义系统调用未能成功执行,原因未明。
摘要由CSDN通过智能技术生成
知识背景:
一.SWI:软中断指令, 可以从用户空间切换到系统空间。
 以用户空间的read函数操做流程分析:
 1.用户空间的read调用会对应一个内核空间的read调用。
 2.从用户空间切换到内核空间需要用到一个指令SWI。
 3.切换到内核空间之后会取相对应的系统调用的编号,这个编号是随SWI指令传进来的。
 4.在内核里面会维护一张系统调用表,表中的每个系统调用对应一个系统编号。
二.ENTRY(vector_swi)在entry_common.S文件中。
三.用户空间总是将系统编号放进R7当中,然后内核会通过调用SWI指令将系统切换到内核态,然后将R7中的系统编号取出放入scno中,
   然后内核会根据scno的值从系统调用表中取出相对应的系统调用。


实验步骤:
  一.比如写类似printk函数功能的函数。在kernel文件夹里面的printk.c里面写
    例如: void sys_pk()
{
printk("this is a new sys_call!\n");
}      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值