int 0x80
でシステムコールを実行するのと同様に、自分のISRをカーネル内で実装することができます。そうすれば、softirqではint 0x120
または他のsoftirqプログラムカウンタユーザスペースからカーネルスペースからジャンプできますか?独自のsoftirqでlinuxカーネルを呼び出す方法はありますか
特権モードのカーネルに入っているのは、int 0x80
としか関連付けられていないか、softirqの実装で自動的に特権モードに入るか、保護モードを無効にして特権モードに入ることができます。
このタイプのISRを実装することが可能な場合は、EBX、ECX、EDX、ESI、EDI、EBPなどのレジスタを使用したデータ交換が可能です。
私はすでにHow to define and trigger my own new softirq in linux kernel?を見ましたが、私が探していた解決策が見つかりませんでした。
私はこれをもっと必要とする理由を説明します
ハードウェア周辺機器と直接通信しているカーネル機能はほとんど実装されていませんでした。ソフトウェア割り込みを使用してユーザ空間からトリガする必要があります。私は実行時間を短縮する必要があるので、使用可能なドライバアーキテクチャでシステムコールを使用することはできません。
Linuxカーネルは、いったんそれを残すと、[リアルモード](http://wiki.osdev.org/Real_Mode)に再入力しません。ブートローダがその内容を終了すると、適切なOSがCPUがすべて[保護された](http://wiki.osdev.org/Protected_Mode)/ [long](http://wiki.osdev.org/Long_Mode#Long_Mode)モードを再起動します。あなたは[ring 0](https://en.wikipedia.org/wiki/Protection_ring)を意味するのでしょうか? – 3442
はい、私はリング0を意味し、編集しました。ありがとう –
Linuxでカーネルモードに入る最も簡単な方法は、あなた自身のドライバを書くことです。 –