Linux FlexCAN调试

设备树

按照手册来即可,注意Alpha版上Flexcan2节点的引脚被ecspi3复用,节点中要屏蔽掉flexcan2:

1
2
3
4
5
6
7
/* Conflict with ECSPI3 */
&can2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_flexcan2>;
xceiver-supply = <&reg_can_3v3>;
status = "disabled";
};

原厂设备树节点中xceiver-supply = <&reg_can_3v3>;这个属性可能会导致deferred probing,让CANprobe不出来,屏蔽掉这个属性就可以,完成后的节点如下:

1
2
3
4
5
6
&can1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_flexcan1>;
//xceiver-supply = <&reg_can_3v3>;
status = "okay";
};

完成后ifconfig -a应该可以看得到CAN节点信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/ # ifconfig -a
can0 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文件,注释掉下面几行:

1
2
3
4
5
6
7
8
9
10
11
#ifndef HAVE_SETNS
static 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调试
http://akichen891.github.io/2025/04/17/LinuxFlexCAN调试/
作者
Aki
发布于
2025年4月17日
更新于
2025年4月17日
许可协议