別の syscall テーブルを使用して独自のカスタム カーネルを構築したいと考えていました。(同じシステムコールですが、位置/番号が異なります)
私はカーネル 3.2.29 で作業していました。
カーネルの変更は非常に簡単でした:
1) arch/x86/kernel/syscall_table_32.S の syscall 位置を変更する</p>
2) arch/x86/include/asm/unistd_32.h の syscall マクロ番号を変更する
3) 新しいカーネルのコンパイルとインストール
私はシステムコールを入れ替えました:sys_open
の場所と数を取りましたsys_read
。
カーネル ヘッダーを変更してコンパイルすればglibc
、システムを実行できると考えましたが、残念ながらそれだけでは十分ではなく、システムが起動しません。
何か不足していますか?システムを稼働させるには、他に何をする必要がありますか?
私が取った手順は次のとおりです。
1)私の質問で説明されているようにカーネルを構築してインストールする
2)を使用して新しいカーネルヘッダーを抽出するmake headers_install INSTALL_HDR_PATH=[path]
3) パラメータを使用して glibc を構築する--with-headers=[path/include]
4) 新しい をインストールするために、ライブ CD を使用して外部からファイル システムにアクセスしましglibc
たmake install install_root=[the original file system]
(インストール中にシステムが壊れないようにするため)。
新しいものが適切に構築されたことを願っていglibc
ますが、よくわかりません。
その後、システムをブートすると、ブートが (initrafms) シェル画面で停止しinitrd
ます。