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ファイルにあるためです。