Я пытаюсь создать сценарий запуска на Ядре Ubuntu для включения usb_modeswitch
изменить режим одного из устройств, подключенных к устройству. Я выполняю Ядро Ubuntu на Dragonboard410c.
Как в классических рабочих столах Ubuntu, я пытался редактировать /etc/rc.local
Однако даже при том, что я делаю sudo vi /etc/rc.local
Я не могу отредактировать rc.local
поскольку это жалуется, что это - только файл только для чтения.
Я пытался редактировать файл непосредственно от SD-карты (Это работает на конфигурационные файлы на netplan), но так или иначе rc.local
не видимо в SD-карте.
Как Вы, как предполагается, используете способные пакеты стиля на начальной загрузке на Ядре Ubuntu. Я должен создать отдельный снимок для этого?
Заранее спасибо
Проверьте, смонтирована ли Ваша корневая файловая система с полномочиями чтения-записи (через /etc/mountab
или /etc/fstab
). Файловая система только для чтения не позволит редактировать файлы на нем, т.е. это не может быть сама проблема файла.
Если это только для чтения, использовать sudo mount -o remount,rw /
команда. Обратите внимание, что мгновенное ядро, iirc, предназначено, чтобы быть файловой системой только для чтения из соображений безопасности
Причина, которую Вы не можете записать в/etc/rc.local, найдена в mount
вывод команды (усеченный здесь).
/dev/mmcblk0p4 on /writable type ext4 (rw,relatime,data=ordered)
/dev/loop0 on / type squashfs (ro,relatime)
Ядро Ubuntu монтирует корневую файловую систему как squashfs, который только для чтения. Части файловой системы смонтированы как rw, как Вы будете видеть в неусеченном выводе mount
команда, однако rc.local не живет на одном из них.
Во-первых, rc.local является наследием sysvinit файл, который был вытеснен SystemD, который является теперь значением по умолчанию в Ubuntu и любом дистрибутиве.
Таким образом, Вы не можете выполнить сценарий путем вызова его от rc.local, потому что это - ro. Лучшее - и больше детализированного способа повысить сервисы на начальную загрузку - должно использовать Таймер SystemD. Это имеет преимущество повышения сервисов относительно других сервисов. Это - скальпель по сравнению с rc.local мачете sysvinit.
Для выполнения сценария в точной точке в начальной загрузке используют Таймер SystemD. Экземпляр сценария показывают ниже; настройте к своему определенному примеру использования
#!/bin/bash
cat <<EOF> /etc/systemd/system/myscript.service
[Unit]
Description=Customise Networking
Requires=network-online.target
After=snap.wifi-ap.management-service.service
[Service]
User=root
Group=root
Type=oneshot
ExecStart=/home/myuser/scripts/myscript.sh
[Install]
WantedBy=multi-user.target
EOF
chmod 644 /etc/systemd/system/myscript.service
systemctl enable myscript.service
Это было протестировано и доказано повысить службу поддержки, которую я создал в желаемой точке в начальной загрузке и переживаю перезагрузку. HTH-