Кстати это для новых сообщений (СПАСИБО!!!) А когда нормально и сообщений не должно быть... насколько понимаю. Потому и нет вывода.
Для чего вы в цикл sleep добавили? Типа если в кольцевом буфере д-месга уже 300 записей, будем тупить 5 минут. Я при чтении д-месга, получал все сообщения который были прежде, и парсить дату в сообщении как то ломало. Думаю возьму текущее время в секундах, добавлю пару секунд и буду матчить записи которые будут поступать только после этого времени, тренировался на кошках на флешках, устанавливал, извлекал и ловил сообщения. Код (Bash): #!/bin/bash function get_time() { local __var=$1 local t="$(date +%s)" t=$((${t#0})) eval $__var="'$t'" } function dmesg_handle() { local start_time local current_time get_time start_time start_time=$((${start_time}+2)) dmesg -wktc |while read line; do get_time current_time if [ "$current_time" -gt "$start_time" ]; then if [[ $line == *"New USB device found"* ]]; then echo "USB plugged" fi if [[ $line == *"USB disconnect"* ]]; then echo "USB unplugged" fi fi done } dmesg_handle Для отлова Under и normalized такой фокус не прошел, вообще ничего не ловилось, пришлось отказаться от фиксации времени. Вот и со слипом «Меня терзают смутные сомнения»(C) Многие вещи, на первый взгляд кажущиеся очевидными, порой оказываются не очень понятными. Например для нагрузки процессора, imho самого энергоемкого устройства на малине, вы нагружаете ssh клиентами (интенсивная нагрузка только в момент хендшейка), иксами (я вообще не понимаю зачем иксы для устройства на батарейках), вместо того чтоб нагрузить все ядра процессора на 100% обычным рандомом. Каждый художник видит этот мир по своему А я вот у вас хотел поинтересоваться, как на малине вы обычно останавливаете выдачу питания для юсб-порта? Вопрос практический, юсб-модем порой виснет намертво, перестает отвечать драйверу, лечится только снятием питания.
Для чего вы в цикл sleep добавили? Да просто при тесте для наглядности... и echo тоже... А зачем иксы? Я ими и не пользуюсь... вот только удобно gedit применять и иногда Arduino IDE... Всё на устройстве... редактирую, компилю, испытываю... а иногда меняю прошивку в ардуине применяя Arduino IDE. Всё делаю на устройстве в RAM-диске и потом сохраняю на его же microSD... не таскать же его по wifi туда-сюда. Вот и держу соединение по ssh с кючом -X.
Нет это пока не делаю... но заметил что оно (Питание) подаётся на устройства (смотрел по светодиодам на подключенной ардуине и шилдам на ней) после окончания загрузки системы. Думаю это после запуска подгруженного модуля... ведь не сразу после подачи питания. думаю надо поискать по lsmod
Ясна, типа иксы это не через wifi... А я по старинке по scp файло туда-сюда передаю. Вы же собирались отключать, чего темнить, расскажите как это делать будете. П.С. Выгружая/загружая модули ядра вы надеетесь управлять линей VBUS юсб-порта, удачи. Чтоб не терять времени, сначала убедитесь что она там есть.
Кстати вот пытаюсь... читаю тут: http://sysadm.pp.ua/linux/usb.html https://ru.stackoverflow.com/questions/20539/Управление-питанием-usb-портов https://unixforum.org/viewtopic.php?t=127154 Ну и конечно любая перезагрузка... reboot выключает питание... ну и после запуска включает. Смотрю по светодиодам питания контроллера на шилдах и ардуине. Пробую по ссылкам, что указал.
Вы сами то проверяли эти ссылки на малине? Берете светодиод с резистором для ограничения по току и подключаете к юсб-порту снимаете питание с порта, самая честная проверка. Минимум 2 секунды как обеспечиваете таким отключением?
...Говорю ведь: ПРОБУЮ... ЧИТАЮ... Я не сказал, что всё работает. Но честно сказать мне конкретно надо: сохранить данные и poweroff(halt). А выключение порта USB рассматриваю... пока рассматриваю как ещё один вариант. Вот нихрена по написанному не выходит... ПРОБУЮ... ИЩУ. Но ведь система включает и выключает... может это и не важно в моём случае. Но ребятам бы неплохо бы передёргивать зависшие USB устройства.
Вот кстати: Тут применение и др. https://www.raspberrypi.org/forums/viewtopic.php?t=93463 позволяет снимать питание именно на малине с USB... может кому надо передёргивать устройство на USB. Кому-то модем зависший... ну и др. Исходник и инструкция тут https://github.com/codazoda/hub-ctrl.c Надо установить: sudo apt-get install libusb-dev откомпилировать один файл на Си(в исходнике): gcc -o hub-ctrl hub-ctrl.c -lusb Ну и там по первой ссылке есть фото... где какой порт. Кстати и мне будет пригодно... ардуина с шилдами бывает зависает... не часто, но бывает. А это один из вариантов. Как пример по ссылке: Код (Text): Reset ETH 0, and I lost my connection (have to reboot) sudo ./hub-ctrl -h 0 -P 1 -p 0 ; sleep 3; sudo ./hub-ctrl -h 0 -P 1 -p 1 Reset all USB and ETH sudo ./hub-ctrl -h 0 -P 2 -p 0 ; sleep 3; sudo ./hub-ctrl -h 0 -P 2 -p 1 Reset USB 4 sudo ./hub-ctrl -h 0 -P 3 -p 0 ; sleep 3; sudo ./hub-ctrl -h 0 -P 3 -p 1 Reset USB 2 sudo ./hub-ctrl -h 0 -P 4 -p 0 ; sleep 3; sudo ./hub-ctrl -h 0 -P 4 -p 1 Reset USB 3 sudo ./hub-ctrl -h 0 -P 4 -p 0 ; sleep 3; sudo ./hub-ctrl -h 0 -P 4 -p 1 тут перезапуск - выключение на 3 секунды. Работает... молодцы ребята!!!!
Включил малину, проверил питание на 4-х юсб-портах, везде 5V Пытаюсь отключить питание для второго порта. Код (Bash): pi@raspberrypi:~/hub $ sudo ./hub-ctrl -v -h 0 -P 2 -p 0 Hub #0 at 001:002 INFO: individual power switching. WARN: Port indicators are NOT supported. Hub Port Status: Port 1: 0000.0503 highspeed power enable connect Port 2: 0000.0100 power Port 3: 0000.0100 power Port 4: 0000.0100 power Port 5: 0000.0100 power Hub Port Status: Port 1: 0000.0503 highspeed power enable connect Send control message (REQUEST=1, FEATURE=8, INDEX=2) Hub Port Status: Port 1: 0000.0503 highspeed power enable connect Port 2: 0000.0000 Port 3: 0000.0100 power Port 4: 0000.0100 power Port 5: 0000.0100 power Проверяю питание на 4-х юсб-портах, везде 0V Включаю питание для второго порта. sudo ./hub-ctrl -v -h 0 -P 2 -p 1 Проверяю питание на 4-х юсб-портах, везде 5V Повторяю отключение для портов 3, 4, 5 - питание не отключается, на всех портах остается 5V. Опыты проводил на ‘Raspberry Pi Model B+ V1.2’ Если загрузились с внешнего usb-hdd и захотели отключить зависший юсб-модем, отключив питание таким образом со всех портов сразу, можете получить неприятный сюрприз
Я опыт проводил на Raspberry Pi3... там на форуме был разговор про Raspberry Pi2... а на модели Pi B+ вроде как 2 USB... вполне может быть это аппаратные различия. Сам исходник на Си не смотрел... видите ли был 3-й час ночи или около того. Всё перед сном. Надо посмотреть исходник.
Как аз в моём случае и USB-вебкамера и USB-serial для аруины передёргивать при неработе самое то. Осталось только контролировать просадку питания - собственно в этом и вопрос.
А чему радоваться, хотел выключить один порт, а выключил все разом. Минимальный уровень заряда лития 2,7В, критический 2,5В конвертер dc/dc step-up и с меньшего напряжения вам на выходе 5 вольт вытянет, какие просадки по питанию контролировать будите? Плавного падения можете не дождаться, после критического уровня, контроллер заряда, чтоб не убить аккумулятор жестоким обращением, просто выключит dc/dc конвертер при минимальном уровне.
Выключаю USB2(там у меня ардуина с шилдами).... верно: Код (Text): send CMD3 error! ...dev: 1 addr: 144 send CMD16 error! ...dev: 1 addr: 144 VIDIOC_DQBUF: No such device send CMD3 error! ...dev: 1 addr: 144 send CMD16 error! ...dev: 1 addr: 144 send CMD3 error! ...dev: 1 addr: 144 send CMD16 error! ...dev: 1 addr: 144 VIDIOC_DQBUF: No such device send CMD3 error! ...dev: 1 addr: 144 send CMD16 error! ...dev: 1 addr: 144 send CMD3 error! ...dev: 1 addr: 144 VIDIOC_DQBUF: No such device send CMD16 error! ...dev: 1 addr: 144 send CMD3 error! ...dev: 1 addr: 144 send CMD16 error! ...dev: 1 addr: 144 send CMD3 error! ...dev: 1 addr: 144 VIDIOC_DQBUF: No such device send CMD16 error! ...dev: 1 addr: 144 send CMD3 error! ...dev: 1 addr: 144 send CMD16 error! ...dev: 1 addr: 144 send CMD3 error! ...dev: 1 addr: 144 send CMD16 error! ...dev: 1 addr: 144 VIDIOC_DQBUF: No such device send CMD3 error! ...dev: 1 addr: 144 send CMD16 error! ...dev: 1 addr: 144 send CMD3 error! ...dev: 1 addr: 144 send CMD16 error! ...dev: 1 addr: 144 Выключилась и камера и ардуина с шилдами и новый запуск: Код (Text): www-data@pi02:~/ramdisk/mainwork_17_10_2018/work$ ./work.sh start >>> ARBOT (Дата:24.09.2018 Вурсия:02.01.01) <<< servoANDmotor: no process found sonar: no process found wsbots: no process found camwork: no process found Модуль управления приводами...................... дата и версия: Дата: 03.10.2018 Весия: 01.01.01 Модуль сонара ультразвукового.................... дата и версия: Дата: 10.10.2018 Весия: 01.02.04 /dev/ttyUSB0: No such file or directory Модуль сервера доступа по HTML через websocket... дата и версия: Дата: 08.10.2018 Весия: 01.02.04 Модуль работы с WEB-камерой...................... дата и версия: Дата: 03.10.2018 Весия: 01.01.02 res=0 BMP filename: work.bmp Size Struct info 124 dec 7c hex Version "5" --- step x 3 --- step y 1920 --------------------------------------------------------------------------------- Type : 4d42 Size : 921738 bytes Start addr: 8a hex --------------------------------------------------------------------------------- Widht : 640 Haight : 480 Bit in Pixel(color) 24 res=0 www-data@pi02:~/ramdisk/mainwork_17_10_2018/work$ Not camera detect и вот запуск после включения этого USB2: Код (C++): www-data@pi02:~/ramdisk/mainwork_17_10_2018/work$ ./work.sh start >>> ARBOT (Дата:24.09.2018 Вурсия:02.01.01) <<< servoANDmotor: no process found sonar: no process found wsbots: no process found camwork: no process found Модуль управления приводами...................... дата и версия: Дата: 03.10.2018 Весия: 01.01.01 Модуль сонара ультразвукового.................... дата и версия: Дата: 10.10.2018 Весия: 01.02.04 receive ansver CMD16 error! ...dev: 1 addr: 144 receive ansver CMD3 error! ...dev: 1 addr: 144 receive ansver CMD16 error! ...dev: 1 addr: 144 receive ansver CMD3 error! ...dev: 1 addr: 144 receive ansver CMD16 error! ...dev: 1 addr: 144 receive ansver CMD3 error! ...dev: 1 addr: 144 receive ansver CMD16 error! ...dev: 1 addr: 144 receive ansver CMD3 error! ...dev: 1 addr: 144 receive ansver CMD16 error! ...dev: 1 addr: 144 receive ansver CMD3 no main CMD! ...dev: 1 addr: 144 sendCMD: 03 recvCMD: 10 send bytes: 01 03 00 90 00 08 21 44 recv bytes: 01 10 00 90 00 08 E2 C1 Модуль сервера доступа по HTML через websocket... дата и версия: Дата: 08.10.2018 Весия: 01.02.04 Модуль работы с WEB-камерой...................... дата и версия: Дата: 03.10.2018 Весия: 01.01.02 res=0 BMP filename: work.bmp Size Struct info 124 dec 7c hex Version "5" --- step x 3 --- step y 1920 --------------------------------------------------------------------------------- Type : 4d42 Size : 921738 bytes Start addr: 8a hex --------------------------------------------------------------------------------- Widht : 640 Haight : 480 Bit in Pixel(color) 24 res=0 www-data@pi02:~/ramdisk/mainwork_17_10_2018/work$ start cam loop... BMP filename: work.bmp Size Struct info 124 dec 7c hex Version "5" --- step x 3 --- step y 1920 --------------------------------------------------------------------------------- Type : 4d42 Size : 921738 bytes Start addr: 8a hex --------------------------------------------------------------------------------- Widht : 640 Haight : 480 Bit in Pixel(color) 24 ...с номерами портов конечно что-то не то... но неприятно то, что устройства меняют имя по ls /dev пример: Код (Text): ttyUSB1 video1 конечно для тех у кого диск SSD/HDD по USB это некий ступор... понимаю! Но если надо по WIFI клиенту сказать о выключении на последнем издыхании... отключив всё наверное пригодно. Простите далее не разбирался.
Производилось при запущенном пакете программ... но стоит остановить работу этого пакента то сразу при перевключении порта имена по ls /dev восстановлены: Код (Text): ttyAMA0 video0 Ну тут простите... надо либо переделать, либо подстроиться под возможность переподключения. Возможно в ряде случаем не пригодно. Тут ещё и ETH выключается... но WIFI на месте.
какие просадки по питанию контролировать будите? Именно кратковременную нестабильность этого самого dc/dc конвертора при увеличении нагрузки, чем обуславливается достаточная просадка. Это как вариант. Конечно можно было взять и плату с интерфейсом для этих целей... но вот я и сам дурак... да и в конструкцию бутерброда она сразу не вписалась. А скорее всего просто я и сам дурак... а может не подумал, да и i2c для сонара сразу сделал.