組み込み Linux は NFS ネットワーク ファイル システムをマウントします

背景

NFSについて

NFS (Network File System) は、異なるオペレーティング システム間でファイルを共有するための分散ファイル システム プロトコルです。これにより、ネットワーク上の異なるコンピュータ間でファイルやディレクトリを共有できるようになり、データ共有の効率とセキュリティが向上します。もともと Sun Microsystems によって開発された NFS は、現在ではさまざまなオペレーティング システムやネットワーク デバイスで広く使用されているオープン スタンダードです。NFS はクライアント/サーバー モデルを使用しており、クライアント コンピューターはサーバー上の共有ファイルにローカル ファイルであるかのようにアクセスできます。
日々の組み込み Linux 開発では、通常、ハードウェア メモリのサイズによって制限され、デバッグではホスト コンピュータから開発ボードにファイルを頻繁にコピーする必要があるためです。したがって、NFS を使用してホストのディレクトリをボードにマウントできます。ファイル転送に便利で、開発ボードのストレージスペースを拡張します。
組み込み Linux はカスタマイズされることが多いため、対応する NFS ツールを移植する必要があります。

構造

サーバーはホスト マシンに展開され、開発ボードは nfs をマウントするためのクライアントとして使用されます。

実装手順

前提条件

  1. まず、開発ボードはホスト コンピューター ネットワークと通信する必要があります。
  2. 開発ボードのカーネルはNFS機能をサポートしています。cat /proc/filesystemノードに「ntfs」という単語が含まれているかどうかを確認できます。オンになっていない場合は、「linux+ カーネルで nfs を有効にする」および「linux カーネルで nfs サービスを有効にする」を参照してください。
  3. ホストに ubuntu システムをインストールします (他のシステムも参照できます)
  4. トリミングされた Linux を実行する開発ボード

ホスト構成

  1. NFS クライアントおよびサーバー ソフトウェアをインストールします。NFS ソフトウェアは通常、次のコマンドを使用して Linux にインストールできます。
sudo apt-get install nfs-kernel-server nfs-common
  1. 共有ディレクトリを作成する
sudo mkdir /nfsroot
sudo chmod -R 777 /nfsroot
  1. NFSサーバーを設定します。次の構成ファイルを編集します。
sudo vim /etc/exports

このファイルでは、どのディレクトリを共有するか、およびこれらのディレクトリをどのクライアント マシンに共有するかを指定できます。例えば:

/nfsroot *(rw,sync,no_root_squash)

これにより/nfsroot ディレクトリが共有され、クライアント マシンが読み取り/書き込みモードでディレクトリをマウントできるようになります。

  1. NFS サーバー構成をリロードします。
sudo exportfs -a
  1. NFS サーバーを起動します。
sudo systemctl restart nfs-kernel-server
  1. 確認:
    ホスト上でコマンドを実行し、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)

結果は上記のようになり、ホスト側の設定が完了したことがわかります。

クライアントのソースコードのコンパイルと移植

  1. まずクロスコンパイラのパスを追加します。
export PATH=$PATH:/<交叉编译工具链路径>/bin
  1. nfsutil が依存するダイナミック ライブラリ libtirpc のソース コードを取得してコンパイルします。libtirpc
    のソース コードをダウンロードします。libtirpc
    は次の命令を実行してコンパイルします。-host はクロスコンパイル ツール チェーンです (他のプラットフォームは、対応するプラットフォームに切り替える必要があります)。ツールチェーン)、-prefix はコンパイル完了後にインストールされるダイナミック ライブラリです。
./configure --disable-gssapi --host=aarch64-buildroot-linux-gnu --prefix=<安装的路径>
make -j2
make install
  1. 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

おすすめ

転載: blog.csdn.net/weixin_43328157/article/details/132695755
おすすめ