有没有办法用我自己的softirq调用linux内核

有没有办法用我自己的softirq调用linux内核,第1张

概述类似于系统调用如何在int 0x80上工作,是否可以在内核中实现我自己的ISR,以便在softirq上假设int 0x120或任何其他softirq程序计数器可以从用户空间跳转到内核空间? 在特权模式下进入内核只与int 0x80相关联,或者与任何softirq实现相关联,我可以自动进入特权模式,或者为了禁用受保护模式并进入特权模式,我们必须通过编写其关联标志来手动完成? 还有一件事,如果有可能实 类似于系统调用如何在int 0x80上工作,是否可以在内核中实现我自己的ISR,以便在softirq上假设int 0x120或任何其他softirq程序计数器可以从用户空间跳转到内核空间?

在特权模式下进入内核只与int 0x80相关联,或者与任何softirq实现相关联,我可以自动进入特权模式,或者为了禁用受保护模式并进入特权模式,我们必须通过编写其关联标志来手动完成?

还有一件事,如果有可能实现这种类型的ISR,那么数据交换的最佳方式是使用寄存器EBX,ECX,EDX,ESI,EDI和EBP还是其他任何方式?

我已经看过How to define and trigger my own new softirq in linux kernel?,但没有找到我想要的解决方案.

我会说清楚一点,为什么我需要这个
我实现了很少的内核函数,它们直接与硬件外设通信,我希望它们使用软件中断从用户空间触发.不能使用具有可用驱动程序体系结构的系统调用,因为我需要减少执行时间.

解决方法 首先,软件中断和softirq是完全不同的:
软件中断是从用户模式切换到特权模式的汇编指令,这正是您正在寻找的
softirq是一种将硬件中断处理程序拆分为顶部,下半部分的机制

对于您的问题 – 您需要编写汇编代码并修改特定于平台的代码

>您需要在linux arch / x86 / include / asm / irq_vectors.h中定义int编号:

#@R_419_5552@ MY_SYSCALL_VECTOR             0x120

>在linux arch / x86 / kernel / traps.c中更改函数trap_init:

set_system_trap_gate(MY_SYSCALL_VECTOR,entry_INT120_32);

>现在您需要编写汇编函数entry_INT120_32.你可以在文件中看到一个例子:arch / x86 / entry / entry_32.S从ENTRY开始(entry_INT80_32).

您需要注意在entry_32.S文件开头记录的cpu寄存器.

总结

以上是内存溢出为你收集整理的有没有办法用我自己的softirq调用linux内核全部内容,希望文章能够帮你解决有没有办法用我自己的softirq调用linux内核所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1039924.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存