Yocto - Создать и заполнить отдельный / домашний раздел

Я создаю довольно простой образ Yocto на основе x86.

Я хочу, чтобы файловая система / была доступна только для чтения, поэтому я установил

IMAGE_FEATURES_append = " read-only-rootfs "

в кастомной копии оригинала core-image-minimal.bb. Однако я хочу, чтобы /home был доступен для записи и находился в отдельном разделе.

Итак, я добавляю строку

part /home --ondisk sda --fstype=ext4 --label home --align 1024 --size 600

в genericx86.wks. Это создает фактический /home раздел в окончательном образе wic, но он, естественно, не содержит никаких данных, так как для него нет соответствующего rootfs. Это приводит к следующему вполне ожидаемому сообщению после загрузки: No directory, logging in with HOME=/.

В Интернете на удивление мало информации об этом. Есть это объяснение:

Гораздо проще создать или изменить рецепты сборки, чтобы подготовить один каталог rootfs для каждого раздела.

Мне просто жаль, что в документации или примере не было ссылки на то, как этого добиться.

Я вижу, что разделы заполняются скриптами (плагинами) python, такими как rootfs.py, и что параметры изображения, такие как IMAGE_ROOTFS_SIZE, указаны в упомянутых файлах рецептов изображений, таких как genericx86.wks, но мне этого недостаточно, чтобы соединить эти части вместе.

Я прочитал create-partitioned-images-using-wic и связанный openembedded kickstart, там нет никаких подсказок.

Цени чью-то добрую помощь.


person fault-tolerant    schedule 17.05.2019    source источник


Ответы (1)


С WIC вы можете сделать что-то вроде этого:

custom.wks.in:

...

part / --source rootfs --ondisk sda --fstype=ext4 --label system --exclude-path=home/    
part /home --source rootfs --rootfs-dir=${IMAGE_ROOTFS}/home --ondisk sda --fstype=ext4 --label home

...

Обратите внимание: если вы хотите использовать ${IMAGE_ROOTFS} в файле WKS, важно указать его суффиксом .in.

person Nayfe    schedule 17.05.2019
comment
Большое спасибо за быстрый и правильный ответ. Я только что его протестировал, работает отлично и тоже имеет смысл. Я скопировал исходный файл wks на свой слой в папке wic: wic/myfile.wks.in, в моем слое layer.conf добавил WKS_FILE="myfile.wks.in", и внутри файла изменил разделы в соответствии с вашей рекомендацией. Также нет проблем с добавлением параметра --size для установки размера /home. - person fault-tolerant; 17.05.2019
comment
Столько времени ушло на то, чтобы понять, как это сделать с первого раза, рад, что помог :) - person Nayfe; 17.05.2019
comment
Возникает вопрос: увеличивается ли размер изображения (.wic), когда мы добавляем дополнительный раздел? Я только что создал один раздел размером 1 ГБ, и размер моего изображения увеличен на 1 ГБ. - person Raxesh Oriya; 31.03.2020
comment
Wic добавляет 1 ГБ, когда включена функция управления пакетами. Чтобы исправить размер раздела, вы должны установить IMAGE_ROOTFS_EXTRA_SPACE = "0", IMAGE_OVERHEAD_FACTOR = "1.0", IMAGE_ROOTFS_SIZE = "<size>", IMAGE_ROOTFS_MAXSIZE = "<size>". - person Nayfe; 01.04.2020
comment
Вы также можете добавить --fixed-size=1024M к линиям wic (а также --align = ‹blocksize›). - person Nayfe; 01.04.2020
comment
Если я хочу сделать это с новым каталогом, которого нет с самого начала, например, foo вместо home, мне нужно будет сделать это в рецепте или на изображении? - person alebo611; 06.11.2020
comment
@ alebo611 вы можете создать папку foo из рецепта или ROOTFS_POSTPROCESS_COMMAND, она должна работать - person Nayfe; 24.11.2020
comment
Пробовал - создает раздел, но не монтируется при загрузке ОС. Какой рекомендуемый способ монтирования раздела, созданного выше? ROOTFS_POSTPROCESS_COMMAND или изменение .wks файла, или что-то еще? - person Tomy; 15.12.2020
comment
@Tomy обычно WIC автоматически добавляет запись для каждой строки в /etc/fstab, это ваш случай? Может быть, вы можете проверить журналы загрузки, чтобы узнать, нет ли ошибок, связанных с монтированием диска? - person Nayfe; 15.12.2020