背景
NFSについて
NFS (Network File System) は、異なるオペレーティング システム間でファイルを共有するための分散ファイル システム プロトコルです。これにより、ネットワーク上の異なるコンピュータ間でファイルやディレクトリを共有できるようになり、データ共有の効率とセキュリティが向上します。もともと Sun Microsystems によって開発された NFS は、現在ではさまざまなオペレーティング システムやネットワーク デバイスで広く使用されているオープン スタンダードです。NFS はクライアント/サーバー モデルを使用しており、クライアント コンピューターはサーバー上の共有ファイルにローカル ファイルであるかのようにアクセスできます。
日々の組み込み Linux 開発では、通常、ハードウェア メモリのサイズによって制限され、デバッグではホスト コンピュータから開発ボードにファイルを頻繁にコピーする必要があるためです。したがって、NFS を使用してホストのディレクトリをボードにマウントできます。ファイル転送に便利で、開発ボードのストレージスペースを拡張します。
組み込み Linux はカスタマイズされることが多いため、対応する NFS ツールを移植する必要があります。
構造
サーバーはホスト マシンに展開され、開発ボードは nfs をマウントするためのクライアントとして使用されます。
実装手順
前提条件
- まず、開発ボードはホスト コンピューター ネットワークと通信する必要があります。
- 開発ボードのカーネルはNFS機能をサポートしています。
cat /proc/filesystem
ノードに「ntfs」という単語が含まれているかどうかを確認できます。オンになっていない場合は、「linux+ カーネルで nfs を有効にする」および「linux カーネルで nfs サービスを有効にする」を参照してください。 - ホストに ubuntu システムをインストールします (他のシステムも参照できます)
- トリミングされた Linux を実行する開発ボード
ホスト構成
- NFS クライアントおよびサーバー ソフトウェアをインストールします。NFS ソフトウェアは通常、次のコマンドを使用して Linux にインストールできます。
sudo apt-get install nfs-kernel-server nfs-common
- 共有ディレクトリを作成する
sudo mkdir /nfsroot
sudo chmod -R 777 /nfsroot
- NFSサーバーを設定します。次の構成ファイルを編集します。
sudo vim /etc/exports
このファイルでは、どのディレクトリを共有するか、およびこれらのディレクトリをどのクライアント マシンに共有するかを指定できます。例えば:
/nfsroot *(rw,sync,no_root_squash)
これにより/nfsroot
ディレクトリが共有され、クライアント マシンが読み取り/書き込みモードでディレクトリをマウントできるようになります。
- NFS サーバー構成をリロードします。
sudo exportfs -a
- NFS サーバーを起動します。
sudo systemctl restart nfs-kernel-server
- 確認:
ホスト上でコマンドを実行し、showmount -e
サービスが正常に起動しているか確認します。
$ showmount -e
Export list for <HOST name>:
/nfsroot *
次のコマンドは、nfs サーバーが正常に構成されているかどうかを確認します。
sudo mount -t nfs 127.0.0.1:/nfsroot /mnt -o nolock
$ mount | grep mnt
127.0.0.1:/nfsroot on /mnt type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=127.0.0.1,local_lock=none,addr=127.0.0.1)
結果は上記のようになり、ホスト側の設定が完了したことがわかります。
クライアントのソースコードのコンパイルと移植
- まずクロスコンパイラのパスを追加します。
export PATH=$PATH:/<交叉编译工具链路径>/bin
- nfsutil が依存するダイナミック ライブラリ libtirpc のソース コードを取得してコンパイルします。libtirpc
のソース コードをダウンロードします。libtirpc
は次の命令を実行してコンパイルします。-host はクロスコンパイル ツール チェーンです (他のプラットフォームは、対応するプラットフォームに切り替える必要があります)。ツールチェーン)、-prefix はコンパイル完了後にインストールされるダイナミック ライブラリです。
./configure --disable-gssapi --host=aarch64-buildroot-linux-gnu --prefix=<安装的路径>
make -j2
make install
- nfs-util ソース コードの取得とコンパイル
。CC はクロスコンパイル ツールを指します。libtirpc ダイナミック ライブラリのインストールへのパスを LDFLAGS の後に追加する必要があることに注意してください。コンパイルには依存関係があるため
./configure --disable-ipv6 --disable-uuid --disable-nfsv4 --disable-gss CC=aarch64-buildroot-linux-gnu-gcc --host=aarch64-buildroot-linux-gnu --prefix=<安装的路径> LDFLAGS="-L/<libtirpc 动态库安装的路径>/lib/"
make -j4
make install DESTDIR=<安装的路径>
コンパイルされた libtirpc.so.3.0.0 および対応するソフト リンク ファイル libtirpc.so libtirpc.so.3 をボード上のディレクトリ/lib
または/usr/lib
(通常はデフォルトで LD_LIBRARY_PATH パスに含まれます) にコピーします。そしてコンパイルしたmount.nfsを開発ボード上の/sbin
ディレクトリにコピーします。
確認する
開発ボードで次のコマンドを実行して、nfs サービスをマウントします。
mount.nfs 10.43.0.38:/nfsroot /mnt -o nolock