Eu tenho dois (e possivelmente no futuro, mais) dispositivos seriais USB que são idênticos (até o número de série, infelizmente) - eles são realmente mineiros BTC. Atualmente, eles terminam como ttyUSBX
onde X é 0, 1 ou 2, pois também há outro dispositivo serial USB não relacionado (que não precisa se preocupar aqui).
Eu gostaria de escrever uma regra do udev que os atribua a nomes previsíveis /dev
, como /dev/miner0
onde o zero é um número inteiro crescente. Eu não ligo para qual deles acaba como qual, mas preciso que eles estejam dentro de um intervalo previsível que não mude.
Atualmente eu tenho isso:
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="miner%n"
Isso é bem próximo, pois acabo com nomes como eu quero. O único problema é que, uma vez que os mineradores e o terceiro dispositivo podem aparecer em uma ordem aleatória, eu posso acabar com dois de miner0
, miner1
e miner2
, mas nunca sei quais deles (sem olhar manualmente). Se eu adicionar mais dispositivos seriais usb não mineradores (o que é uma possibilidade), isso agravará o problema.
Eu tinha encontrado uma referência à %e
qual parecia exatamente o que eu queria, mas parece não existir mais .
Como posso dar nomes previsíveis a esses dispositivos? Eu preferiria não amarrá-los à sua localização no barramento USB também, se possível.
Mais informações / antecedentes
Vale ressaltar que não sou tão incomodado com o nome, apenas com o fato de serem conhecidos e imutáveis, mesmo se / quando o dispositivo for conectado a um soquete USB diferente. Eu simplesmente esqueceria a coisa toda do udev e usaria as entradas /dev/serial/by-id
, mas como elas têm o mesmo número de série, há apenas uma delas lá!
Também vale a pena mencionar que a razão para fazer isso é que o software de mineração precisa receber uma lista de dispositivos para sondar e encontrar. Eu posso fazer tudo (basicamente encontra todos os mineiros válidos no ttyUSB*
intervalo), mas isso irrita o dispositivo não mineiro. Por isso, preciso dos nomes dos mineiros conhecidos com antecedência, para que eu possa configurá-lo para usar apenas esses. Infelizmente, ele não aceita um curinga (portanto, apenas dizer a ele para usar /dev/miner*
parece estar fora de questão), daí esse problema.
fonte
/dev/btcminer/*
) para uma lista como esta:-S /dev/btcminer/0 -S /dev/btcminer/1 <and so on if present>
quais são os parâmetros que o software utiliza.Respostas:
Isso não foi testado em combinação:
Adicione uma regra do udev
IMPORT{program}="/usr/local/sbin/unique-num /run/miner-counter 0 MINER_NUM"
para seus mineiros.Então você pode usar um script de shell simples, algo como este programa um tanto testado:
Em seguida, você pode usar essa variável de ambiente udev para nomear seus mineiros.
fonte
/dev/btcminer/0
e/dev/btcminer/1
qual é (uma versão ligeiramente aprimorada) do que eu estava procurando. Obrigado por isso! :-)#!/bin/bash
também. Por alguma razão,sh
alegou que houve um erro de sintaxe ("palavra inesperada"). Não sei por que ou o quesh
está sob o Ubuntu, mas isso resolveu.16
s para9
s, funcionará/bin/sh
. Pelo menos com traço. (/ bin / sh neste sistema é bash por algum motivo)A pergunta já tem uma resposta aceita, mas decidi compartilhar minha variação da solução fornecida pela derobert .
Meus requisitos eram um pouco diferentes - além de fornecer números de índice "incrementais" para novos dispositivos - eu queria recuperar os números de índice cedidos por dispositivos removidos do sistema.
A regra do udev para configurar a variável de ambiente seria algo como isto:
Na minha solução, eu não uso um arquivo para acompanhar o índice, simplesmente faço um loop sobre o existente ligação simbólica e encontre o primeiro índice disponível:
/usr/local/sbin/unique-num
roteiro:Obviamente, isso imprimirá o nome do var com o primeiro índice disponível, por exemplo, se estes ligação simbólica já existe:
e depois
miner1
é desconectado do sistema - somos deixados com:A execução do script retornará:
... como este é agora o primeiro índice disponível .
fonte