У меня минимальная встроенная система на основе i.MX6, у которой нет подключения к сети. Я планирую настроить systemd так, чтобы загрузка занимала меньше времени. В настоящее время для загрузки пользовательского пространства требуется больше времени. Я создал изображения с помощью yocto.
Можно ли настроить systemd с помощью yocto? или необходимо отключить службы systemd с помощью sysctl после загрузки платы.
Прежде всего проверьте, сколько служебных файлов systemd запущено при загрузке платы.
В etc/systemd/system/
путь ко всем запущенным службам при загрузке.
попробуйте удалить все службы (*.services
) по очереди и загрузите плату.
Я попытался изменить цель по умолчанию на basic.target с помощью systemctl set-default basic.target
. Но после загрузки приглашение на вход в систему не появляется. Нет обновлений после Started Console System Startup Logging
на приставке.
@ Рави. сначала изучите systemd и начните работать. "mountnfs.service" этот сервис смонтирует ваши корни, если вы удалите его, то rootfs будет смонтирован.
Судя по названию, я подумал, что это связано с монтированием NFS, поэтому я отключил его, после его отключения плата загружается полностью и появляется запрос на вход, я предполагаю, что другие службы, которые зависят от "mountnfs.service", повторяются, из-за чего время загрузки увеличено еще на 1 сек. Можете ли вы помочь понять, почему запрос на вход в систему не отображается с помощью basic.target.
Я изменил цель по умолчанию на базовую systemctl set-default basic.target
, после этого изменения перезагрузил плату, теперь не получаю приглашения на вход. Служба входа находится на /lib/systemd/system/systemd-logind.service
, а двоичный файл - на /lib/systemd/systemd-logind
. Как изменить basic.target для запуска службы входа в систему. Можно ли пропустить службу входа в систему и напрямую получить командную строку.
Это можно сделать из самого yocto. Но перед тем, как приступить к удалению, обязательно перечислите субкомпоненты / пакеты, которые вам не нужны в systemd.
В большинстве случаев вас могут не интересовать также пакеты timesyncd, timedated и другие сетевые пакеты.
Получите полный список здесь. Это последняя версия systemd bitbake со всеми доступными пакетами, которые она предоставляет. Выберите список, который вы хотите, и включите только тот список, который вы хотите, в файле .bbappend
Если у вас недостаточно контроля над уже включенными пакетами, создайте собственный .bbappend (может быть в вашем настраиваемом слое) с именем «systemd _%. bbappend» и добавьте,
PACKAGECONFIG_remove = "список пакетов для удаления".
Это удалит пакеты, которые вам не нужны в systemd. Та же процедура применяется к компонентам, не относящимся к systemd.
Спасибо, добавлено в файл .bbappend для удаления нежелательных пакетов, и это сработало. Можно ли увидеть все переменные и их значения, связанные с рецептом systemd, с помощью bitbake?
@Ravi Вы можете использовать devshell в своем рецепте, если он поддерживает. Например, bitbake -c devshell systemd
. это даст оболочку с окружением для рецепта. но не уверен, добавит ли он переменные внутри рецепта в среду.
Когда я пытаюсь запустить devshell, появляется ошибка «Не удалось выполнить дочерний процесс» / tmp / tmpyw1cv1v2 «(В доступе отказано)». Искал эту ошибку, но не получил никакой информации для исправления, большинство объяснений связано с предоставлением разрешения на выполнение файлу / скрипту, но здесь проблема связана с созданием файла во время выполнения в / tmp /. Использование ubuntu 14.04 для сборки.
@ Рави: Я не уверен в этом. Возможно, что-то нужно настроить в вашей системе / среде. Обычно devshell
не требует специальных разрешений.
Изначально после поиска в net add path для gnome-terminal возникла ошибка двоичного файла терминала gnome. При копировании и вставке строки, которую я пропустил, чтобы добавить spcae + "", из-за этого возникла проблема с разрешением. Теперь это решено, но не знаю, как отсутствующее пространство вызвало эту проблему с разрешением.
Теперь попробовал увидеть значения переменных рецепта в новом запущенном терминале. Пробовал с env на новом терминале, но не видел переменных рецепта systemd (скажем, зависит).
Я удалял службы одну за другой, но когда я удалял несколько служб, таких как
mountnfs.service, dmesg.service
, время увеличивалось на 1 секунду. Проверка времени с помощью systemd-analysis. Услугиdev-mmcblk1p2.device (8.571s), systemd-logind.service (1.718s), console-kit-log-system-start.service (1.075s), rc-local.service (1.022s), systemd-update-utmp-runlevel.service (915ms), psplash-quit.service (553ms)
занимают значительное время. Не уверены в сервисеdev-mmcblk1p2.device
, является ли он родительским для всех сервисов?