ptpd2提示failed to join the multicast group (strerror: No buffer space available)
📅 2026/7/11 10:49:39
👁️ 阅读次数
📝 编程学习
下载交叉编译ptpd-ptpd-2.3.1源码,downloads-yocto/ptpd-2.3.1.tar.gz
./configure CC=aarch64-zxic-linux-gcc,提示编译链编译程序失败如下,需要添加系统目录--sysroot=/home/wangyb/sda3/zm9300c-V2XR260010/toolchain/sysroots/aarch64-zxic-linux,
checking for gcc... aarch64-zxic-linux-gcc checking whether the C compiler works... no configure: error: in `/home/wangyb/sda3/zm9300-tools/ptpd-2.3.1': configure: error: C compiler cannot create executables See `config.log' for more details configure:3582: checking whether the C compiler works configure:3604: aarch64-zxic-linux-gcc -O2 -pipe -g -feliminate-unused-debug-types -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -fstack-protector-all -Wl,-z,relro,-z,now -fstack-protector-all -Wl,-z,relro,-z,now conftest.c >&5 /home/wangyb/sda3/zm9300c-V2XR260010/toolchain/sysroots/x86_64-zxic-linux/usr/libexec/aarch64-zxic-linux/gcc/aarch64-zxic-linux/9.3.0/real-ld: cannot find Scrt1.o: No such file or directory /home/wangyb/sda3/zm9300c-V2XR260010/toolchain/sysroots/x86_64-zxic-linux/usr/libexec/aarch64-zxic-linux/gcc/aarch64-zxic-linux/9.3.0/real-ld: cannot find crti.o: No such file or directory /home/wangyb/sda3/zm9300c-V2XR260010/toolchain/sysroots/x86_64-zxic-linux/usr/libexec/aarch64-zxic-linux/gcc/aarch64-zxic-linux/9.3.0/real-ld: cannot find crtbeginS.o: No such file or directory /home/wangyb/sda3/zm9300c-V2XR260010/toolchain/sysroots/x86_64-zxic-linux/usr/libexec/aarch64-zxic-linux/gcc/aarch64-zxic-linux/9.3.0/real-ld: cannot find -lgcc /home/wangyb/sda3/zm9300c-V2XR260010/toolchain/sysroots/x86_64-zxic-linux/usr/libexec/aarch64-zxic-linux/gcc/aarch64-zxic-linux/9.3.0/real-ld: cannot find -lgcc_s /home/wangyb/sda3/zm9300c-V2XR260010/toolchain/sysroots/x86_64-zxic-linux/usr/libexec/aarch64-zxic-linux/gcc/aarch64-zxic-linux/9.3.0/real-ld: cannot find -lc /home/wangyb/sda3/zm9300c-V2XR260010/toolchain/sysroots/x86_64-zxic-linux/usr/libexec/aarch64-zxic-linux/gcc/aarch64-zxic-linux/9.3.0/real-ld: cannot find -lgcc /home/wangyb/sda3/zm9300c-V2XR260010/toolchain/sysroots/x86_64-zxic-linux/usr/libexec/aarch64-zxic-linux/gcc/aarch64-zxic-linux/9.3.0/real-ld: cannot find -lgcc_s /home/wangyb/sda3/zm9300c-V2XR260010/toolchain/sysroots/x86_64-zxic-linux/usr/libexec/aarch64-zxic-linux/gcc/aarch64-zxic-linux/9.3.0/real-ld: cannot find crtendS.o: No such file or directory /home/wangyb/sda3/zm9300c-V2XR260010/toolchain/sysroots/x86_64-zxic-linux/usr/libexec/aarch64-zxic-linux/gcc/aarch64-zxic-linux/9.3.0/real-ld: cannot find crtn.o: No such file or directory collect2: error: ld returned 1 exit status configure:3608: $? = 1 configure:3646: result: no ./configure CC="aarch64-zxic-linux-gcc -mcpu=cortex-a53+crc -fstack-protector-all -pie -fPIE -Wformat -Wformat-security -Werror=format-security -fstack-protector-all -pie -fPIE -Wformat -Wformat-security -Werror=format-security --sysroot=/home/wangyb/sda3/zm9300c-V2XR260010/toolchain/sysroots/aarch64-zxic-linux"提示不能运行编译链如下,由于没有指定host平台默认是x86 gcc,需要指定为arm平台:--host=aarch64-zxic-linux,配置成功后,make编译完成后文件位置:src/ptpd2
checking whether we are cross compiling... configure: error: in `/home/wangyb/sda3/zm9300-tools/ptpd-2.3.1': configure: error: cannot run C compiled programs. If you meant to cross compile, use `--host'. See `config.log' for more details 最终配置命令 ./configure CC="aarch64-zxic-linux-gcc -mcpu=cortex-a53+crc -fstack-protector-all -pie -fPIE -Wformat -Wformat-security -Werror=format-security -fstack-protector-all -pie -fPIE -Wformat -Wformat-security -Werror=format-security --sysroot=/home/wangyb/sda3/zm9300c-V2XR260010/toolchain/sysroots/aarch64-zxic-linux" --host=aarch64-zxic-linux在IMX6板子上面运行ptpd2提示错误如下:
root@imx6qsabresd_genvict:~# ./ptpd2 -C -m -i eth0 2023-11-24 14:30:21.484399 ptpd2[6512].startup (info) (___) Configuration OK 2023-11-24 14:30:21.487152 ptpd2[6512].startup (info) (___) Successfully acquired lock on /var/run/ptpd2.lock 2023-11-24 14:30:21.487684 ptpd2[6512].startup (notice) (___) PTPDv2 started successfully on eth0 using "masterslave" preset (PID 6512) 2023-11-24 14:30:21.487775 ptpd2[6512].startup (info) (___) TimingService.PTP0: PTP service init 2023-11-24 14:30:21.491781 ptpd2[6512].eth0 (error) (init) failed to join the multicast group (strerror: No buffer space available) 2023-11-24 14:30:21.491880 ptpd2[6512].eth0 (error) (init) Failed to initialize network 2023-11-24 14:30:21.491943 ptpd2[6512].eth0 (error) (flt) PTPd init failed - will retry in 10 seconds查看源码:src/dep/net.c,函数:netInitMulticastIPv4
/* join multicast group (for receiving) on specified interface */ if (setsockopt(netPath->eventSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &imr, sizeof(struct ip_mreq)) < 0 || setsockopt(netPath->generalSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &imr, sizeof(struct ip_mreq)) < 0) { PERROR("failed to join the multicast group"); return FALSE; }添加错误值打印:
int ret1=0; int ret2=0; ret1=setsockopt(netPath->eventSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &imr, sizeof(struct ip_mreq)); if(ret1 < 0){ printf("errno = %d\n",errno); //105 printf("ret1=%d\n",ret1); return FALSE; } ret2=setsockopt(netPath->generalSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &imr, sizeof(struct ip_mreq)); if(ret2 < 0){ printf("ret2=%d\n",ret2); return FALSE; }setsockopt返回-1,错误值105,搜索系统头文件:/usr/include/asm-generic/errno.h
#define ENOBUFS 105 /* No buffer space available */通过网上搜到https://www.jianshu.com/p/6dfaeefac922,UDP组播的内核参数为0导致问题,修改10解决问题:
root@imx6qsabresd_genvict:~# sysctl net.ipv4.igmp_max_memberships net.ipv4.igmp_max_memberships = 0 root@imx6qsabresd_genvict:~# root@imx6qsabresd_genvict:~# sysctl -w net.ipv4.igmp_max_memberships=10 net.ipv4.igmp_max_memberships = 10查看其他平台是设置的参数20,所以没有这个问题。
编程学习
技术分享
实战经验