O serviço lê sys/devices/virtual/dmi/id/product_serial
em algum lugar no início e geralmente contém algum número hexadecimal típico de dez dígitos (por exemplo 01212302C5
, ) com nova linha. No entanto, às vezes o conteúdo não é analisável para string - bytes em hexadecimal são f8 6a 32 6d 0a
e não consigo descobrir por que e como isso acontece. O último 0a
parece sugerir que ainda deveria ser texto. Acontece geralmente em CI, mas não tenho certeza se o ambiente em contêiner pode ser de alguma forma o motivo do problema.
Qual poderia ser a razão de um comportamento tão estranho?
Embora o padrão DMI especifique que as strings devem ser caracteres exibíveis (p. 17) e que os números de série sejam strings de 64 bytes (ou 63, depois que eles de alguma forma conseguiram bagunçar a versão 2.0 ao exigir que, além de um campo de comprimento, as strings também precisassem ser terminadas em byte nulo) (e observe que eles também bagunçam o suporte a unicode, mas isso é tristemente típico de um padrão tão antigo):
Os fornecedores colocam coisas em campos. Triste verdade da vida. A menos que você tenha certeza absoluta de que o valor deve ser algo diferente de
'\xf8\x6a\x32\x6d\x0a' == 'øj2m\n'
(DMI especifica ISO-8859-1), você não tem um problema com Linux, mas com a qualidade típica do código do fornecedor de firmware.Se você sabe com certeza que o campo é diferente, então pode haver um problema com a comunicação DMI. Eu chamaria a implementação DMI do Linux de "madura", ou seja, não ficaria claro para mim se o problema é de hardware, firmware ou do lado do kernel, e eu provavelmente começaria rastreando a comunicação entre o kernel e o firmware para ver se a string que estou procurando aparece em algum outro lugar em uma resposta.