Debian GNU/Linux スレッド Ver. 50
at LINUX
347:Artane. ◆o6gE1yuDGM
07/12/20 03:42:40 o4OC5XPi
>>346 がいー加減過ぎたので最新のカーネルソースを読み直して補足、
基本的にx86アーキな2.6系のカーネルの場合、以下のシーケンスで起動します。
arch/[x86|x86_64|i386]/boot/ 以下に基本ソースがある。この部分は16bit+32bitコードで共通している。
1.grubやliloからheader.Sに相当する部分が(07c0セグメント前提で)読み込まれて、header.Sのstart_of_setup番地(+512+αバイト目)に処理が移る
2.この時、本体のIPLがない場合は(旧setup.S相当分+main.cなどなど分)、エラーメッセージをbios経由で表示してハングアップする
3.本体のIPLは以下の処理を行う。
a.ビルド時に指定があればBIOSを使ってディスクコントローラを初期化
b.スタックやらレジスタやら初期化して最低限のヒープを確保
c.main.cのmain()に飛ぶ。
d.BIOS->メモリ->キーボード→ビデオ(以下略)と設定していく。
e.pm.cのgo_to_protect_modeに飛んで、コプロセッサやら何やら設定していく。Cソースの体裁だけど実際には殆どアセンブラ。
f.16bitモード(リアルモード)から32bitモード(ネィティブモード…ソースコード中ではプロテクトモードになっているがi286以下の16bitモードでも使われてる言葉なので変更:)に移行する。
g.ここから先は64bitと32bitで異なる。2.6.24以降は両方が一緒のソースツリーになるので、それを前提にする。
h.各アーキテクチャの初期設定と圧縮された(かもしれない)本体イメージのメモリへの展開。
compress/head_[32|64].Sを参照。圧縮(されてるかもしれない)イメージのcrcチェックをしてgzipの方式で圧縮。
64bitカーネルの場合には一旦32bitモードで圧縮イメージを読み込んで64bit MPUであることを確認してから解凍する
g.ここから本体…orz
具体的には/boot/System.map-ヴァージョン のsetup_[64|32]のようですが…面倒臭くなった。基本的にはarch/hoge/boot以下のソース読めば何とかなる(ぉ)
圧縮フォーマットは多分、gunzipで扱える。詳しくはcrc32.cと(ソースツリートップ)/lib/inflate.cでも読んで。
次ページ続きを表示1を表示最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5174日前に更新/194 KB
担当:undef