ルートファイルシステムに必要な最小限の項目(注4.1 4.2要約)
(初期化プロセスに必要)
- ターミナルを開きます。/dev/console、/ dev / NULL
inittab形式のid(標準入力、出力、および標準エラー)が設定されていない場合、/ dev / NULLに配置されます。 - / sbin / init(initプログラム):busybox自体です。
- / etc / inittab:構成ファイルが必要です。
構成ファイルで特定のアプリケーションまたは実行スクリプトが指定されている場合(これらは存在する必要があります)、存在しない場合はデフォルトになります。 - アプリケーションに必要なライブラリ(printf、fopen、fwriteおよびその他の関数にはライブラリ関数が必要です)。
上記の要件に基づいて「最小限のルートファイルシステム」を構築します
1デバイスファイルを作成します:/ dev / console、/ dev / NULL
- ubuntuでこれら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.ルートファイルシステムを開発ボードに書き込む方法
-
このツールを使用して、yaffsファイルシステムイメージファイルを作成/使用します
yaffs_source_util_larger_small_page_nand.tar.bz2
(nand512pageまたはnand2048pageをサポート)。
ツールを解凍した後、ディレクトリに入ります。コマンドを/Development_util_ok/yaffs2/utils
実行してmake
、次のツールをコンパイルします。主に後で使用されmkyaffs2image
ます。
-
mkyaffs2image
システムディレクトリにコピーし、実行可能な性質をUbuntuの追加:
-
ファイルシステムイメージ
の作成作成した埋め込みファイルシステムディレクトリに戻ります~/nfs_root/
。inputコマンド:コマンドmkyaff2image
の使用法を表示します
。inputコマンド:。mkyaffs2image fs_mini fs_mini.yaffs2
という名前のfs_mini.yaffs2
イメージファイルを生成します。
-
イメージを
fs_mini.yaffs2
書き込む(1)開発ボードの電源を入れ、ubootディレクトリに入り、次のように入力しますy
(2)書き込み用のdnwソフトウェアを開きます -
開発ボードの起動プロセスを確認してください。
問題:上記の手順で作成されたファイルシステムは、下図のエラーを表示します。数回試行すると無効になります。エラーは後で解決されます。
通常の起動後は、次の図のようになります。
ファイルシステムのetc / inittabファイルを確認してください。
# cat /etc/inittab
# /etc/inittab
ttySAC0::askfirst:-/bin/sh
- bootargsはデフォルト値を設定します
bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200
3つの完全なルートファイルシステム1-PSコマンドをサポート
- 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 //表示标准错误
-
PSコマンドのサポート方法(方法1)
(1)上記のPROCを自動的にマウントする必要があるため、inittabファイルをコンパイルして、構成ファイルでカーネルがスクリプトを自動的に実行する必要があるようにします。vim /etc/inintab
(2)作成する/etc/init.d/rcSファイルで、
rcSファイルに実行可能属性を追加します。rcSファイルの内容は次のとおりです。コマンドを実行するにはカーネルが必要です。
-
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
- 効果を確認します。
次の図に示すように、現在マウントされているファイルシステムを確認します。yaffsファイルシステム、rootfsルートファイルシステム、およびproc仮想ファイルシステムがマウントされています。
4つの完全なルートファイルシステム2-mdevの使用(P355を参照)
- udev:/ dev / deviceノードを自動的に作成します。
- mdev:カーネル情報を読み取ることによってデバイスファイルを作成するudevの簡易バージョン。使用法については、busybox-1.7.0 / doc /mdev.txtファイルを参照してください。
- 特定の手順
その中で、[2] echo /bin/mdev > /proc/sys/kernel/hotplug
ホットスワップを意味します。ドライバーが動的にロードされるか、Uディスクが挿入されると、カーネルは自動的に/proc/sys/kernel/hotplug
プログラムを呼び出します。
[3]mdev -s
つまり、カーネル内の既存のすべてのドライバーノードが作成されます。
- 効果を確認する
(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サーバーにあるファイルを透過的に読み書きできます。これは、クライアント上のローカルファイルにアクセスしているように見えます。
-
ubuntuサーバーと開発ボードのネットワークセグメントを同じネットワークセグメントに設定します
。ubuntuipアドレス:192.168.8.201
開発ボードipアドレス:ifconfig eth0192.168.8.210
開発ボードはubuntuにpingを実行できます -
コマンドを使用して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
-
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>
注:角括弧[]で示されるパラメーターは省略できます。山括弧<>で示されるパラメーターは省略できません
。ドキュメントに使用法の説明があるため、ここにスクリーンショットはありません。