3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Linux起動時の大まかな流れ

Last updated at Posted at 2022-10-23

※現職でスキルアップ発表会等で作成していたものをQiitaに書き起こすシリーズ①

Linux起動時のおおまかな流れ

カーネルの読み込み

CPUの初期化、各種ドライバの読み込み

initプロセスの開始

カーネルの読み込み

  • カーネルの読み込みはブートローダを介して行われる
     (grub等)

  • 新しくカーネルを入れ替える場合

    • apt-getを使う、Kernel.orgからインストールする等してカーネルソースを取得
    • make installすると、/boot下にカーネルイメージファイルが生成される 
      (このとき、必要でない機能の部分を組み込まずにモジュール化することによってカーネルのスリム化を図れる)
    • ブートローダにカーネルイメージを登録する
      (新しいカーネルが上手く起動されなかった場合に備え、古いカーネルも登録しておくのが常套手段とされる)

具体例(Fedora)

image.png

※/boot/ymlinuz-*** がカーネルイメージファイル

/etc/grub2.cfg (同様にFedora)

image.png

CPUの初期化、各種ドライバの読み込み

  • 起動に必要なドライバは以下のどちらかの手段で置かれている
    ①カーネルに組み込まれている
    ②initrdファイルに格納されている

  • initrd(Initial RAM Disk)
    初期化用の仮想RAMディスクファイル
    ※前頁の「grub2.cfg」でもカーネルイメージと同時に登録されている

何故わざわざドライバを「カーネル組込み」と「initrd」に分ける必要があったのか?

  • Linuxは多機能化によるカーネルイメージの肥大化対策として機能をモジュール化している
  • モジュール化の対象には各種ドライバも含まれているが、起動時に必要なドライバは起動時RAMに展開する必要があった
  • カーネルが新しいH/Wに対応していなくても、その装置に対応したモジュールをinitrdに用意すれば、そのドライバがRAMディスク上に展開される

initプロセスの開始

  • init
    カーネルが一番最初に実行するプログラム
    /etc/inittabに従って、ホスト名やIPアドレスのセット、キーボードの設定などを行う。

  • inittab
    initがどのスクリプトを呼び出すかが定義されていた
    0~6のランレベル毎に初期化スクリプト/etc/rc3.d , /etc/rc5.d等が定義されている。

※現在はsystemdがinittabの代わりを務めている。
 ランレベルに相当する概念 **.target により幅広い状態に対応した初期化スクリプトを実現している

/lib/systemd/system/rc-local.service (Fedora)

image.png

まとめ

  • カーネル立ち上げ時に実行したい処理を挿入、あるいは削除する際はsystemd配下の処理を修正することで実現可能
  • とはいえこの情報は2016年の頃のFedoraのものなので今のLinuxで通用するかは…?
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?