Arm Cortex A9を使用して組み込みデバイスを開発しています。カーネルバージョンはbuildroot 2018.05によって生成された4.16.0です。ストレージメモリは複数のパーティションを持つMMCです。 U-bootはパーティションから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がサービスを開始した後にオーバーレイがインストールされます。たとえば、ネットワーク設定は私のファイルシステムではなくuImageuser
の設定です。 systemdを起動する前に、インストール直後に/
オーバーレイをインストールしたいと思います。
起動時にシステムがRAMに最初のメモリ空間を作成し、そこからcpioイメージを抽出することがわかりました。/
そこにインストールすると、システムは最初のプログラムであるPID systemd:/sbin/init
1を起動します。私の理解は正しいですか?
多くの記事やQ&Aサイトを読んでいますが、起動時に上書きするにはどこを変更する必要があるかはまだわかりません。これを含むファイルは何ですかmount /
?
答え1
この起動時の操作はinitramfsにあります。必要に応じinitramfs/scripts
てファイルシステムを(再)マウントするためにスクリプトを追加し、init-bottom
新しいinitramfsパッケージを作成する必要があります。
init
このスクリプトは、カーネルプロセスが終了するとファイルシステムの前に実行されますinit
。混乱する理由は、設定コードがファイルシステムに直接配置されず、initramfsファイルにあるためです。
答え2
オーバーレイが実際にどこにあるかを見つけてファイルに入力する必要があります。
/etc/fstab
実行中のシステムに入力するのと同じです。
注:rootfsをビルドするときは、buildrootに変更されたファイルシステムテーブルが含まれるように、このファイルを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
その後、次のコマンドを使用してビルドルートツリーにファイルシステムをビルドできます。
make BR2_EXTERNAL=/tmp/br_ext menuconfig
make
新しいファイルシステムを再起動すると、オーバーレイが所定の位置にあるはずです。