Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linux起動時のファイルシステムのロード

Linux起動時のファイルシステムのロード

  

序文:私の記事は比較的単純だと思います。初心者の中には見てみることができる、これが私が組み込み版に投稿していない理由です。ご主人様には、時間がないのであれば、私に間違いを見つけて指摘する手助けをしてください。これは私があなたとコミュニケートするためにここに来ることの目的でもあります。

モジュールドライバが完成したら、ファイルシステムをマウントします。私はいつも考えました:initrdモードを使ってカーネルをコンパイルしました、デバイスはRAM DISKファイルシステムの下の/linuxrcスクリプトにロードされるので、これに多くの時間が浪費されます。しかし、initrdについてはより深い理解がありますので、しばらくお待ちください。実際、カーネルによってマウントされる最初のファイルシステムはnand flashのroot.cramfsで、マウント関連のコードmount_root()は/fs/super.cファイルにあります。次に、コードmount_devfs_fs()を使用して、devcieファイルシステムを/devディレクトリにマウントします。 noninitrdモードが使用されるため、ファイルシステムのマウントは完了し、initプロセスは実行されるまで停止します。

if(execute_command)execve(execute_command、argv_init、envp_init);ここでinitスイッチ別のスレッドでは、実行中のプログラムはexecute_commandに定義されています。 execute_commandは起動時にviviに渡されるコマンドラインです:カーネルコマンドライン:noinitrd root = /dev /bon /2 init = /linuxrc console = ttyS0したがってexecute_commandは/linuxrcに対応するので、プログラムはルートディレクトリの下でスクリプトを実行します。 Linuxrc、私のシステムでは彼は次のように対応しています。#!/bin /shecho" /etcをramfsとしてマウント" /bin /mount -n -t ramfs ramfs /etc /bin /cp -a /mnt /etc /* /etcecho 「/etc /mtabエントリを再作成する」/bin /mount -f -t cramfs -o remount、ro /dev /mtdblock /3 //bin /mount -f -t ramfs ramfs /etcexec /sbin /init説明しません(最後はbashを起動することです)。/mntの下のlinuxの下にroot.cramfsをマウントして、内容を確認することができます。

mount– t cramfs– oループルート。ここでのCramfs /mnt /cramfsは実際に全員に伝えたいのですが、どのようにしてブートを実行して実行中のプログラムを自動的にロードするのですか。 (実際には、私は以前にyy問題にありました)最後に、私はinitrd(ini​​tail ram disk)の原理、決まり文句、そして多くのオンラインについては話しません。 initrdには、カーネルのサイズをある程度共有するモジュールドライバが起動時に同時にメモリにロードされる必要があるため、これらのモジュールドライバがいくつか含まれていることを私は理解しています。カーネルの移植性を確実にするために、異なるinitrdファイルシステムが異なるハードウェアプラットフォーム用に提供されている限り、カーネルは変更されないままにすることができます。したがって、initrdの主な役割は、SCSIハードドライブ、ネットワークカードドライバ(ディスクレスワークステーションなど、nfsを使用)など、プラットフォームに関連する複雑なハードウェアをロードすることです。

Copyright © Windowsの知識 All Rights Reserved