Какой файл мне следует изменить, чтобы смонтировать пользовательский оверлей во время загрузки?

Какой файл мне следует изменить, чтобы смонтировать пользовательский оверлей во время загрузки?

Я работаю над встраиваемым устройством с arm cortex A9. Версия ядра — 4.16.0, оно сгенерировано buildroot 2018.05. Память для хранения — mmc с несколькими разделами. U-boot считывает uImage в одном разделе и запускает ядро. Файловая система включена в образ ядра и загружается при запуске в initramfs (config: 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, сразу после того, как /он смонтирован.

Я понял, что при запуске система создает первое пространство памяти в оперативной памяти, а затем извлекает в него образ cpio. Затем /монтируется туда, и система запускает первую программу: systemd:/sbin/initс PID 1. Правильно ли я понимаю?

Я прочитал много статей и веб-сайтов вопросов и ответов, но я все еще не понимаю, где мне нужно внести изменения, чтобы выполнить мой оверлей во время загрузки. Какие файлы содержат операцию mount /?

решение1

Эта операция загрузки находится в initramfs. Вам нужно добавить скрипт в ваш initramfs/scripts, вероятно, init-bottomдля (пере)монтирования файловых систем по желанию, затем сгенерировать новый пакет initramfs.

Скрипт выполняется до вашей файловой системы init, в конце initпроцесса ядра. Причина, по которой это сбивает с толку, заключается в том, что код для настройки не находится непосредственно в файловой системе, он находится в вашем файле initramfs.

решение2

Вам необходимо выяснить фактическое местоположение вашего наложения и ввести его в файл.

/etc/fstab

таким же образом, как вы бы ввели его в работающую систему.

Одно предостережение: вам необходимо добавить файл в buildroot overlay-filesystem, чтобы при построении rootfs buildroot включал измененную filesystem-table.

В качестве примера предположим, что вы хотите наложить/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:

board/MYCOMP/MYBOARD/rottfs_overlay/etc/fstab:

  /dev/mmc0p0 /home ext4 defaults 0 1

Затем вы создаете файловую систему в дереве buildroot с помощью:

make BR2_EXTERNAL=/tmp/br_ext menuconfig
make

После перезагрузки новой файловой системы оверлей должен быть на месте.

Связанный контент