Стабилизация имен последовательных устройств при перезагрузке последовательной консоли

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

files=(*.jpg)
total=${#files[@]}
i=0
for f in "${files[@]}"; do
    i=$(( i + 1 ))
    echo index $i
    echo total $total
    echo "- Processing file: $f"
done

Пояснение

  • files=(*.jpg):сохранить глобус в массив$files
  • total=${#files[@]}:считать сумму в$total
  • i=0:инициализировать $iна 0.
  • i=$(( i + 1 )):прибавляем по 1 к $iв каждую петлю

Это предполагает, что "первая" петля равна 1. В зависимости от вашего мнения, вместо этого вы можете начать с 0.

0
02.03.2021, 17:09
2 ответа

Я не уверен, но если вы еще не пробовали, попробуйте изменить аргумент biosdevname=0|1 для ядра?

Его значение обычно изменяется в GRUB _CMDLINE _LINUX перед запуском grub2 -mkconfig на ПК, эта часть, конечно, может отличаться в вашей встроенной ситуации.

0
18.03.2021, 22:27

Мой частичный обходной путь(не идеальное решение )заключается в наличии вспомогательного сценария udev, который просматривает имя устройства ядра, например ttyS5, и ищет место устройства в устройстве PCI. дерево путем разрешения символической ссылки /sys/class/tty/ttyS5. Затем он просматривает все другие устройства TTY на том же узле и берет индекс этого устройства среди его одноранговых узлов. Предполагается, что порядок устройств в этом узле стабилен, даже если имена устройств не стабильны.

#!/usr/bin/env python3
import argparse
import os


# Parse arguments
parser = argparse.ArgumentParser()
parser.add_argument("kernel_dev")
args = parser.parse_args()

# Find peer devices of this one
sysfspath = os.path.realpath(f"/sys/class/tty/{args.kernel_dev}")
peer_devices = os.listdir(os.path.dirname(sysfspath))
peer_devices.sort(key=lambda d: (len(d), d))  # natural sort

# Print the index of this device among its peers
print(peer_devices.index(args.kernel_dev) + 1)

Тогда правило udev становится:

... PROGRAM="/usr/bin/serial_device_index %k", SYMLINK+="ttyEXP%c"...

Это решение может потребовать настройки для других конфигураций оборудования.

Что мне не нравится

Это просто создает стабильные имена символических ссылок, а не стабильные имена, которые могут быть полезны для таких вещей, как назначение устройства параметру ядра consoleили использование системных служб Ubuntu gettyконсоли входа в систему.

0
18.03.2021, 22:27

Теги

Похожие вопросы