Файл правила Udev для модема, не работающего

Если Вы не возражаете переупорядочивать строки, и у Вас есть GNU coreutils (т.е. на невстроенном Linux или Cygwin, не слишком древнем с тех пор shuf появившийся в версии 6.0), shuf (“перестановка”) переупорядочивает строки файла случайным образом. Таким образом, можно переставить файл и диспетчеризировать первые m строки в один файл и остальных в другого.

Нет никакого идеального способа сделать ту отправку. Вы не можете просто объединить в цепочку head и tail потому что head буферизовал бы вперед. Можно использовать split, но Вы не получаете гибкости относительно имен выходного файла. Можно использовать awk, конечно:

"output1"} else {print} }'

Можно использовать sed, который неясен, но возможно быстрее для больших файлов.

output2

Или можно использовать tee копировать данные, если Ваша платформа имеет /dev/fd; это в порядке, если m является маленьким:

output1; } 3>&1 | tail -n +$(($m+1)) >output2

Портативно, можно использовать awk для диспетчеризации каждой строки в свою очередь. Обратите внимание, что awk не очень хорош при инициализации его генератора случайных чисел; случайность только определенно не не подходит для криптографии, но и даже очень хороша для численного моделирования. Семя будет тем же для всех awk вызовов на любом системном скручивании жгутов один второй период.

"output1"} else {print >"output2"}
        --N;
    }'

При необходимости в лучшей случайности можно сделать то же самое в Perl, который отбирает его RNG прилично.

", "output1" or die $!;
    open OUT2, ">", "output2" or die $!;
    my $N = `wc -l ) {
        if (rand($N) < $m) { --$m; print OUT1 $_; } else { print OUT2 $_; }
        --$N;
    }
    close OUT1 or die $!;
    close OUT2 or die $!;
' 42

4
27.09.2016, 20:38
2 ответа

Ожидайте — я вижу его. Две вещи:

  1. Вы использовали ATTRS{product}=="6011" когда Вы имели в виду ATTRS{idProduct}=="6011". То отсутствие id повредит его. Копия-и-вставка с udevadm info --attribute-walk предотвратить опечатки как это.
  2. Ваш шаблон является неправильным; это должно быть KERNEL=="ttyUSB[0-9]*". Это (очень ограничено) регулярное выражение, таким образом, [0-15]* означает "любой из символов 0–1 или 5, повторил любое количество раз".

Кроме того, Вы, вероятно, хотите использовать SYMLINK+= вместо SYMLINK== сохранить другие ссылки. Вы корректны, которым это должно быть SUBSYSTEMS=="usb" соответствовать на продукте/поставщике.

Для нумерации устройств AMPM необходимо дать udev число. К сожалению, это - часть usb-serial устройство, не usb один. Таким образом, Вы не можете просто использовать %s{port_number}/$attr{port_number}. Вместо этого одолжите прием у 60-persistent-serial.rules в более новом udev версии, и делают что-то вроде этого:

SUBSYSTEMS=="usb-serial", ENV{.LOCAL_PORT_NUM}="$attr{port_number}"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", SYMLINK+="AMPM$env{.LOCAL_PORT_NUM}"

На более старом udev, Вам, вероятно, придется использовать %E{…} вместо $env{…}.

Или, альтернативно, если Ваш udev является достаточно новым, просто используйте /dev/serial/by-id:

$ ls -l /dev/serial/by-id/
total 0
lrwxrwxrwx 1 root root 13 Jan  4 06:02 usb-067b_2303-if00-port0 -> ../../ttyUSB0

Необходимо видеть поставщика/код продукта там и все порты.

2
27.01.2020, 20:58

Имел подобные потребности; отобразить много последовательных устройств usb FTDI на уникальные имена, так, чтобы сценарии могли отослать их исключительно.

На Ubuntu 13.04, после некоторого лужения, следующее работало на меня.

Надо надеяться, может помочь:

#######################################################################################################################################
# Creating unique symbolic links to usb-serial devices based on their "serial" number and other such as "bInterfaceNumber" attributes.
# Use udevadm [e.g. udevadm info -a -p $(udevadm info -q path -n ttyUSB0)] to find the subsystems that match and their attributes.
#######################################################################################################################################
SUBSYSTEMS=="usb", ATTRS{serial}=="0000:00:1d.0", ENV{.LOCAL_serial}="$attr{serial}"
SUBSYSTEMS=="usb", ENV{.LOCAL_ifNum}="$attr{bInterfaceNumber}"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ENV{.LOCAL_serial}=="0000:00:1d.0", ENV{.LOCAL_ifNum}=="00",  SYMLINK+="ttyPapilioJTAG",  MODE="0660"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ENV{.LOCAL_serial}=="0000:00:1d.0", ENV{.LOCAL_ifNum}=="01",  SYMLINK+="ttyPapilioConsole",  MODE="0660"
1
27.01.2020, 20:58

Теги

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