1

次のカーネル API の機能をフックしようとしています。

extern void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
  • アーチ/アーム/インクルード/asm/system_misc.h

  • 2 番目のパラメーターchar *cmdの使用方法を知りたいです。

  • 2 番目のパラメーターcmdの必要性を合理化することはできませんが、最初のパラメーターreboot_modeは適切な意味を持ちます...

誰か説明してもらえますか?

4

1 に答える 1

1

2 番目のパラメーターの使用方法を知りたいですchar *cmd
誰か説明してもらえますか?

これは via と呼ばれmachine_restart()、それは によって呼び出されkernel_restart()ます。カーネルのドキュメントによると、

@cmd: 再起動のために実行するコマンドを含むバッファへのポインタまたは %NULL

コマンドを渡してメモを再起動すると、次のように表示されます。ほとんどの場合、ARM フックはそれを無視します。確認することも、無視することもできます。NULL

からman 2 reboot

上記のアクションの正確な効果は、アーキテクチャによって異なります。i386 アーキテクチャの場合、追加の引数は現在 (2.1.122) 何もしませんが、再起動のタイプはカーネル コマンドライン引数 ("reboot=...") によってウォームまたはコールドのいずれかに決定できます。ハードまたはBIOSを介して。

無視してもかまいませんが、何か特別なことを知らせるためにユーザースペースが必要な場合に使用できます。ほとんどの場合、 が得られcmd == NULLます。

注:このコマンドは常に失敗して返されます。返すべきではありません ;-)これが NULL でないLINUX_REBOOT_CMD_RESTART2場合の定義を参照してください。cmd

于 2013-10-28T14:47:10.217 に答える