1

嗨,我想将数据从我的 char 设备驱动程序传递到串行端口 ttyS0 ..

我创建了一个简单的 char 驱动程序模块,它可以读写,这是我第一次这样做.. 我正在使用 debian guest os ......

例如

回声“你好”> /dev/mydev

现在,当 /dev/mydev 接收到数据时,它会将字符串更改为类似于“hello too”的内容,并传递给我的串行端口 /dev/ttyS0..

如何更改字符串?.. 是否可以在 mydev 中使用 if 语句?

例如

if(string=="hello"){
alterstringTO: hello to;

pass "hello to" /dev/ttyS0;

like echoing in terminal..

echo "hello to" > /dev/ttyS0
}

这可能吗?...还是有其他方法可以做到这一点?

这里有一些代码..

ssize_t dev_read(struct file *filp, char *buf, size_t clen, loff_t *f_pos){

short cnt =0;
while(clen && (msg[Pos]!=0))
{
    put_user(msg[Pos],buf++);
    cnt++;
    clen--;
    Pos++;
}
return cnt;

    }


   ssize_t dev_write(struct file *filp, const char *buf, size_t clen, loff_t *f_pos){

short dec = clen-1;
short cnt=0;
memset(msg,0,50);
Pos=0;
while(clen>0)
{
    msg[cnt++] = buf[dec--];
    clen--;
}
return cnt;
    }

提前致谢..

4

2 回答 2

1

只是对写入串口的评论:

记住 Linux 的基础,Linux 中的一切都是文件。要从程序写入设备驱动程序,您需要打开文件进行写入,然后您可以 fprintf 任何您想要的数据。您也可以从用户空间执行此操作(推荐方式)

请参阅以下手册页:

  • 男人开
  • 人读/写
  • 人 fprintf
  • 男人关闭
于 2012-08-24T06:37:32.517 回答
1

我不确定您要在这里实现什么,因为问题和意图对我来说似乎不清楚。我将提供一些指导,但建议您编辑您的问题并使其更具可读性。

您用于比较字符串的代码段不正确。您可以在此处了解有关如何在 C 中比较字符串的更多信息。

在 C 中更改字符串是您开始使用字符串时学习的基本操作。应该可以帮助您入门。

最后,请注意内核编程需要格外小心。一个小错误可能会导致崩溃和数据丢失。如果你真的需要,那么这本书Linux Device Drivers 3rd Edition是免费提供的,可以进一步帮助你。

于 2012-08-21T00:35:33.073 回答