Конфигурация последовательного порта не работает после разветвления

Я написал программу, которая может выполняться на переднем или заднем плане. Программа использует последовательный порт для связи. Если я запускаю его на переднем плане (то есть он не развивается), все работает нормально. Если я запускаю его как демон из командной строки, все тоже работает нормально.

Только запуск его в фоновом режиме как демона со стартовым скриптом во время загрузки всегда не может установить правильную скорость передачи данных. Кажется, что-то по умолчанию 115200 бит / с вместо того, что я настроил: 9600 бит / с.
Я использую стандартную структуру ‘termios’ и соответствующие функции для конфигурации последовательного порта. Последовательный порт является частью образа ядра, а не загружаемым модулем. Вот соответствующий код:

struct termios TermIO;
speed_t locBaudrate;

...

// retrieve current settings
if (tcgetattr(nFile, &TermIO)==-1) {
// failed to get attributes
return false;
}// initialize anything to 0
memset(&TermIO, 0, sizeof(TermIO));

// set the baudrate
locBaudrate= B9600;
if (cfsetispeed(&TermIO, locBaudrate)==-1) {
// failed to set the input baudrate
return false;
}
if (cfsetospeed(&TermIO, locBaudrate)==-1) {
// failed to set the output baudrate
return false;
}

... // more configuraton like stop, bitlen, etc

// set the new configuration immediately i.e. do not wait for Rx or Tx to finish
if (tcsetattr(nFile, TCSANOW, &TermIO)==-1) {
// failed to set parameters
return false;
}

Чтобы быть абсолютно ясным: я могу запустить программу как демон (то есть она будет разветвляться) из командной строки, и тогда все будет работать нормально. Именно когда программа запускается со скриптом в /etc/init.d во время запуска, конфигурация скорости передачи не удалась. Сама программа отлично работает в фоновом режиме.

Есть идеи, что тут может быть не так?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]