yocto systemd может не запускаться после загрузки - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь добавить can0 в systemd для автоматического запуска во время загрузки на моей плате imx8. Но я не мог с этими конфигурациями:

$tree recipes-core/
----------------------------------------
recipes-core/
└── systemd
    ├── systemd-machine-units
    │   ├── 10-eth0.network
    │   ├── 10-eth1.network
    │   ├── 90-dhcp-default.network
    │   ├── can0.service
    │   └── can1.service
    └── systemd-machine-units_1.0.bbappend

2 directories, 6 files
$ cat systemd-machine-units_1.0.bbappend 
-------------------------------------------------------------
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"

# all our boards have at least one native network port
SRC_URI = " \
    file://10-eth0.network \
    file://90-dhcp-default.network \
    file://10-eth1.network \
    file://can0.service \
    file://can1.service \
"

SYSTEMD_SERVICE_${PN} = "can0.service can1.service"


do_install_append() {
    install -d ${D}${systemd_unitdir}/network/
    install -m 0644 "${WORKDIR}/10-eth0.network" ${D}${systemd_unitdir}/network/
    install -m 0644 "${WORKDIR}/90-dhcp-default.network" ${D}${systemd_unitdir}/network/
    install -m 0644 "${WORKDIR}/10-eth1.network" ${D}${systemd_unitdir}/network/
    install -d ${D}${systemd_system_unitdir}/
    install -m 0644 "${WORKDIR}/can0.service" ${D}${systemd_system_unitdir}/
    install -m 0644 "${WORKDIR}/can1.service" ${D}${systemd_system_unitdir}/

}

FILES_${PN} = "\
    ${systemd_system_unitdir} \
    ${systemd_unitdir}/network/ \
"
$cat can0.service 
--------------------------------------------------------------------------------
# For 2.0B legacy mode, arbitration bit rate (bitrate) and
# payload bit rate (dbitrate) have the same value - not higher than 1Mbps.
# CAN frames are limited to max 8 bytes in this case
# if target does not support FD, fg settings are not accepted by ip link set
[Unit]
Description=can0 interface setup

[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/sbin/ip link set can0 up type can bitrate 500000
ExecStop=/sbin/ip link set can0 down

[Install]
WantedBy=basic.target

поиск can0.service по целевым корням, но не найден:

$cd lib/systemd/ && find -name "*can*"
--------------------------------------------
./system/wpa_supplicant.service
./system/wpa_supplicant-nl80211@.service
./system/wpa_supplicant@.service
./system/wpa_supplicant-wired@.service

Также я пытаюсь добавить systemd_%. bbappend с этим файлом: (Также системное дерево отличается от кода ниже. can0.service находится в папке файлов рядом с сервисом _%. файл bbappend)

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

SRC_URI += "file://can0.service"

SYSTEMD_SERVICE_${PN} = "can0.service can1.service"

FILES_${PN} += "{sysconfdir}/systemd/system/* "

do_install_append() {
    install -d ${D}${systemd_unitdir}/system/
    install -m 0644 ${WORKDIR}/*.service ${D}${systemd_unitdir}/system/
}

can0.service, созданный выше systemd _%. bbappend, но не автоматический запуск во время загрузки. Просто can0.service появляется в папке / lib / systemd / system в target.

В чем моя ошибка? Кто-нибудь может мне помочь?

Ответы [ 3 ]

2 голосов
/ 26 января 2020

Состояние службы cat0, опубликованное выше, показывает, что служба не включена.

Вы можете включить эту службу с помощью команды systemctl enable cat0 и затем попытаться перезагрузить систему.

Службы, находящиеся в состоянии включения, автоматически приходят после перезагрузки системы.

1 голос
/ 26 января 2020

enable подключит указанный модуль в соответствующие места, чтобы он автоматически запускался при загрузке или других ситуациях в зависимости от того, что указано в файле модуля.

Начиная с версии 220 systemctl, включайте и отключайте поддержку ключ --now для запуска / остановки служб одновременно с включением / отключением.

например systemctl --now enable foobar.service

Используйте systemctl --version для проверки установленной версии.

0 голосов
/ 30 января 2020

Добавление

inherit systemd

и

SYSTEMD_AUTO_ENABLE ??= "enable"

к рецепту помогло мне. Теперь сервис автоматически включается после перепрошивки изображения.

...