417 字
2 分钟
Linux FlexCAN调试
设备树
按照手册来即可,注意Alpha版上Flexcan2节点的引脚被ecspi3复用,节点中要屏蔽掉flexcan2:
/* Conflict with ECSPI3 */&can2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_flexcan2>; xceiver-supply = <®_can_3v3>; status = "disabled";};原厂设备树节点中xceiver-supply = <®_can_3v3>;这个属性可能会导致deferred probing,让CANprobe不出来,屏蔽掉这个属性就可以,完成后的节点如下:
&can1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_flexcan1>; //xceiver-supply = <®_can_3v3>; status = "okay";};完成后ifconfig -a应该可以看得到CAN节点信息:
/ # ifconfig -acan0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 NOARP MTU:16 Metric:1 RX packets:0 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:0 (0.0 B) TX bytes:0 (0.0 B) Interrupt:206
eth0 Link encap:Ethernet HWaddr EA:36:EF:87:91:0F inet addr:192.168.1.103 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::e836:efff:fe87:910f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3294 errors:0 dropped:0 overruns:0 frame:0 TX packets:1444 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4472406 (4.2 MiB) TX bytes:259612 (253.5 KiB)
eth1 Link encap:Ethernet HWaddr C6:F2:80:26:D2:07 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
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:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
sit0 Link encap:IPv6-in-IPv4 NOARP MTU:1480 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)iproute库编译
经过试验,新版本的iproute确实会出现找不到诸如libelf头文件等奇怪的情况,暂未深究原因。
编译时可能报错:
错误: 对‘setns’的静态声明出现在非静态声明之后 方法是打开iproute根目录/include/namespace.h文件,注释掉下面几行:
#ifndef HAVE_SETNSstatic inline int setns(int fd, int nstype){#ifdef __NR_setns return syscall(__NR_setns, fd, nstype);#else errno = ENOSYS; return -1;#endif}#endif /* HAVE_SETNS */然后重新编译
Linux FlexCAN调试
https://arkmostima.pages.dev/posts/linuxflexcan调试/