Debian:用 load-modules.conf 加载的模块 can-dev 不工作,直到我手动重新加载它
Debian: Module can-dev loaded with load-modules.conf does not work until I reload it manually
我在装有 Debian 64 位 运行 的 raspberry pi 上使用 can bus 时遇到一个小问题。
我的 /etc/modules-load.d/modules.conf 看起来像这样:
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
ixxat_usb2can
can-dev
can-raw
启动并连接到机器后,我立即加载了模块:
~/$ lsmod | grep can
can_raw 28672 0
can 28672 1 can_raw
ixxat_usb2can 28672 0
can_dev 28672 1 ixxat_usb2can
usbcore 266240 5 xhci_hcd,ixxat_usb2can,dwc2,brcmfmac,xhci_pci
can 总线似乎准备就绪,接口 can0 已启动:
~/$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether e4:5f:01:2e:2e:72 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.77/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 2a02:810b:43c0:539c:e65f:1ff:fe2e:2e72/64 scope global dynamic mngtmpaddr
valid_lft 86398sec preferred_lft 43198sec
inet6 fe80::e65f:1ff:fe2e:2e72/64 scope link
valid_lft forever preferred_lft forever
3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP group default qlen 10
link/can
4: can1: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10
link/can
5: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether e4:5f:01:2e:2e:73 brd ff:ff:ff:ff:ff:ff
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:6b:e0:11:18 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
如果我尝试访问通过接口 can0 上的 can 适配器连接的电机设备,它不起作用,我从电机控制库中得到一个错误代码,遗憾的是,没有记录,但它发生在尝试找到 can 设备。
我觉得很奇怪:我只需要重新加载 can-dev 模块就可以使它工作。之后lsmod没有任何变化,但我发现设备和电机按照我的意愿移动:
~/$ sudo /sbin/modprobe can-dev
~/$ lsmod | grep can
can_raw 28672 0
can 28672 1 can_raw
ixxat_usb2can 28672 0
can_dev 28672 1 ixxat_usb2can
usbcore 266240 5 xhci_hcd,ixxat_usb2can,dwc2,brcmfmac,xhci_pci
所以我的基本问题是:这里发生了什么?我错过了什么吗?提前致谢!
我刚刚弄明白了,所以万一有人遇到这样的问题:
我从来没有看过界面can1
,因为我不使用它。我的 usb to can dongle 有这个接口,但它是开放式的,那里没有连接任何东西,所以它超出了我的范围。
但是在启动后仔细查看 ip a
,然后在第二次手动加载 can-dev
模块后再次查看,就会发现它对接口 can1
.[=21 的状态有影响=]
手动加载can-dev之前:
3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP group default qlen 10
link/can
4: can1: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10
link/can
之后:
3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP group default qlen 10
link/can
4: can1: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP group default qlen 10
link/can
所以,can1
的状态似乎对我在 can0
上的设备正常工作至关重要。然后我所做的就是在我的 /etc/network/interfaces.d
中创建一个名为 can1
的文件,它看起来如下并且在启动时获取 can1:
auto can1
iface can1 inet manual
pre-up /sbin/ip link set can1 type can bitrate 1000000
up /sbin/ip link set up can1 && /sbin/modprobe can-dev
down /sbin/ip link set down can1
我不确定是否需要在该配置的“向上”部分加载模块,而且更重要的是,它有任何缺点。如果有人比我更了解这些东西(我相信你们中的大多数人 linux 都知道),请告诉我。
最后,can 总线从启动时就按预期工作,无需执行其他命令。
我在装有 Debian 64 位 运行 的 raspberry pi 上使用 can bus 时遇到一个小问题。
我的 /etc/modules-load.d/modules.conf 看起来像这样:
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
ixxat_usb2can
can-dev
can-raw
启动并连接到机器后,我立即加载了模块:
~/$ lsmod | grep can
can_raw 28672 0
can 28672 1 can_raw
ixxat_usb2can 28672 0
can_dev 28672 1 ixxat_usb2can
usbcore 266240 5 xhci_hcd,ixxat_usb2can,dwc2,brcmfmac,xhci_pci
can 总线似乎准备就绪,接口 can0 已启动:
~/$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether e4:5f:01:2e:2e:72 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.77/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 2a02:810b:43c0:539c:e65f:1ff:fe2e:2e72/64 scope global dynamic mngtmpaddr
valid_lft 86398sec preferred_lft 43198sec
inet6 fe80::e65f:1ff:fe2e:2e72/64 scope link
valid_lft forever preferred_lft forever
3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP group default qlen 10
link/can
4: can1: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10
link/can
5: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether e4:5f:01:2e:2e:73 brd ff:ff:ff:ff:ff:ff
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:6b:e0:11:18 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
如果我尝试访问通过接口 can0 上的 can 适配器连接的电机设备,它不起作用,我从电机控制库中得到一个错误代码,遗憾的是,没有记录,但它发生在尝试找到 can 设备。
我觉得很奇怪:我只需要重新加载 can-dev 模块就可以使它工作。之后lsmod没有任何变化,但我发现设备和电机按照我的意愿移动:
~/$ sudo /sbin/modprobe can-dev
~/$ lsmod | grep can
can_raw 28672 0
can 28672 1 can_raw
ixxat_usb2can 28672 0
can_dev 28672 1 ixxat_usb2can
usbcore 266240 5 xhci_hcd,ixxat_usb2can,dwc2,brcmfmac,xhci_pci
所以我的基本问题是:这里发生了什么?我错过了什么吗?提前致谢!
我刚刚弄明白了,所以万一有人遇到这样的问题:
我从来没有看过界面can1
,因为我不使用它。我的 usb to can dongle 有这个接口,但它是开放式的,那里没有连接任何东西,所以它超出了我的范围。
但是在启动后仔细查看 ip a
,然后在第二次手动加载 can-dev
模块后再次查看,就会发现它对接口 can1
.[=21 的状态有影响=]
手动加载can-dev之前:
3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP group default qlen 10
link/can
4: can1: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10
link/can
之后:
3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP group default qlen 10
link/can
4: can1: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP group default qlen 10
link/can
所以,can1
的状态似乎对我在 can0
上的设备正常工作至关重要。然后我所做的就是在我的 /etc/network/interfaces.d
中创建一个名为 can1
的文件,它看起来如下并且在启动时获取 can1:
auto can1
iface can1 inet manual
pre-up /sbin/ip link set can1 type can bitrate 1000000
up /sbin/ip link set up can1 && /sbin/modprobe can-dev
down /sbin/ip link set down can1
我不确定是否需要在该配置的“向上”部分加载模块,而且更重要的是,它有任何缺点。如果有人比我更了解这些东西(我相信你们中的大多数人 linux 都知道),请告诉我。
最后,can 总线从启动时就按预期工作,无需执行其他命令。