![Linux カーネルはどのようにしてコンピューターのアーキテクチャを認識するのでしょうか?](https://rvso.com/image/192241/Linux%20%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%81%AF%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%A6%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%81%AE%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3%E3%82%92%E8%AA%8D%E8%AD%98%E3%81%99%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%3F.png)
ではstart_kernel()
、カーネルが最初に行うことの 1 つは を実行することですsetup_arch()
。setup_arch()
はサポートされているすべてのアーキテクチャに対して定義されているため、適切なコマンド ラインへのポインタが渡されます。
このポインターはどのように初期化され、カーネルはいつどのようにコンピューターのアーキテクチャを取得するのでしょうか?
答え1
特定のカーネルは単一のアーキテクチャ用に構築されるため、 の実装も 1 つになりますsetup_arch
。ジェネリックstart_kernel
それを呼び出しますが、初期化されたポインタをコマンド ラインに渡すのではなく、ポインタへのポインタをコマンド ラインに渡します。setup_arch
そのポインタを初期化するのは の仕事の一部です。
例えば、x86にはグローバルcommand_line
変数がある、およびそのsetup_arch
そのアドレスを、start_kernel
。
したがって、カーネルは構築時にコンピューターのアーキテクチャを効果的に取得します。