【问题标题】:Linux DD passing data to serial port ttyS0Linux DD 向串口 ttyS0 传递数据
【发布时间】:2012-08-24 14:37:32
【问题描述】:

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

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

例如

echo "hello" > /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;
    }

提前谢谢..

【问题讨论】:

    标签: linux-device-driver kernel


    【解决方案1】:

    只是对写入串口的评论:

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

    请参阅以下手册页:

    • 男人打开
    • man fread/fwrite
    • man fprintf
    • 手动关闭

    【讨论】:

    • 感谢您的回答,这对我很有帮助。是的,我已经创建了一个用户空间应用程序,它现在运行顺利。
    【解决方案2】:

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

    您用来比较字符串的 sn-p 不正确。您可以在here 中了解有关如何在 C 中比较字符串的更多信息。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多