NodeJS на BeagleBoard fs.write Ошибка неизвестна -1 - PullRequest
0 голосов
/ 31 марта 2012

Я пытаюсь создать библиотеку NodeJS, которая позволяет использовать последовательные (uart) порты BeagleBone.Некоторые из выводов мультиплексируются, поэтому некоторые биты конфигурации должны быть записаны в два файла.Вот моя функция, которая записывает биты конфигурации для включения uart:

var setMuxForUart = function (uart, next) {
    var txFd, rxFd;
    var txBuf = new Buffer(uart.muxTx.config, 'ascii');
    var rxBuf = new Buffer(uart.muxRx.config, 'ascii');
    var txBytesWritten, rxBytesWritten;

    console.log ("Configuring UART MUX for " + uart.path);

    txFd = fs.openSync (MUX_PATH + uart.muxTx.path, 'w');
    rxFd = fs.openSync (MUX_PATH + uart.muxRx.path, 'w');

    if (txFd && rxFd) {
        try {
            txBytesWritten = fs.writeSync (txFd, txBuf, 0, txBuf.length, 0);
        }
        catch (e) {
            fs.closeSync (txFd);
            fs.closeSync (rxFd);
            console.log ('Error Writing to file: '+ MUX_PATH + uart.muxTx.path + ' | ' + util.inspect (e));            
            return;
        }

        try {
            rxBytesWritten = fs.writeSync (rxFd, rxBuf, 0, rxBuf.length, 0);
        }
        catch (e) {
            fs.closeSync (txFd);
            fs.closeSync (rxFd);
            console.log ('Error Writing to file: ' + MUX_PATH + uart.muxRx.path + ' | ' + util.inspect(e));            
            return;
        }

        fs.closeSync (txFd);
        fs.closeSync (rxFd);

        if (txBytesWritten && rxBytesWritten) {
            console.log ("Uart MUX finished configuration");
            next ();
        }
        else {
            console.log ("An error occured writing to the UART MUX.");
        }
    }
    else {
        console.log ("An error occured while opening the UART MUX files.");
    }
};

Вот файл , содержащий эту функцию.Вот результат выполнения этой функции:

root@beaglebone:~/workspace/BonescriptSerial# node BonescriptSerial.js
The "sys" module is now called "util". It should have a similar interface.
Opening Serial Port for: /dev/ttyO1
Configuring UART MUX for /dev/ttyO1
Error Writing to file: /sys/kernel/debug/omap_mux/uart1_txd | { [Error: UNKNOWN, unknown error] errno: -1, code: 'UNKNOWN', syscall: 'write' }

Я проверил, что правильный вывод записывается в тестовые файлы, я пробовал множество параметров режима («0777» не имеет значения), я пробовалэто с функциями синхронизации и асинхронности безрезультатно, и я также попытался успешно записать эти файлы в python.Если у вас есть какие-либо идеи, которые помогут решить эту проблему, я был бы очень признателен.

Вот репозиторий github проекта, который сейчас находится в зачаточном состоянии, поэтому не так многодокументации.Версия Python также находится в репо.

1 Ответ

0 голосов
/ 02 апреля 2012

Благодаря Бену Нордхуису из группы Google NodeJS мне сообщили о следующей проблеме, которая вызывала проблему. Драйвер устройства, в который я пытался записать, по-видимому, не принимает произвольные записи поиска, поэтому для того, чтобы обойти это, мне нужно было заставить NodeJS использовать запись вместо pwrite. Хитрость заключается в том, чтобы заставить команду write начать запись с -1 вместо 0.

fs.writeSync (txFd, txBuf, 0, txBuf.length, -1);
...