Насколько стабильны мажорный и минорный режим чардев?

Я работаю над библиотекой последовательного порта, и я думаю об использовании основного / вспомогательного режима символьного устройства, чтобы проверить, является ли данный файл последовательным портом платформы, последовательным портом pty или usb, в дополнение к использованию другого фреймворки, которые существуют под Linux или OSX.

На самом деле, для того, чтобы узнать, является ли файл последовательным портом USB или последовательным портом платформы, есть способы использовать доступные платформы, такие как libudev на Linux или IOKit на OSX. Но я думаю, что для проверки PTY файл, единственный способ использовать старый добрый stat():

#if defined(OS_LINUX)
#define PTY_MAJOR_NODE 136
#elif defined(OS_MAC)
#define PTY_MAJOR_NODE 16
#elif defined(OS_SOLARIS)
#define PTY_MAJOR_NODE 24
#endif

bool is_pty(const char* file) {
    struct stat filestat;
    if (0 == stat(file, &filestat)
            && S_ISCHR(filestat.st_mode)
            && major(filestat.st_rdev) == PTY_MAJOR_NODE) {
        return true;
    }
    return false;
}

До сих пор я узнал на моем Debian Linux, что PTS все чардевы имеют основной режим 136 и на моем OSX все PTS имеют режим 16, Просматривая ddg, я обнаружил, что Solaris может использовать основной режим 24.

Я мог найти много ресурсов онлайн, рассказывающих о том, что такое PTY/PTS и их история. Manppage openpty, pty или pts - хотя этот дает основные и второстепенные /dev/ptmx - не говорите о мажорной / минорной моде PTS устройства. И нет ресурсов, перечисляющих основные режимы через юнионы.

Итак, вот мои вопросы:

  • являются основным способом PTS (и, как следствие, другой серийный символ) стабильный для данного варианта Unix? (Я ищу что-то стабильное в ±2 года)
  • где они определены? Я думаю, что это драйвер ядра, который обрабатывает это, не так ли?
  • это хорошая идея полагаться на основной режим chardev, чтобы определить, что это за устройство?

NB: я не решался писать на unix.SE, но, поскольку я использую это в коде, я решил, что это больше вопрос, который нужно задать здесь, на SO.

Изменить: я опубликовал соответствующий вопрос на Unix.SE с просьбой помочь найти другие основные режимы и посмотреть, насколько они стабильны в разных системах. Я предполагаю, что если никто не имеет ответа, по крайней мере, мы можем запросить системы и посмотреть на источники.

1 ответ

Основные и второстепенные номера устройств определяются во время компиляции или соединения / загрузки в зависимости от используемого оборудования. Добавление дополнительной карты SBUS к компьютеру Solaris может (должно быть?) Иметь произвольный номер основного устройства. Я знаю, что мой сделал.
Короче говоря, я не думаю, что основные / второстепенные номера устройств будут делать то, что вы хотите.
Рассмотрим порты Debian Linux https://www.debian.org/ports
Я не могу себе представить, что архитектуры SPARC, s390, MIPS, PowerPC и ARM используют одинаковые старшие / младшие номера; автобусные архитектуры слишком разные.

Другие вопросы по тегам