This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TDA4VM: 设备号无法固定

Part Number: TDA4VM


您好

    我们在使用TDA4VM评估板时,发现CAN设备号是变动的,尝试使用别名的方式,将CAN设备号固定下来,dts文件如下:

/ {
	chosen {
		stdout-path = "serial2:115200n8";
		bootargs = "console=ttyS2,115200n8 earlycon=ns16550a,mmio32,0x02800000";
	};
	
    aliasis{
        can0 = &mcu_mcan0;
        can1 = &mcu_mcan1;
        can2 = &main_mcan0;
        can3 = &main_mcan2;
    };

但是还是出现设备号变动的情况,比如我们使用的是mcu_mcan0,发现真实设备号can3,并不是can0。查看/sys下aliasis下can0~3内容,传递参数也是对的

cat /sys/firmware/devicetree/base/aliasis/can0
/bus@100000/bus@28380000/can@40528000

cat /sys/firmware/devicetree/base/aliasis/can1
/bus@100000/bus@28380000/can@40568000

cat /sys/firmware/devicetree/base/aliasis/can2
/bus@100000/can@2701000

cat /sys/firmware/devicetree/base/aliasis/can3 
/bus@100000/can@2721000

想了解下,这个问题如何解决?或者是否有其他方式来固定can设备号

  • 您好,您的问题我们需要升级到英文论坛看下,链接如下。由于国外假期,给到答复的时间可能会有所延迟,敬请谅解:

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1244130/tda4vm-device-number-cannot-be-fixed

  • 好的,发现之前aliases拼写有问题,重新尝试时换成非自动枚举的设备名,如下所示:

            aliases{
                   mcu_can0 = &mcu_mcan0;
                   mcu_can1 = &mcu_mcan1;
                   main_can0 = &main_mcan0;
                   main_can2 = &main_mcan2;
            };

    然后发现,CAN设备还是使用的自动枚举的名字,不是别名。

    can0: flags=128<NOARP>  mtu 16  metric 1
            unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 10  (UNSPEC)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
            device interrupt 23  
    
    can1: flags=128<NOARP>  mtu 16  metric 1
            unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 10  (UNSPEC)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
            device interrupt 25  
    
    can2: flags=128<NOARP>  mtu 16  metric 1
            unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 10  (UNSPEC)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
            device interrupt 55  
    
    can3: flags=128<NOARP>  mtu 16  metric 1
            unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 10  (UNSPEC)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
            device interrupt 57  

    从现象来看,貌似是别名未生效。但是在系统信息中,别名传递应该没问题,确实有新增的别名信息,不知道为什么没有生效

    root@j7-evm:~# ls /sys/firmware/devicetree/base/aliases/
    ethernet0  main_can2  mcu_can1	mmc1  serial0  serial10  serial2  serial4  serial6  serial8
    main_can0  mcu_can0   mmc0	name  serial1  serial11  serial3  serial5  serial7  serial9
    

  • 您好,

    您检查下在/sys/class/net下的实例?是否是按照别名中所述的顺序? 

  • net下还是can0 can1 can2 can3这些自动自动识别出的实例。

    root@j7-evm:~# ls /sys/class/net/
    can0  can1  can2  can3	docker0  eth0  eth1  eth2  lo
    

    lrwxrwxrwx 1 root root 0 Mar  3 23:11 can0 -> ../../devices/platform/bus@100000/bus@100000:bus@28380000/40568000.can/net/can0
    lrwxrwxrwx 1 root root 0 Mar  3 23:11 can1 -> ../../devices/platform/bus@100000/bus@100000:bus@28380000/40528000.can/net/can1
    lrwxrwxrwx 1 root root 0 Mar  3 23:11 can2 -> ../../devices/platform/bus@100000/2721000.can/net/can2
    lrwxrwxrwx 1 root root 0 Mar  3 23:11 can3 -> ../../devices/platform/bus@100000/2701000.can/net/can3
    

  • 您好,我们想尝试使用udev的方式来固定can 设备号,在/etc/udev/rules.d下添加新的规则,想知道这种方式可行么?

    如果可行的话,我理解can属于net子系统,在当前net相关的/etc/udev/rules.d/autonet.rules下增加CAN规则。从当前的现象来看,can设备的DEVPATH基本是固定的,以DEVPATH为依据创建设备名,这个思路是否可行

  • 您好,

    所以即使使用aliasing,device order也没有改变对吗?

  • 是的,没有生效

  • 您好,

    有一个问题,在您贴出的代码中,"aliases" 拼写是不正确的。

  • 您好,之前发现了,拼写改正之后也没生效。尝试使用不同的别名,但是均未生效。我们在尝试使用udev机制来修改can名称,对于can相关的udev规则可查的资料太少,您这边有什么建议么