我正在尝试创建一个允许使用BeagleBone的串行(uart)端口的NodeJS库。一些引脚是复用的,因此必须将一些配置位写入两个文件。这是我的函数,写入配置位以启用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.");
}
};
这是包含此功能的file。 以下是运行此函数的输出:
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 repo,现在处于起步阶段,因此没有很多文档。 python版本也在repo中。
答案 0 :(得分:0)
感谢NodeNS谷歌小组的Ben Noordhuis,我指出了导致问题的以下问题。我试图写入的设备驱动程序显然不接受任意搜索写入,因此为了解决这个问题,我需要欺骗NodeJS使用write而不是pwrite。诀窍是告诉write命令开始写-1
而不是0
。
fs.writeSync (txFd, txBuf, 0, txBuf.length, -1);