AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1535505
Accepted
robert rozee
robert rozee
Asked: 2024-12-14 20:47:19 +0800 CST2024-12-14 20:47:19 +0800 CST 2024-12-14 20:47:19 +0800 CST

alterações no nome do driver serial com kernel 6.8 e posterior

  • 772

antes do kernel 6.8 [ edição: na verdade, antes e incluindo o 6.3; não estou em condições de verificar kernels entre 6.3 e 6.8 ], o caminho do driver para portas seriais fixas (ttySxx) era resolvido para /sys/bus/platform/drivers/serial8250 e simplesmente verificar se o nome era " serial8250 " era suficiente para decidir entre um dispositivo fixo e um removível (USB) - se o nome do driver NÃO fosse " serial8250 ", então alguém poderia assumir que era (a) um dispositivo removível e (b) nenhuma verificação adicional era necessária para garantir que era um dispositivo real (ou seja, não apenas um espaço reservado).

isso foi usado na solução para verificação de portas oferecida por Soren Holm aqui: https://stackoverflow.com/questions/2530096/how-to-find-all-serial-devices-ttys-ttyusb-on-linux-without-opening-them Tenho usado uma tradução Pascal do código de Soren por vários anos em softwares que escrevi sem problemas ou reclamações.

mas do kernel 6.8 em diante (Ubuntu 24.04LTS), o caminho do driver mudou. agora ele resolve para /sys/bus/serial-base/drivers/port , e o nome " port " é um pouco genérico demais para ser usado como base para tomar decisões - o kernel 6.8 quebra o código de Soren. até agora, não consegui encontrar nenhuma discussão útil online sobre essa mudança no kernel.

minha pergunta é, com o kernel 6.8 e posteriores, existe alguma verificação alternativa confiável para determinar se uma porta serial está associada ao que era o driver " serial8250 "? Existe algum especialista por aí que saiba sobre as mudanças no driver da porta serial, por que elas foram feitas e soluções alternativas para as consequências?

Saudações, Rob :-)

adendo: esclarecido que verifiquei os kernels 6.3 e anteriores, 6.8 e posteriores, mas NÃO os kernels entre 6.3 e 6.8. portanto, as alterações podem ter sido feitas em qualquer lugar após o kernel 6.3

drivers
  • 1 1 respostas
  • 191 Views

1 respostas

  • Voted
  1. Best Answer
    robert rozee
    2025-02-08T17:26:36+08:002025-02-08T17:26:36+08:00

    o nome do driver não é mais útil para identificar dispositivos seriais fixos, então criei um código alternativo (escrito em Pascal) que parece funcionar com os kernels Ubuntu 6.8 e anteriores:

    program project1;
     
    uses SysUtils, BaseUnix, TermIO;
     
    var DeviceName:string;
                SR:TSearchRec;
                FD:longint;
              tios:TermIOS;
          n, c, PT:integer;
     
    begin
      n:=0;
      c:=0;
      if FindFirst('/sys/class/tty/*', faAnyFile , SR) = 0 then                    // alternative: should ALSO find any rfcomm*
      repeat
        DeviceName:=SR.Name;
     
        if (DeviceName<>'.') and (DeviceName<>'..') then                           // exclude '.' and '..'
        if fpAccess('/dev/'+DeviceName, R_OK+W_OK)=0 then                          // exclude devices we have NO ACCESS to
        if FileExists('/sys/class/tty/'+DeviceName+'/device/driver')  or           // this suffices with FPC prior to 3.20
           DirectoryExists('/sys/class/tty/'+DeviceName+'/device/driver')  then    // from FPC 3.20 onwards we need this instead
        begin
          if FileExists('/sys/class/tty/'+DeviceName+'/type') then PT:=1           // port type 1 = fixed serial port
                                                              else PT:=2;          // port type 2 = removable/USB
          if PT=1 then
          begin
            FD:=fpOpen('/dev/'+DeviceName, O_RDWR or O_NONBLOCK or O_NOCTTY);
            if FD<0 then PT:=0 else                                                // -1, couldn't open /dev entry -> failure!
            begin
    //        if IsATTY(FD)=0 then PT:=0                                           // IsATTY (and TTYname) use ioctl/TCGETS
    //                        else inc(n);                                         // count number of fixed serial ports
              if fpIOCtl(FD,TCGETS,@tios)<>0 then PT:=0                            // TCGETS: on success 0 is returned,
                                             else inc(n);                          //         on error -1 is returned
              fpClose(FD)
            end
          end;
     
          if PT<>0 then inc(c);                                                    // count total number of ports
          case PT of 1:writeln('* ', DeviceName);                                  // fixed serial port, verified as real
                     2:writeln('  ', DeviceName)                                   // removable (USB) serial port
          end
        end
      until FindNext(SR) <> 0;
     
      if n<>0 then writeln('(', n, ' fixed devices)');
      if c=0 then writeln('no serial ports found');
      FindClose(SR)
    end.
    
    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve