Как получить доступ ко всем 4 портам моей последовательной карты PCI

Дальнейшее изучение источника дало ответ. Как обычно, это связано с тем, что Debian поставляет старые версии основных компонентов.

 if (lsflag)
    {
      int i, fo, oth;

#ifdef MULTIUSER
      if (multi)
        real_uid = multi_uid;
#endif
      SET_GUID();
      i = FindSocket((int *)NULL, &fo, &oth, SockMatch);
      if (quietflag) {
        if (rflag)
          exit(10 + i);
        else
          exit(9 + (fo || oth ? 1 : 0) + fo);
      }
      if (fo == 0)
        Panic(0, "No Sockets found in %s.\n", SockPath);
      Panic(0, "%d Socket%s in %s.\n", fo, fo > 1 ? "s" : "", SockPath);
      /* NOTREACHED */
    }

Где Паника это следующее

void Panic (int err, const char *fmt, VA_DOTS)
{
  char buf[MAXPATHLEN*2];
  PROCESS_MESSAGE(buf);

  debug3("Panic('%s'); display=%x displays=%x\n", buf, display, displays);
  if (displays == 0 && display == 0)
    {
      printf("%s\r\n", buf);
      if (PanicPid)
        Kill(PanicPid, SIG_BYE);
    }
  else if (displays == 0)
    {
      /* no displays but a display - must have forked.
       * send message to backend!
       */
      char *tty = D_usertty;
      display = 0;
      SendErrorMsg(tty, buf);
      sleep(2);
      _exit(1);
    }
  else
    for (display = displays; display; display = display->d_next)
      {
        if (D_status)
      RemoveStatus();
        FinitTerm();
        Flush(3);
#ifdef UTMPOK
        RestoreLoginSlot();
#endif
        SetTTY(D_userfd, &D_OldMode);
        fcntl(D_userfd, F_SETFL, 0);
        write(D_userfd, buf, strlen(buf));
        write(D_userfd, "\n", 1);
        freetty();
    if (D_userpid)
      Kill(D_userpid, SIG_BYE);
      }
#ifdef MULTIUSER
  if (tty_oldmode >= 0)
    {
# ifdef USE_SETEUID
      if (setuid(own_uid))
        xseteuid(own_uid);  /* may be a loop. sigh. */
# else
      setuid(own_uid);
# endif
      debug1("Panic: changing back modes from %s\n", attach_tty);
      chmod(attach_tty, tty_oldmode);
    }
#endif
  eexit(1);
}

Что касается того, почему Panic()не возвращает код ошибки, переданный ему через элемент err, ваше предположение так же хорошо, как и мое. Похоже, аргумент -Qтакже не работает, несмотря на то, что он присутствует.

По сути, версия aptне работает.

0
08.11.2019, 07:44
1 ответ

Первые ПК имели максимум 4 последовательных порта на базе чипа 8250 UART. Преодолеть этот предел было возможно, но обычно требовались либо другие аппаратные реализации, либо, по крайней мере, специальные драйверы, чтобы включить большее количество портов. Современный 16550A может быть обратно совместим со старыми чипами 8250 как на уровне программирования , так и на физическом уровне .

(В конце 1980-х — начале 1990-х при переходе на более новуюболее быстрый набор -модема с более старым/более дешевым компьютером, возможно, было необходимо вытащить фактические чипы 8250 из их сокетов и заменить их на 16550A, чтобы добиться постоянной ошибки -бесплатных загрузок.)

При быстром поиске в Google ST16650V2 выглядит как версия, модернизированная для совместимости с шиной PCI (e ), но она по-прежнему максимально совместима со старыми программными интерфейсами.

Ядро Linux имеет параметр времени компиляции -«Количество последовательных портов 8250/16550 для регистрации во время выполнения» (CONFIG_SERIAL_8250_RUNTIME_UARTS), для которого по умолчанию установлено значение 4. Debian 10 не изменил это значение по умолчанию в своих стандартных пакетах ядра.

Но это значение может быть переопределено параметром загрузки ядра8250.nr_uarts(или, может быть, просто nr_uartsдля старых версий ядра, хотя я думаю, что это слишком старо, чтобы применять его к Debian 10 ).

Поскольку у вас всего 5 портов, которые обрабатываются драйвером последовательного порта, совместимым с 8250 -, вам следует добавить 8250.nr_uarts=5в конец строки GRUB_CMDLINE_LINUX_DEFAULT=в /etc/default/grub. Результирующая строка конфигурации может выглядеть так:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash 8250.nr_uarts=5"

После внесения изменений вы должны запустить update-grubот имени пользователя root, чтобы изменения вступили в силу в GRUB. После перезагрузки ваша система сможет использовать все 5 последовательных портов, совместимых с 8250 -.

3
28.01.2020, 02:39

Теги

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