起動時にユーザーオーバーレイをマウントするにはどのファイルを変更すればよいですか

起動時にユーザーオーバーレイをマウントするにはどのファイルを変更すればよいですか

私は、arm cortex A9 を搭載した組み込みデバイスに取り組んでいます。カーネル バージョンは 4.16.0 で、buildroot 2018.05 によって生成されています。ストレージ メモリは、複数のパーティションを持つ mmc です。U-boot は、1 つのパーティション内の uImage を読み取り、カーネルを起動します。ファイル システムはカーネル イメージに含まれており、起動時に initramfs (構成: BR2_TARGET_ROOTFS_INITRAMFS) にロードされます。

overlayfs を使用して、フォルダー (mmc 内) を にマウントされた「ユーザー」ファイルシステムとして使用したいと思います/

私はすでに、次の行を追加して、/etcという名前のディレクトリでオーバーレイを試みましたが、成功しました:/data/etc/etc/fstab

/dev/mmcblk0p1 /data auto defaults 1 2
overlay /etc overlay x-systemd.requires=/data,lowerdir=/etc,upperdir=/data/etc,workdir=/data/work/etc 0 0

これは動作していますが、オーバーレイは systemd がサービスを開始した後にマウントされます。したがって、たとえばネットワーク構成は uImage 内のものであり、userファイルシステム内のものではありません。systemd を起動する前、マウント直後にオーバーレイをマウントしたいと思います/

起動時に、システムは RAM に最初のメモリ領域を作成し、そこに cpio イメージを抽出すると理解しています。次に/そこにマウントされ、システムはsystemd:/sbin/initPID 1 の最初のプログラムを起動します。私の理解は正しいでしょうか?

たくさんの記事や Q&A ウェブサイトを読みましたが、起動時にオーバーレイを実行するためにどこに変更を加えればよいのかまだわかりません。操作が含まれているファイルは何ですかmount /?

答え1

このブート時の操作は initramfs で行われます。 にスクリプトを追加してinitramfs/scriptsinit-bottom必要に応じてファイルシステムを (再) マウントし、新しい initramfs パッケージを生成する必要があります。

スクリプトは、initカーネル プロセスの最後に、ファイルシステムの前に実行されますinit。混乱を招く理由は、セットアップのコードがファイルシステム上に直接存在せず、initramfs ファイル内にあるためです。

答え2

オーバーレイの実際の場所を把握し、それをファイルに入力する必要があります。

/etc/fstab

実行中のシステムに入力するのと同じ方法で。

注意点が 1 つあります。ファイルを buildroot オーバーレイ ファイルシステムに追加して、rootfs を構築するときに、buildroot に変更されたファイルシステム テーブルが含まれるようにする必要があります。

例えば、オーバーレイしたいとします/dev/mmc0p0以上/家会社名とボード名として MYCOMP と MYBOARD を使用して、次の手順を実行します。

- create a filesystem structure in a seperate directory, as 
  specified in the buildroot manual chapter 9.1 "Recommended 
  directory structure", presumably under /tmp/br_ext
- in this directory you add board/MYCOMP/MYBOARD/rottfs_overlay/etc/fstab 
  and fill it with this information:

ボード/MYCOMP/MYBOARD/rottfs_overlay/etc/fstab:

  /dev/mmc0p0 /home ext4 defaults 0 1

次に、次のコマンドを使用して、buildroot ツリーにファイルシステムを構築します。

make BR2_EXTERNAL=/tmp/br_ext menuconfig
make

新しいファイルシステムを再起動すると、オーバーレイが配置されるはずです。

関連情報