gpt4 book ai didi

c - 使用内核模块读写 Arduino 串口

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:04 26 4
gpt4 key购买 nike

我正在编写一个网络驱动程序,它应该使用串行通信将数据包发送到 Arduino。这是一项家庭作业,仅用于教育目的。请在建议一切都可以在用户空间中完成之前考虑到这一点。

answer说明了 filp_openfilp_close,我想我可以用它们打开 /dev/ttyACMx/dev/ttyUSBx,但我在其他地方读到在内核中使用 I/O 文件操作不是一个好主意,所以我正在寻找更好的方法。

我也读过 outbinb,但我还没有找到任何方法来获取这两个函数所需的 port 数字参数.我已尝试使用 lsusb 并写入其中一些 0xXX 端点地址,但它没有用。

这是我的传输函数,我想在其中写入串行端口而不是打印。我的 aux 变量只是一个包含两个成员的 union:struct sk_buff skbunsigned char bytes[sizeof(struct sk_buff)]。但此时在作业中,我只想将 skb.data 的内容发送到我的 Arduino 串行。

aux = skb;
while(aux != NULL) {
p.skb = *aux;
for(i = 0; i < p.skb.len; i++) {
if(i == 0) {
printk(KERN_INFO "\\%02x", p.skb.data[i]);
}
else {
printk(KERN_CONT "\\%02x", p.skb.data[i]);
}

}
aux = aux->next;
}

Arduino 代码如下:

void setup() {
Serial.begin(9600);
Serial.println("Start");
}
void loop() {
while(Serial.available() > 0)
Serial.print(Serial.read());

Serial.println();
}

就这么简单。我想读取我的 Arduino 中一个数据包的内容。如何在我的网络驱动程序中写入 /dev/ttyACMx/dev/ttyUSBx 端口?

最佳答案

不推荐文件IO的原因:文件IO此时正在阻塞文件。由于您是在内核空间中打开文件,所以这不是一个好主意。想象一下,另一个进程想要打开同一个文件。

另一方面,如果您真的需要使用文件操作,可以使用 filp_open/filp_close。

如果您的作业没有指定使用什么,请使用要写入的内存地址。使您的写/读操作正常工作需要大量工作(与文件 IO 相比),但这是一种更好的方法。您不会阻止任何内容,因为您正在写入地址本身。

我的建议:花一些时间研究您的数据表/内存映射并直接写入地址。您将必须编写一个函数来设置寄存器的方向(写入/读取)和一个读取寄存器或写入寄存器的函数。

关于c - 使用内核模块读写 Arduino 串口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53173557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com