Wei Dongshanuboot_kernel_rootファイルシステム研究ノート4.4-レッスン004_rootファイルシステム-セクション004_ルートファイルシステムの構築

ルートファイルシステムに必要な最小限の項目(注4.1 4.2要約)

(初期化プロセスに必要)

  1. ターミナルを開きます。/dev/console、/ dev / NULL
    inittab形式のid(標準入力、出力、および標準エラー)が設定されていない場合、/ dev / NULLに配置されます。
  2. / sbin / init(initプログラム):busybox自体です。
  3. / etc / inittab:構成ファイルが必要です。
    構成ファイルで特定のアプリケーションまたは実行スクリプトが指定されている場合(これらは存在する必要があります)、存在しない場合はデフォルトになります。
  4. アプリケーションに必要なライブラリ(printf、fopen、fwriteおよびその他の関数にはライブラリ関数が必要です)。

上記の要件に基づいて「最小限のルートファイルシステム」を構築します

1デバイスファイルを作成します:/ dev / console、/ dev / NULL

  1. ubuntuでこれら2つのデバイスファイルを見てください
    ここに画像の説明を挿入
  2. 組み込みファイルシステムで作成
[email protected]:~/nfs_root/fs_mini$ mkdir dev						//创建dev目录
[email protected]:~/nfs_root/fs_mini$ ls
bin  dev  linuxrc  sbin  usr
[email protected]:~/nfs_root/fs_mini$ cd dev/
[email protected]:~/nfs_root/fs_mini/dev$ sudo mknod console c 5 1  		//创建设备节点 //节点名称:console//字符型设备:c//主设备号:5//次设备号:1
[email protected]:~/nfs_root/fs_mini/dev$ sudo mknod null c 1 3

2 / sbin / init(initプログラム)

すでにプログラムを持っています:
ここに画像の説明を挿入

3. / etc / inittab構成ファイル

[email protected]:~/nfs_root/fs_mini$ mkdir etc								//创建etc文件夹
[email protected]:~/nfs_root/fs_mini/etc$ vim inittab							//创建inittab文件

以下に示すように、inittabファイルの内容を入力します。最も単純な構成ファイルは、-/bin/shプログラムのみを実行しますこれは、askfirst / bin / shプログラムが1つだけ実行され、/ bin / shプログラムの標準入力、出力、および標準エラーが「/ dev / console」にあることを意味します。
ここに画像の説明を挿入

4.アプリケーションに必要なCライブラリ

glibcライブラリは、クロスツールチェーンが以前に作成されたときに生成されており、ルートファイルシステムを構築するために直接使用できます。次の図
ここに画像の説明を挿入
は、glibcライブラリファイルを示しています。これらのライブラリファイルの一部は、次の図のように、別のファイルを指すリンクld-linux.so.2です。
ここに画像の説明を挿入

.soファイル:動的数学ライブラリlibm.so/動的C ++ライブラリlibstdc ++。soなどの動的ライブラリファイル。これらのファイルはダイナミックライブラリのコンパイル時に使用されますが、リンクされず、実行時にリンクされます。

コピーするときは、ディレクトリ内のすべての.soファイルをコピーする必要があります。-dは元々リンクファイルですが、リンクファイルのままです。それ以外の場合は、非常に大きな実際のファイルにコピーされます。
ここに画像の説明を挿入

最小ルートファイルシステムは上記で完了しています。

2.ルートファイルシステムを開発ボードに書き込む方法

  1. このツールを使用して、yaffsファイルシステムイメージファイルを作成/使用しますyaffs_source_util_larger_small_page_nand.tar.bz2(nand512pageまたはnand2048pageをサポート)。
    ツールを解凍した後、ディレクトリに入ります。コマンドを/Development_util_ok/yaffs2/utils実行してmake、次のツールをコンパイルします。主に後で使用されmkyaffs2imageます。
    ここに画像の説明を挿入

  2. mkyaffs2imageシステムディレクトリにコピーし、実行可能な性質をUbuntuの追加:
    ここに画像の説明を挿入

  3. ファイルシステムイメージ
    の作成作成した埋め込みファイルシステムディレクトリに戻ります~/nfs_root/
    。inputコマンド:コマンドmkyaff2imageの使用法を表示します
    ここに画像の説明を挿入
    。inputコマンド:mkyaffs2image fs_mini fs_mini.yaffs2という名前のfs_mini.yaffs2イメージファイルを生成します。
    ここに画像の説明を挿入

  4. イメージをfs_mini.yaffs2
    書き込む(1)開発ボードの電源を入れ、ubootディレクトリに入り、次のように入力しますy
    ここに画像の説明を挿入
    (2)書き込み用のdnwソフトウェアを開きます

  5. 開発ボードの起動プロセスを確認してください。
    問題:上記の手順で作成されたファイルシステムは、下図のエラーを表示します。数回試行すると無効になります。エラーは後で解決されます。
    ここに画像の説明を挿入

通常の起動後は、次の図のようになります。
ここに画像の説明を挿入
ファイルシステムのetc / inittabファイルを確認してください

# cat /etc/inittab
# /etc/inittab
ttySAC0::askfirst:-/bin/sh
  1. bootargsはデフォルト値を設定します
bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200

3つの完全なルートファイルシステム1-PSコマンドをサポート

  1. PSコマンドをサポート

PSコマンド:プロセスを監視および制御するには、最初に現在のプロセスを理解する必要があります。つまり、現在のプロセスを表示する必要があります。psコマンドは、最も基本的なプロセス表示コマンドです。このコマンドを使用して、実行中および実行中のステータス、プロセスが終了したかどうか、プロセスにゾンビがあるかどうか、どのプロセスが多くのリソースを占有しているかなどを判別します。つまり、このコマンドを実行することでほとんどの情報を取得できます。psは、動的で継続的なものではなく、瞬間的なプロセスのステータスを表示します。プロセスをリアルタイムで監視する場合は、topコマンドを使用する必要があります。

このコマンドにはカーネル虚拟文件系统必要です。カーネルPROC、まずコアファイルシステムをロードする必要があります。

mkdir proc
mount -t proc none /proc
ps

次の図のPIDはプロセス番号を表します。表示
ここに画像の説明を挿入
するには、プロセス番号1のプロセスを入力します次の
ここに画像の説明を挿入
図に示すように、プロセス番号1のフォルダー内のfdの属性を表示します。すべて/ dev / consoleを指します。

 0 -> /dev/console	//表示标准输出
 1 -> /dev/console	//表示标准输入
 2 -> /dev/console	//表示标准错误

ここに画像の説明を挿入

  1. PSコマンドのサポート方法(方法1)
    (1)上記のPROCを自動的にマウントする必要があるため、inittabファイルをコンパイルして、構成ファイルでカーネルがスクリプトを自動的に実行する必要があるようにします。vim /etc/inintab
    ここに画像の説明を挿入
    (2)作成する/etc/init.d/rcSファイルで、
    rcSファイルに実行可能属性を追加します。rcSファイルの内容は次のとおりです。コマンドを実行するにはカーネルが必要です。
    ここに画像の説明を挿入
    ここに画像の説明を挿入

  2. PSコマンドのサポート方法(方法2)
    (。1)rcSファイルの内容はさらに変更される可能性があります:mount -a;
    意味:/etc/fstabファイルの内容を読み取る、マウント
    (2)/etc/fstabファイル形式の内容に基づくファイルシステムの説明

#device	mount-point	type	options		dump	fsck	order
proc	/proc		proc	defaults    0		0

ここに画像の説明を挿入
ここに画像の説明を挿入

  1. 効果を確認します。
    次の図に示すように、現在マウントされているファイルシステムを確認します。yaffsファイルシステム、rootfsルートファイルシステム、およびproc仮想ファイルシステムがマウントされています。
    ここに画像の説明を挿入

4つの完全なルートファイルシステム2-mdevの使用(P355を参照)

  1. udev:/ dev / deviceノードを自動的に作成します。
  2. mdev:カーネル情報を読み取ることによってデバイスファイルを作成するudevの簡易バージョン。使用法については、busybox-1.7.0 / doc /mdev.txtファイルを参照してください。
    ここに画像の説明を挿入
  3. 特定の手順
    ここに画像の説明を挿入

その中で、[2] echo /bin/mdev > /proc/sys/kernel/hotplugホットスワップを意味します。ドライバーが動的にロードされるか、Uディスクが挿入されると、カーネルは自動的に/proc/sys/kernel/hotplugプログラムを呼び出します。
[3]mdev -sつまり、カーネル内の既存のすべてのドライバーノードが作成されます。

  1. 効果を確認する
    (1)devディレクトリに多くのデバイスノードがあり、これらはmdevによって自動的に作成されるノードです
    ここに画像の説明を挿入
    (2)マウントされたファイルシステムを確認します
    ここに画像の説明を挿入

5つは他のファイルシステムを使用します-jffs2(P360を参照)

jffs2:一般的にnorフラッシュに使用されますが、現在はnandフラッシュに使用しています。

ここに画像の説明を挿入

./configure --shared --prefix = / usr構成情報
--sharedは動的ライブラリにコンパイルすることを意味します
--prefix = / usrは/ usrディレクトリにインストールすることを意味しますsudomakeinstall
はシステムディレクトリにインストールすることを意味します

ここに画像の説明を挿入

注:対応するパラメータ変更に使用異なるフラッシュ
-s 512 -s 2048
128KiBを-eする-e 16KiBを

ここに画像の説明を挿入

効果を確認します。
ここに画像の説明を挿入

6つは他のファイルシステムを使用します-ネットワークファイルシステムNFS

开发阶段经常使用网络文件系统进行程序调试

NFS(Network File System)は、ネットワーク上のコンピューターがネットワークを介してリソースを共有できるようにするネットワークファイルシステムです。NFSホストによって共有されているディレクトリをローカルクライアントにマウントします。ローカルNFSクライアントアプリケーションは、リモートNFSサーバーにあるファイルを透過的に読み書きできます。これは、クライアント上のローカルファイルにアクセスしているように見えます。

  1. ubuntuサーバーと開発ボードのネットワークセグメントを同じネットワークセグメントに設定します
    。ubuntuipアドレス:192.168.8.201
    開発ボードipアドレス:ifconfig eth0192.168.8.210
    開発ボードはubuntuにpingを実行できます

  2. コマンドを使用してNFSをマウントするための前提条件
    (1)Ubuntuサーバーで特定のディレクトリをマウントできるUbuntuサーバー
    の対応するファイルを編集する:sudo vim /etc/exports
    ここに画像の説明を挿入
    Ubuntuのnfsサービスを再起動する:
    ここに画像の説明を挿入
    ubuntuを試して独自のNFSディレクトリをマウントする:sudo mount -t nfs 192.168.8.201:/home/book/nfs_root/fs_mini1 /mnt
    ここに画像の説明を挿入
    (2)ボードに移動する
    シングルをマウントするボードマウントコマンド:mount -t nfs -o nolock 192.168.8.201:/home/book/nfs_root/fs_mini1 /mnt

  3. NFSから直接開発ボードを起動します
    (1)uboot環境変数を変更します

bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200
修改为
bootargs=noinitrd root=/dev/nfs nfsroot=192.168.8.201:/home/book/nfs_root/fs_mini1 ip=192.168.8.210:192.168.8.1:255.255.255.1:eth0:off init=/linuxrc console=ttySAC0,115200

(2)NFS起動パラメーター:サーバーIP /マウントディレクトリ/開発ボードのIP
説明ドキュメントを検索linux-2.6.22.6\Documentation\nfsroot.txtします。見つかったパラメーターは次のとおりです。

nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>

注:角括弧[]で示されるパラメーターは省略できます。山括弧<>で示されるパラメーターは省略できません
。ドキュメントに使用法の説明があるため、ここにスクリーンショットはありません。

おすすめ

転載: blog.csdn.net/xiaoaojianghu09/article/details/104211168