在TI sam3354芯片上,使用3.13及4.19版内核,编译CAN驱动,加载启动后,查看有CAN设备,但无法直接使用ifconfig操作CAN设备,以下简单分析下问题。
加载驱动后,查看网络设备:
可以看到有两个CAN设备,CAN0和CAN1,但ifconfig启动网络设备,提示:
如上,无法直接ifconfig CAN0 启动,对照newbing和chatgpt的说明,配置波特率:
ip link set can0 type can bitrate 500000
还是有问题,Newbing分析可能是驱动有问题或phy有问题。
找另外一台设备,启动后,查看ifconfig命令,可以查看到CAN0设备,没有CAN1设备,当关闭CAN0设备后,再启动CAN0,是可以的,但卸载驱动后再加载,也会失败。过程如下所示:
启动CAN1失败,关闭CAN0,再打开正常
将CAN驱动移除,之后再启动,如下:
一样也会失败,看调试信息,也该就是没有设置速率,但使用chatgpt提供的命令,会返回失败(应该和改版本的内核有关),最后,直接使用一个测试程序,启动CAN0和CAN1,设置波特率,就可以正常了,如下:
命令调试:
如上,如果不用测试程序,直接用命令配置也是可以的,命令如下:
[root@BULL /home/cdztcu]$ ifconfig can0 down
[root@BULL /home/cdztcu]$ ip link set can0 type can bitrate 125000
[root@BULL /home/cdztcu]$ ifconfig can0 up
[79046.935778] IPv6: ADDRCONF(NETDEV_CHANGE): can0: link becomes ready
[root@BULL /home/cdztcu]$ ifconfig
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP RUNNING NOARP MTU:16 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:8 (8.0 B) TX bytes:0 (0.0 B)
Interrupt:4
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:39776 errors:0 dropped:0 overruns:0 frame:0
TX packets:39776 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2943424 (2.8 MiB) TX bytes:2943424 (2.8 MiB)
总结:
linux系统中,CAN是一种网络设备,CAN接口需要先配置波特率才可以启动,配置波特率方式和内核有关,使用系统程序接口程序更简单。