You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用socket库开发J1939读取器时出现CAN_J1939属性缺失错误求助

Python Socket J1939读取器报错排查:AttributeError: 'socket' has no attribute 'CAN_J1939'

问题描述

用户尝试开发简易J1939读取器,代码如下:

import socket

with socket.socket(socket.PF_CAN, socket.SOCK_DGRAM, socket.CAN_J1939) as s:
    s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    addr = "can3", socket.J1939_NO_NAME, socket.J1939_NO_PGN, socket.J1939_NO_ADDR
    s.bind(addr)

    while True:
        data, addr = s.recvfrom(128)
        print(f'{addr[3]:02x} {addr[2]:05x}')

        for j in range(len(data)):
            if j % 8 == 0 and j != 0:
                print(f'\n{j:05x}    ')
            print(f'{j:02x}')
        print('\n')

运行后触发错误:AttributeError: module 'socket' has no attribute 'CAN_J1939'

环境信息:

  • Buildroot系统,已安装can-utils及J1939相关库
  • SoC运行Linux内核v3.10(CAN_J1939自v3.5起内核支持)

排查步骤

  • 验证Python Socket模块的J1939支持
    Python原生socket模块对CAN_J1939的封装并非所有版本默认包含。在目标系统的Python交互环境中执行以下命令,检查是否存在相关常量:

    import socket
    print(dir(socket))
    

    若输出中无CAN_J1939、J1939_NO_NAME等项,说明当前Python版本未编译J1939支持,需重新编译Python并开启对应选项。

  • 检查Buildroot配置

    1. 进入Buildroot配置界面(make menuconfig),确认Target packages -> Interpreter languages and scripting -> Python下是否开启了CAN/J1939相关编译选项,或是否安装了python-can第三方库。
    2. 验证内核J1939配置:在目标系统执行zcat /proc/config.gz | grep CAN_J1939,确保CONFIG_CAN_J1939=y、CONFIG_CAN_J1939_DSRC=y等选项已启用(即使内核版本支持,Buildroot编译时可能未开启)。
  • 测试系统级J1939功能
    使用can-utils工具验证底层功能是否正常,执行:

    j1939listen can3
    

    若该命令能正常接收数据,说明内核和硬件层J1939功能正常,问题出在Python Socket封装;若命令报错,需先排查内核驱动或硬件连接。

  • 改用第三方Python库
    若原生Socket模块无法支持,可使用python-can库实现功能。在Buildroot中安装该库后,示例代码如下:

    from can.interfaces.j1939 import J1939Bus
    
    bus = J1939Bus(interface='socketcan', channel='can3')
    while True:
        message = bus.recv()
        print(f"Source Address: {message.source_address:02x}, PGN: {message.pgn:05x}")
        print(f"Data: {message.data.hex()}")
    

内容的提问来源于stack exchange,提问作者WhiteRau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:53:12