Как включить питание USB по умолчанию при загрузке на OpenWrt?

Здравствуйте! <br/> Прежде чем приобрести новый мощный маршрутизатор для OpenWrt, решил протестировать систему на устройстве, которое у меня уже есть — Mikrotik hap ac. <br/> Я установил стандартную рекомендованную версию OpenWrt 24.10.0 (r28427-6df0e3d02a) и подключил флешку для расширения памяти через extroot. Однако обнаружил, что питание USB по умолчанию отключено и включается через команду /sys/class/gpio/usb-power/value, но это состояние не сохраняется после перезагрузки. <br/> Правильно ли я понимаю, что добавление команды "echo 1 > /sys/class/gpio/usb-power/value" в файл "/etc/rc.local" не сработает, так как файловая система должна быть подключена до выполнения rc.local? <br/> Как правильно настроить включение питания USB при загрузке, чтобы extroot работал с флешки?
  • 1 апреля 2025 г. 19:04
Ответы на вопрос 2
Да, вы правильно понимаете, что команда в файле `/etc/rc.local` может не сработать, если файловая система еще не смонтирована в момент выполнения скрипта. Однако, есть несколько способов обойти эту проблему и включить питание USB при загрузке OpenWrt.

### Способ 1: Использование `fstab`

Лучший вариант — добавить команду для включения питания USB в файл `/etc/fstab`. Вы можете создать отдельный файл скрипта и запустить его после монтирования файловой системы. Например:

1. Создайте новый скрипт, например, `/usr/bin/usb-power.sh`:
   ```sh
   #!/bin/sh
   echo 1 > /sys/class/gpio/usb-power/value
   ```

2. Сделайте его исполняемым:
   ```sh
   chmod +x /usr/bin/usb-power.sh
   ```

3. Теперь вам нужно удостовериться, что этот скрипт выполняется после того, как файловая система будет смонтирована. Один из способов реализации — использовать init-скрипт. Создайте новый файл в `/etc/init.d/usb-power`:
   ```sh
   #!/bin/sh /etc/rc.common

   START=99  # устанавливаем порядок запуска на самом позднем этапе
   STOP=10

   start() {
       /usr/bin/usb-power.sh
   }
   ```

4. Сделайте этот скрипт исполняемым:
   ```sh
   chmod +x /etc/init.d/usb-power
   ```

5. Добавьте его в автозагрузку:
   ```sh
   /etc/init.d/usb-power enable
   ```

### Способ 2: Установка команды в `rc.local` после монтирования

Если вы хотите оставить его в `rc.local`, то можно добавить небольшую задержку на выполнение команды или использовать простой цикл, который будет проверять, доступна ли файловая система:

```sh
#!/bin/sh

# Ждем, пока файловая система будет смонтирована
while [ ! -d /path/to/extroot_mount_point ]; do
    sleep 1
done

# Включаем питание USB
echo 1 > /sys/class/gpio/usb-power/value

exit 0
```

Примечание: Замените `/path/to/extroot_mount_point` на путь к смонтированной файловой системе.

### Способ 3: Настройка через UCI (если доступно)

Некоторые маршрутизаторы поддерживают управление питанием USB через UCI. Проверьте, есть ли соответствующая конфигурация в `/etc/config/system`, и в этом случае попробуйте:

```sh
config usb
    option powered '1'
```

После редактирования файлов не забудьте перезагрузить устройство, чтобы убедиться, что настройки вступили в силу. При правильной реализации ваше питание USB должно включаться автоматически при каждом старте устройства.
изучить процесс запуска опенврт 
https://openwrt.org/docs/techref/process.boot
прописать команду в S10boot или S39usb до попытки монтирования флешки
предположу rc.local исполняется сильно позжеее чем запрос на монтирование флешки. соответствено флешка не работает на момент попытки монирования.
изучить лог запуска.
Похожие вопросы