Проблема в следующем:
есть компьютер на котором установлен Debian 6, для него пишется программа демон, которая общается с оборудованием по com портам.
Программы работает без сбоев все отлично, но если выдернуть шнур питания из компьютера и после запустить его, то программа не получает данные из com портов.
Начали разбираться и выяснили следующие закономерность:
если завершить работу компьютера нормально (reboot или halt), при загрузки данные с com порта принимаются. А если выдернуть шнур питания, то при запуске программы данные не принимаются, а при повторном запуске данные принимаются.
Сравнивали состояния com портов до первого и после первого запуска (stty –a –F /dev/ttyS0) одинаковы, сравнивали структуры termios то же одинаковы.
Здравствуйте, tcvirkun, Вы писали:
T> если завершить работу компьютера нормально (reboot или halt), при загрузки данные с com порта принимаются. А если выдернуть шнур питания, то при запуске программы данные не принимаются, а при повторном запуске данные принимаются.
А если reboot, но без прохождения стоповых скриптов?
T>Сравнивали состояния com портов до первого и после первого запуска (stty –a –F /dev/ttyS0) одинаковы, сравнивали структуры termios то же одинаковы. T>Подскажите куда копать дальше?
Сравнить dmesg, это навскидку.
Вообще же похоже на что-то в районе ACPI, но тут без бутылки не разобраться.
Здравствуйте, tcvirkun, Вы писали:
T> если завершить работу компьютера нормально (reboot или halt), при загрузки данные с com порта принимаются. А если выдернуть шнур питания, то при запуске программы данные не принимаются, а при повторном запуске данные принимаются.
Есть подозрение, что где-то создаётся временный файл, индицирующий работу нормально инициализированного порта. А при жёсткой перезагрузке он не удаляется штатно. Соответственно, при последующем включении порт сразу "работает". Можно попробовать поискать, к каким файлам (особенно в каталогах временных файлов) идут обращения программы. Ну или же при запуске программы безусловно закрыть/открыть/инициализировать порт.