序文 一般的に、Linux システムについて話すときは、Linux カーネルと GNU プロジェクトに基づくさまざまなオペレーティング システム ディストリビューションを指します。 Linux オペレーティング システムの使い方を習得し、Linux オペレーティング システムの操作プロセスを理解し、カーネルと周辺サポート システムの関係を理解し、オープン ソース オペレーティング システムに対する理解を深めるために、車輪の再発明、つまり Linux ファイル システムを自分でカスタマイズすることにしました。 これを行うには 2 つの方法があります。 initを直接自分で実装する**\*(M1)***
system/sbin/init**\*(M2)*** を利用する
まずは*M1*を選択しましょう。 アイデア
ステップ1: initrd.imgのシェルバージョンを取得する まず、ファイルシステムを起動した後にカーネルが直接 Bash を取得できるように、スクリプト init を作成します。 スクリプトinitを作成する そのうち、/bin ディレクトリにはよく使用されるコマンドが含まれ、init は自分で作成したスクリプトであり、/lib64 ディレクトリにはアプリケーションが依存する動的ライブラリが含まれます。 初期化コンテンツ ここで、コマンドラインを使用して、bin および sbin ディレクトリを作成し、bash、ls、rm、cp、mv、echo、cat、less などの基本コマンドを追加する必要があります。これらのコマンドは、/lib64 などのディレクトリ内の動的にリンクされた共有ライブラリに依存する必要があるため、依存ライブラリをミニシステムに対応するディレクトリにコピーし、ldd コマンドを使用してアプリケーションとその依存動的ライブラリを照会する必要があります。完了したら、次を実行します。 見つけてください。 | cpio -H newc -o | gzip > /boot/initrd.img ルート ファイル システムを initrd.img にパッケージ化し、/boot ディレクトリに配置します。システムは起動時に initrd.img 内の init を自動的に実行します。 initrd.img を生成するために多大な労力を費やした後、新しく作成された initrd.img をどのようにテストしますか? テスト用に、grub スタートアップ構成ファイルにエントリを追加する必要があります。 タイトル CentOS 6 Mini ルート (hd0,0) カーネル/vmlinuz-2.6.32-642.el6.x86_64 initrd /initrd.img 再起動後、起動オプションが表示されます。 ステップ2: 元のシステムをマウントする機能を完了する 元のシステムをマウントするには、ext4ファイルシステムのドライバやscsiデバイスの関連ドライバなど、元のシステムを実行するために必要なドライバモジュールをinitrd.imgにロードする必要があります。/sbin/modinfoは/sbin/insmodと連携し、ドライバは/moduleに配置されます。 ステップ3: デバイスを管理する機能を完成させる (udev) ホスト デバイスを管理および監視するサービス プログラムである udevd を使用して、必要なドライバー モジュールを自動的にロードする方が、自分で実装するよりも信頼性が高くなります。 udevd ルール ファイルは /lib/udev/ ディレクトリにあり、設定ファイルは /etc/udev/ ディレクトリにあります。同時に、/etc/nsswitch.conf で設定されたネーム サービス スイッチも必要です。依存ライブラリは、/lib ディレクトリの libnss で始まるファイルです。上記のファイルをディレクトリにコピーし、/sbin/start\_udev コマンドを使用して udevd サービスを開始します。 (udevd は、/sbin/modprobe などの他のシステム コマンドを呼び出す必要がありますが、これは strace を使用して追跡および取得できます)。 ミニシステムディレクトリファイル /dev ディレクトリはシステムが使用可能なデバイスを保存する場所であり、/log は strace コマンドによって生成されるログ ファイルです。 ステップ4: ログイン機能を完了する ログインメカニズムはプロセス管理メカニズム、プロセスグループ、コンソールなど多くの側面を含む比較的複雑なため、*M2*を使用して/sbin/initコマンドを小さなシステムディレクトリにコピーし、initスクリプトを次のように変更します。 #!/bin/bash /sbin/init を実行します /sbin/init に制御を渡した後、システムが起動すると、ユーザーは一連の呼び出しが完了してログイン インターフェイスに入るまで待機してから、制御を取り戻す必要があります。 /sbin/init のプロセスは、大きく分けて 3 つの部分に分かれています。最初の部分は、udevd によるドライバー モジュールのロード、ファイル システムのチェック、ルートの切り替えで、関連する設定は /etc/rc.sysinit にあります。2 番目の部分は、さまざまなサービスの起動で、関連する設定は /etc/rc.d/ ディレクトリにあります。3 番目の部分はログイン部分で、/sbin/mingetty や /bin/login などのコマンドを呼び出す必要があります。上記のコマンドとファイルを小規模システムに対応するディレクトリにコピーし、設定を変更します。 ミニシステムの起動後、initrd.img は一時的なルート ファイル システムとしてメモリ内で直接実行され、ミニシステムではルート切り替えを実行する必要がないため、/etc/rc.sysinit の remount_needed() 関数本体はコメント アウトされ、ルート切り替えは行われません。 システムは新しい Upstart 起動方法を使用するため (/sbin/init プログラムは upstart ソフトウェア パッケージによって提供されるように変更されています)、Upstart 起動に関連する構成ファイルをミニシステム ディレクトリにコピーします。
bootmini/etc/inittab の実行優先度を 2 に変更します。その後、システムの起動時に、/sbin/init は bootmini/etc/rc.d/rc2.d/ ディレクトリ内の S で始まるファイルを実行します。有効にする必要のない一部のサービス ファイルの名前を K で始まるように変更します。 bootmini/etc/rc.d/rc.local ファイルでは、システムの起動後にユーザーが自動的に実行する必要がある操作を追加できます。 ログイン プログラムは、認証システム PAM に基づいています。設定ファイルは /etc/pam.d/ ディレクトリにあります。関連するライブラリ ファイルは /lib64/security/ とその従属ライブラリ ファイルです。ログインには、ユーザー グループ管理 /bin/chgrp、/bin/chown、/bin/chmod なども含まれています。ユーザー名を保存するファイルは /etc/passwd と /etc/group、ユーザー パスワード ファイルは /etc/shadow です。関連する他のファイルも strace の助けを借りて分析できます。 実機で実行できる完全なミニシステム いくつかのディレクトリ ファイル: /等 /bin /sbin ディレクトリ バイナリ この時点で、ファイル システムは実行中であるとみなすことができます。次の記事では、車輪の再発明を行い、Linux カーネルをカスタマイズします。実機効果については次の記事でも紹介します。 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: vuexの強制リフレッシュによるデータ損失問題の分析
>>: IOSデータベースアップグレードデータ移行の詳細な例
多くの場合、画像を表示する<a>タグのスタイルに遭遇しますが、タグ内にテキストがあり、そ...
1. 公式ウェブサイトアドレス公式サイトではインストールの参考手順が紹介されています。公式サイトを見...
ヒント:配列変更メソッドによりv-forが更新され、ページが更新されます。配列を変更しないメソッド:...
1.まず、overflow-wrap属性を理解する CSS のoverflow-wrapプロパティは...
導入:従来の画像検証コードと比較して、スライダー検証コードには次の利点があります。サーバーは検証コー...
序文まず、高性能サーバーの高可用性またはホットスタンバイソリューションである Keepalived ...
MySQLキーワードDistinctの使い方の紹介DDL SQLを準備します: テーブルテストを作成...
MySQL は、スウェーデンの会社 MySQL AB によって開発されたオープンソースの小規模なリレ...
html 、アドレス、引用、本文、 dd 、 div 、 dl 、 dt 、フィールドセット、フォ...
輸出: docker save -o centos.tar centos:latest #cento...
序文1.ベンチマークは、テスト オブジェクトのクラスの特定のパフォーマンス指標の定量的、再現可能、比...
1. CSS、jQuery、Canvasを使用してアニメーションを作成する1. キャンバス利点: ...
MySQLは1つのテーブルからデータをクエリし、それを別のテーブルに挿入する実装方法ウェブサイト開発...
数日前、CSS で 3 列レイアウトを書いていたときに、突然この方法を思いつきました。このアイデアは...
KILL [接続 | クエリ] processlist_id MySQL では、各接続は個別のスレ...