【问题标题】:write: no buffer space available socket-can/linux-can写:没有可用的缓冲区空间 socket-can/linux-can
【发布时间】:2017-03-18 09:23:36
【问题描述】:

我正在运行一个带有两个 CAN 通道的程序(使用 TowerTech CAN Cape TT3201)。

这两个通道是 can0 (500k) 和 can1 (125k)。 can0 通道运行良好,但 can1 运行 write:No buffer space available 错误。

我正在使用 ValueCAN3/VehicleSpy 来检查消息。

这是在我运行程序之前。 can0 和 can1 似乎都在发送,但只有 can0 出现在 VehicleSpy 中。

root@cantool:~# cansend can0 100#00 
root@cantool:~# cansend can1 100#20

这是在我尝试运行程序之后

root@cantool:~# cansend can1 100#20 
write: No buffer space available 
root@cantool:~# cansend can0 111#10

当我的程序运行时:我收到所有要在 can1 上发送的消息的错误

2016-11-02 15:36:03,052 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    12f83018    010    1    00 
2016-11-02 15:36:03,131 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    0af81118    010    6    00 00 00 00 00 00 
2016-11-02 15:36:03,148 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    12f81018    010    6    00 00 00 00 00 00 
2016-11-02 15:36:03,174 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    0af87018    010    3    00 00 00 
2016-11-02 15:36:03,220 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    12f89018    010    4    00 00 00 00 
2016-11-02 15:36:03,352 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    12f83018    010    1    00 

但有时整个程序运行良好(如果模块重新启动或一些随机实例)。

我该如何解决这个问题?

root@cantool:~# uname -r 
4.1.15-ti-rt-r43

经过一番挖掘,我发现了这个

 root@cantool:-#ip -details link show can0
 4:can0: <NOARP,UP,LOWER_UP, ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 10
      link/can promiscuity 0
      can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 100
      bitrate 500000 sample-point 0.875
      tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
      c_can: tseg1 2..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1
      clock 24000000
 root@cantool:-#ip -details link show can1
 5: can1: <NOARP,UP,LOWER_UP, ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 10
      link/can promiscuity 0
      can state STOPPED restart-ms 100
      bitrate 125000 sample-point 0.875
      tq 500 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
      c_can: tseg1 2..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1
      clock 8000000

原来can1由于某种原因被停止了

但是当我尝试时:

ip link set can1 type can restart 
RNETLINK answers: Invalid argument

【问题讨论】:

    标签: beagleboneblack can-bus socketcan


    【解决方案1】:

    sudo ifconfig can0 up启用can0接口后,运行:

    sudo ifconfig can0 txqueuelen 1000
    

    这将增加队列规则中每个内核传输队列允许的帧数。更多信息here

    ...有时整个程序运行良好(如果模块重新启动或一些随机实例)。

    重启 SocketCAN 接口时它工作的原因是你可能会清理足够的缓冲区空间以使其工作。

    【讨论】:

      【解决方案2】:

      通过尝试ifconfig can1 up 应该可以正常工作...

      【讨论】:

      • 要请求澄清或附加信息,请使用评论。如果您确定您的答案有效,请删除问号并添加一些解释。
      • 我刚刚测试过的命令是有效的!我问他是否尝试过!这对你来说够清楚了吗? =)
      • 我想我说得不够清楚:您确定这是对顶部特定问题的回答吗?如果是,“去掉问号,加上一些解释。”如果这个答案的主要目的是问“关于他是否尝试过”,这确实是一个请求了解更多信息,因此应该是评论。
      • @Baum mit Augen: Passt dir das besser auf diese Weise?
      • 贝塞尔如此。但总的来说,请英语。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      • 2010-11-16
      相关资源
      最近更新 更多