Tengo dos (y posiblemente en el futuro, más) dispositivos serie USB que son idénticos (hasta el número de serie, desafortunadamente), en realidad son mineros de BTC. Actualmente terminan ttyUSBX
donde X es 0, 1 o 2, ya que también hay otro dispositivo serie USB no relacionado (que no debe preocuparse aquí).
Me gustaría escribir una regla udev que les asigne nombres predecibles dentro /dev
, como /dev/miner0
donde el cero es un número entero incremental. No me importa cuál de ellos termine como cuál, pero sí necesito que estén dentro de un rango predecible que no cambie.
Actualmente tengo esto:
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="miner%n"
Esto está bastante cerca, ya que termino con nombres como quiero. El único problema es que, dado que los mineros y el tercer dispositivo a veces pueden aparecer en un orden aleatorio, podría terminar con dos de miner0
, miner1
y miner2
, pero nunca sé cuáles dos (sin mirar manualmente). Si agrego más dispositivos serie USB no mineros (que es una posibilidad), agravará el problema.
Había encontrado una referencia a lo %e
que parecía que hacía exactamente lo que quería, pero parece que ya no existe .
¿Cómo podría darles a estos dispositivos nombres predecibles? Preferiría no vincularlos a su ubicación en el bus USB también si es posible.
Más información / antecedentes
Vale la pena mencionar que no me preocupan los nombres, solo que sean conocidos e inmutables incluso si / cuando el dispositivo se conecta a una toma USB diferente. Simplemente olvidaría todo el asunto de udev y usaría entradas /dev/serial/by-id
, pero como tienen el mismo número de serie, ¡solo hay una de ellas allí!
También vale la pena mencionar que la razón para hacer esto es que el software de minería necesita una lista de dispositivos para sondear y encontrar. Solo puedo hacer que haga todo (básicamente solo encuentra a todos los mineros válidos en el ttyUSB*
rango), pero eso molesta al dispositivo que no es minero. Por lo tanto, necesito los nombres de los mineros conocidos de antemano para poder configurarlos para usar solo esos. Lamentablemente, no aceptará un comodín (por lo tanto, simplemente decirle que lo use /dev/miner*
parece estar fuera de discusión), de ahí este problema.
fuente
/dev/btcminer/*
) a una lista como esta:-S /dev/btcminer/0 -S /dev/btcminer/1 <and so on if present>
cuáles son los parámetros que toma el software.Respuestas:
Esto no se ha probado en combinación:
Agregue una regla udev
IMPORT{program}="/usr/local/sbin/unique-num /run/miner-counter 0 MINER_NUM"
para sus mineros.Entonces podría usar un script de shell simple, algo como este programa algo probado:
Luego puede usar esa variable de entorno udev para nombrar a sus mineros.
fuente
/dev/btcminer/0
y/dev/btcminer/1
cuál es (una versión ligeramente modificada de) lo que estaba buscando. ¡Gracias por esto! :-)#!/bin/bash
. Por alguna razón,sh
afirmó que hubo un error de sintaxis ("palabra inesperada"). No sé por qué o quésh
hay bajo Ubuntu, pero eso lo resolvió.16
s a9
s, entonces funcionará/bin/sh
. Al menos con guión. (/ bin / sh en este sistema es bash por alguna razón)La pregunta ya tiene una respuesta aceptada, pero decidí compartir mi variación de la solución provista por derobert .
Mis requisitos eran ligeramente diferentes, además de proporcionar números de índice "incrementales" a los nuevos dispositivos, quería volver a adquirir números de índice que fueron dados por dispositivos que se han eliminado del sistema.
La regla de udev para configurar la variable de entorno se vería así:
En mi solución, no uso un archivo para realizar un seguimiento del índice, simplemente hago un bucle sobre el existente enlace simbólico y encuentre el primer índice disponible:
/usr/local/sbin/unique-num
guión:Esto, por supuesto, imprimirá el nombre de var con el primer índice disponible, por ejemplo si estos enlace simbólico ya existe:
y luego
miner1
se separa del sistema, nos quedamos con:La ejecución del script devolverá:
... ya que este es el primer índice disponible .
fuente