20240502给NanoPi的NEO core开发板编译移远的4G模块的上网程序quectel-CM

20240502给NanoPi的NEO core开发板编译移远的4G模块的上网程序quectel-CM
2024/5/2 16:29


1、默认编译为AMD64/INTEL的x64架构的可执行文件:
rootroot@rootroot-ThinkBook-16-G5-IRH:~$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~$ unzip Quectel_QConnectManager_Linux_V1.6.5.1.zip 
Archive:  Quectel_QConnectManager_Linux_V1.6.5.1.zip


rootroot@rootroot-ThinkBook-16-G5-IRH:~$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~$ cd quectel-CM/
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ ll
total 896
drwxrwxr-x  4 rootroot rootroot   4096 1月  22 11:06 ./
drwxr-xr-x 40 rootroot rootroot   4096 5月   2 16:02 ../
-rw-rw-r--  1 rootroot rootroot  33837 1月  15 10:21 atc.c
-rw-rw-r--  1 rootroot rootroot  25544 1月  15 10:21 atchannel.c
-rw-rw-r--  1 rootroot rootroot   5124 1月  15 10:21 atchannel.h
-rw-rw-r--  1 rootroot rootroot   5612 1月  15 10:21 at_tok.c
-rw-rw-r--  1 rootroot rootroot   1072 1月  15 10:21 at_tok.h
-rw-rw-r--  1 rootroot rootroot   1237 1月  15 10:21 CMakeLists.txt
-rw-rw-r--  1 rootroot rootroot   1408 1月  15 10:21 configure.ac
-rw-rw-r--  1 rootroot rootroot   1293 1月  15 10:21 default.script
-rw-rw-r--  1 rootroot rootroot   1221 1月  15 10:21 default.script_ip
-rw-rw-r--  1 rootroot rootroot  22875 1月  15 10:21 device.c
-rw-rw-r--  1 rootroot rootroot  40995 1月  15 10:21 ethtool-copy.h
-rw-rw-r--  1 rootroot rootroot   8678 1月  15 10:21 GobiNetCM.c
drwxrwxr-x  3 rootroot rootroot   4096 1月  15 10:21 log/
-rw-rw-r--  1 rootroot rootroot  36466 1月  22 11:00 main.c
-rw-rw-r--  1 rootroot rootroot   1706 1月  22 11:06 Makefile
-rw-rw-r--  1 rootroot rootroot    639 1月  15 10:21 Makefile.am
-rw-rw-r--  1 rootroot rootroot  90446 1月  15 10:21 mbim-cm.c
-rw-rw-r--  1 rootroot rootroot    449 1月  15 10:21 NOTICE
drwxrwxr-x  2 rootroot rootroot   4096 1月  22 11:07 out/
-rw-rw-r--  1 rootroot rootroot  14221 1月  15 10:21 QCQCTL.h
-rw-rw-r--  1 rootroot rootroot   9495 1月  15 10:21 QCQMI.h
-rw-rw-r--  1 rootroot rootroot  22506 1月  15 10:21 QCQMUX.c
-rw-rw-r--  1 rootroot rootroot 140524 1月  15 10:21 QCQMUX.h
-rw-rw-r--  1 rootroot rootroot   1498 1月  15 10:21 qendian.h
-rw-rw-r--  1 rootroot rootroot    896 1月  15 10:21 qlist.h
-rw-rw-r--  1 rootroot rootroot  15291 1月  15 10:21 qmap_bridge_mode.c
-rw-rw-r--  1 rootroot rootroot 121844 1月  15 10:21 QMIThread.c
-rw-rw-r--  1 rootroot rootroot  13521 1月  15 10:21 QMIThread.h
-rw-rw-r--  1 rootroot rootroot  16988 1月  15 10:21 QmiWwanCM.c
-rw-rw-r--  1 rootroot rootroot  19416 1月  15 10:21 qrtr.c
-rw-rw-r--  1 rootroot rootroot   1256 1月  15 10:21 qrtr.h
-rw-rw-r--  1 rootroot rootroot  15971 1月  15 10:21 quectel-atc-proxy.c
-rw-rw-r--  1 rootroot rootroot  13989 1月  15 10:21 quectel-mbim-proxy.c
-rw-rw-r--  1 rootroot rootroot  24012 1月  15 10:21 quectel-qmi-proxy.c
-rw-rw-r--  1 rootroot rootroot  30664 1月  15 10:21 quectel-qrtr-proxy.c
-rw-rw-r--  1 rootroot rootroot   9350 1月  22 11:06 ReleaseNote.txt
-rw-rw-r--  1 rootroot rootroot   9974 1月  15 10:21 rmnetctl.c
-rw-rw-r--  1 rootroot rootroot  23841 1月  15 10:21 udhcpc.c
-rw-rw-r--  1 rootroot rootroot   5472 1月  15 10:21 udhcpc_netlink.c
-rw-rw-r--  1 rootroot rootroot   4065 1月  15 10:21 udhcpc_script.c
-rw-rw-r--  1 rootroot rootroot  10201 1月  15 10:21 util.c
-rw-rw-r--  1 rootroot rootroot   1285 1月  15 10:21 util.h
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ cd out/
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM/out$ ll
total 8
drwxrwxr-x 2 rootroot rootroot 4096 1月  22 11:07 ./
drwxrwxr-x 4 rootroot rootroot 4096 1月  22 11:06 ../
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM/out$ cd ..
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ ll
total 896
drwxrwxr-x  4 rootroot rootroot   4096 1月  22 11:06 ./
drwxr-xr-x 40 rootroot rootroot   4096 5月   2 16:02 ../
-rw-rw-r--  1 rootroot rootroot  33837 1月  15 10:21 atc.c
-rw-rw-r--  1 rootroot rootroot  25544 1月  15 10:21 atchannel.c
-rw-rw-r--  1 rootroot rootroot   5124 1月  15 10:21 atchannel.h
-rw-rw-r--  1 rootroot rootroot   5612 1月  15 10:21 at_tok.c
-rw-rw-r--  1 rootroot rootroot   1072 1月  15 10:21 at_tok.h
-rw-rw-r--  1 rootroot rootroot   1237 1月  15 10:21 CMakeLists.txt
-rw-rw-r--  1 rootroot rootroot   1408 1月  15 10:21 configure.ac
-rw-rw-r--  1 rootroot rootroot   1293 1月  15 10:21 default.script
-rw-rw-r--  1 rootroot rootroot   1221 1月  15 10:21 default.script_ip
-rw-rw-r--  1 rootroot rootroot  22875 1月  15 10:21 device.c
-rw-rw-r--  1 rootroot rootroot  40995 1月  15 10:21 ethtool-copy.h
-rw-rw-r--  1 rootroot rootroot   8678 1月  15 10:21 GobiNetCM.c
drwxrwxr-x  3 rootroot rootroot   4096 1月  15 10:21 log/
-rw-rw-r--  1 rootroot rootroot  36466 1月  22 11:00 main.c
-rw-rw-r--  1 rootroot rootroot   1706 1月  22 11:06 Makefile
-rw-rw-r--  1 rootroot rootroot    639 1月  15 10:21 Makefile.am
-rw-rw-r--  1 rootroot rootroot  90446 1月  15 10:21 mbim-cm.c
-rw-rw-r--  1 rootroot rootroot    449 1月  15 10:21 NOTICE
drwxrwxr-x  2 rootroot rootroot   4096 1月  22 11:07 out/
-rw-rw-r--  1 rootroot rootroot  14221 1月  15 10:21 QCQCTL.h
-rw-rw-r--  1 rootroot rootroot   9495 1月  15 10:21 QCQMI.h
-rw-rw-r--  1 rootroot rootroot  22506 1月  15 10:21 QCQMUX.c
-rw-rw-r--  1 rootroot rootroot 140524 1月  15 10:21 QCQMUX.h
-rw-rw-r--  1 rootroot rootroot   1498 1月  15 10:21 qendian.h
-rw-rw-r--  1 rootroot rootroot    896 1月  15 10:21 qlist.h
-rw-rw-r--  1 rootroot rootroot  15291 1月  15 10:21 qmap_bridge_mode.c
-rw-rw-r--  1 rootroot rootroot 121844 1月  15 10:21 QMIThread.c
-rw-rw-r--  1 rootroot rootroot  13521 1月  15 10:21 QMIThread.h
-rw-rw-r--  1 rootroot rootroot  16988 1月  15 10:21 QmiWwanCM.c
-rw-rw-r--  1 rootroot rootroot  19416 1月  15 10:21 qrtr.c
-rw-rw-r--  1 rootroot rootroot   1256 1月  15 10:21 qrtr.h
-rw-rw-r--  1 rootroot rootroot  15971 1月  15 10:21 quectel-atc-proxy.c
-rw-rw-r--  1 rootroot rootroot  13989 1月  15 10:21 quectel-mbim-proxy.c
-rw-rw-r--  1 rootroot rootroot  24012 1月  15 10:21 quectel-qmi-proxy.c
-rw-rw-r--  1 rootroot rootroot  30664 1月  15 10:21 quectel-qrtr-proxy.c
-rw-rw-r--  1 rootroot rootroot   9350 1月  22 11:06 ReleaseNote.txt
-rw-rw-r--  1 rootroot rootroot   9974 1月  15 10:21 rmnetctl.c
-rw-rw-r--  1 rootroot rootroot  23841 1月  15 10:21 udhcpc.c
-rw-rw-r--  1 rootroot rootroot   5472 1月  15 10:21 udhcpc_netlink.c
-rw-rw-r--  1 rootroot rootroot   4065 1月  15 10:21 udhcpc_script.c
-rw-rw-r--  1 rootroot rootroot  10201 1月  15 10:21 util.c
-rw-rw-r--  1 rootroot rootroot   1285 1月  15 10:21 util.h
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ make -j8
cd out/; rm -rf *.o libmnl/*.o quectel-CM quectel-qmi-proxy quectel-mbim-proxy quectel-atc-proxy
gcc -Wall -Wextra -Werror -O1  quectel-qmi-proxy.c -o out/quectel-qmi-proxy -lpthread -ldl -lrt 
gcc -Wall -Wextra -Werror -O1  quectel-mbim-proxy.c -o out/quectel-mbim-proxy -lpthread -ldl -lrt 
gcc -Wall -Wextra -Werror -O1  quectel-atc-proxy.c atchannel.c at_tok.c util.c -o out/quectel-atc-proxy -lpthread -ldl -lrt 
gcc -Wall -Wextra -Werror -O1  QmiWwanCM.c GobiNetCM.c main.c QCQMUX.c QMIThread.c util.c qmap_bridge_mode.c mbim-cm.c device.c atc.c atchannel.c at_tok.c udhcpc.c -o out/quectel-CM -lpthread -ldl -lrt

rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ ll
total 896
drwxrwxr-x  4 rootroot rootroot   4096 1月  22 11:06 ./
drwxr-xr-x 40 rootroot rootroot   4096 5月   2 16:02 ../
-rw-rw-r--  1 rootroot rootroot  33837 1月  15 10:21 atc.c
-rw-rw-r--  1 rootroot rootroot  25544 1月  15 10:21 atchannel.c
-rw-rw-r--  1 rootroot rootroot   5124 1月  15 10:21 atchannel.h
-rw-rw-r--  1 rootroot rootroot   5612 1月  15 10:21 at_tok.c
-rw-rw-r--  1 rootroot rootroot   1072 1月  15 10:21 at_tok.h
-rw-rw-r--  1 rootroot rootroot   1237 1月  15 10:21 CMakeLists.txt
-rw-rw-r--  1 rootroot rootroot   1408 1月  15 10:21 configure.ac
-rw-rw-r--  1 rootroot rootroot   1293 1月  15 10:21 default.script
-rw-rw-r--  1 rootroot rootroot   1221 1月  15 10:21 default.script_ip
-rw-rw-r--  1 rootroot rootroot  22875 1月  15 10:21 device.c
-rw-rw-r--  1 rootroot rootroot  40995 1月  15 10:21 ethtool-copy.h
-rw-rw-r--  1 rootroot rootroot   8678 1月  15 10:21 GobiNetCM.c
drwxrwxr-x  3 rootroot rootroot   4096 1月  15 10:21 log/
-rw-rw-r--  1 rootroot rootroot  36466 1月  22 11:00 main.c
-rw-rw-r--  1 rootroot rootroot   1706 1月  22 11:06 Makefile
-rw-rw-r--  1 rootroot rootroot    639 1月  15 10:21 Makefile.am
-rw-rw-r--  1 rootroot rootroot  90446 1月  15 10:21 mbim-cm.c
-rw-rw-r--  1 rootroot rootroot    449 1月  15 10:21 NOTICE
drwxrwxr-x  2 rootroot rootroot   4096 5月   2 16:02 out/
-rw-rw-r--  1 rootroot rootroot  14221 1月  15 10:21 QCQCTL.h
-rw-rw-r--  1 rootroot rootroot   9495 1月  15 10:21 QCQMI.h
-rw-rw-r--  1 rootroot rootroot  22506 1月  15 10:21 QCQMUX.c
-rw-rw-r--  1 rootroot rootroot 140524 1月  15 10:21 QCQMUX.h
-rw-rw-r--  1 rootroot rootroot   1498 1月  15 10:21 qendian.h
-rw-rw-r--  1 rootroot rootroot    896 1月  15 10:21 qlist.h
-rw-rw-r--  1 rootroot rootroot  15291 1月  15 10:21 qmap_bridge_mode.c
-rw-rw-r--  1 rootroot rootroot 121844 1月  15 10:21 QMIThread.c
-rw-rw-r--  1 rootroot rootroot  13521 1月  15 10:21 QMIThread.h
-rw-rw-r--  1 rootroot rootroot  16988 1月  15 10:21 QmiWwanCM.c
-rw-rw-r--  1 rootroot rootroot  19416 1月  15 10:21 qrtr.c
-rw-rw-r--  1 rootroot rootroot   1256 1月  15 10:21 qrtr.h
-rw-rw-r--  1 rootroot rootroot  15971 1月  15 10:21 quectel-atc-proxy.c
-rw-rw-r--  1 rootroot rootroot  13989 1月  15 10:21 quectel-mbim-proxy.c
-rw-rw-r--  1 rootroot rootroot  24012 1月  15 10:21 quectel-qmi-proxy.c
-rw-rw-r--  1 rootroot rootroot  30664 1月  15 10:21 quectel-qrtr-proxy.c
-rw-rw-r--  1 rootroot rootroot   9350 1月  22 11:06 ReleaseNote.txt
-rw-rw-r--  1 rootroot rootroot   9974 1月  15 10:21 rmnetctl.c
-rw-rw-r--  1 rootroot rootroot  23841 1月  15 10:21 udhcpc.c
-rw-rw-r--  1 rootroot rootroot   5472 1月  15 10:21 udhcpc_netlink.c
-rw-rw-r--  1 rootroot rootroot   4065 1月  15 10:21 udhcpc_script.c
-rw-rw-r--  1 rootroot rootroot  10201 1月  15 10:21 util.c
-rw-rw-r--  1 rootroot rootroot   1285 1月  15 10:21 util.h
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ cd out/
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM/out$ ll
total 328
drwxrwxr-x 2 rootroot rootroot   4096 5月   2 16:02 ./
drwxrwxr-x 4 rootroot rootroot   4096 1月  22 11:06 ../
-rwxrwxr-x 1 rootroot rootroot  48320 5月   2 16:02 quectel-atc-proxy*
-rwxrwxr-x 1 rootroot rootroot 228816 5月   2 16:02 quectel-CM*
-rwxrwxr-x 1 rootroot rootroot  22368 5月   2 16:02 quectel-mbim-proxy*
-rwxrwxr-x 1 rootroot rootroot  23336 5月   2 16:02 quectel-qmi-proxy*
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM/out$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM/out$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM/out$ file quectel-CM 
quectel-CM: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=89b0fca80e86f63fb1ee4f9d807584499c0a1aca, for GNU/Linux 3.2.0, not stripped
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM/out$ 

rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM/out$ ll
total 328
drwxrwxr-x 2 rootroot rootroot   4096 5月   2 16:02 ./
drwxrwxr-x 4 rootroot rootroot   4096 1月  22 11:06 ../
-rwxrwxr-x 1 rootroot rootroot  48320 5月   2 16:02 quectel-atc-proxy*
-rwxrwxr-x 1 rootroot rootroot 228816 5月   2 16:02 quectel-CM*
-rwxrwxr-x 1 rootroot rootroot  22368 5月   2 16:02 quectel-mbim-proxy*
-rwxrwxr-x 1 rootroot rootroot  23336 5月   2 16:02 quectel-qmi-proxy*
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM/out$ cd ..
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ mv out/ x64_out/
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 


2、修改Makefile为ARM32架构:
Z:\quectel-CM\Makefile

ifneq ($(CROSS_COMPILE),)
CROSS-COMPILE:=$(CROSS_COMPILE)
endif
#CROSS-COMPILE:=/workspace/buildroot/buildroot-qemu_mips_malta_defconfig/output/host/usr/bin/mips-buildroot-linux-uclibc-
#CROSS-COMPILE:=/workspace/buildroot/buildroot-qemu_arm_vexpress_defconfig/output/host/usr/bin/arm-buildroot-linux-uclibcgnueabi-
#CROSS-COMPILE:=/workspace/buildroot-git/qemu_mips64_malta/output/host/usr/bin/mips-gnu-linux-
ifeq ($(CC),cc)
CC:=$(CROSS-COMPILE)gcc
endif

LD:=$(CROSS-COMPILE)ld

修改为:

ifneq ($(CROSS_COMPILE),)
CROSS-COMPILE:=$(CROSS_COMPILE)
endif
#CROSS-COMPILE:=/workspace/buildroot/buildroot-qemu_mips_malta_defconfig/output/host/usr/bin/mips-buildroot-linux-uclibc-
#CROSS-COMPILE:=/workspace/buildroot/buildroot-qemu_arm_vexpress_defconfig/output/host/usr/bin/arm-buildroot-linux-uclibcgnueabi-
#CROSS-COMPILE:=/workspace/buildroot-git/qemu_mips64_malta/output/host/usr/bin/mips-gnu-linux-
CROSS-COMPILE:=/opt/FriendlyARM/toolchain/4.9.3/bin/arm-none-linux-gnueabihf-
##ifeq ($(CC),cc)
##CC:=$(CROSS-COMPILE)gcc
##endif
CC:=/opt/FriendlyARM/toolchain/4.9.3/bin/arm-none-linux-gnueabihf-gcc

LD:=$(CROSS-COMPILE)ld


ifneq ($(CROSS_COMPILE),)
CROSS-COMPILE:=$(CROSS_COMPILE)
endif
#CROSS-COMPILE:=/workspace/buildroot/buildroot-qemu_mips_malta_defconfig/output/host/usr/bin/mips-buildroot-linux-uclibc-
#CROSS-COMPILE:=/workspace/buildroot/buildroot-qemu_arm_vexpress_defconfig/output/host/usr/bin/arm-buildroot-linux-uclibcgnueabi-
#CROSS-COMPILE:=/workspace/buildroot-git/qemu_mips64_malta/output/host/usr/bin/mips-gnu-linux-

CROSS-COMPILE:=/opt/FriendlyARM/toolchain/4.9.3/bin/arm-none-linux-gnueabihf-
##ifeq ($(CC),cc)
##CC:=$(CROSS-COMPILE)gcc
##endif
CC:=/opt/FriendlyARM/toolchain/4.9.3/bin/arm-none-linux-gnueabihf-gcc

LD:=$(CROSS-COMPILE)ld

QL_CM_SRC=QmiWwanCM.c GobiNetCM.c main.c QCQMUX.c QMIThread.c util.c qmap_bridge_mode.c mbim-cm.c device.c
QL_CM_SRC+=atc.c atchannel.c at_tok.c
#QL_CM_SRC+=qrtr.c rmnetctl.c
ifeq (1,1)
QL_CM_DHCP=udhcpc.c
else
LIBMNL=libmnl/ifutils.c libmnl/attr.c libmnl/callback.c libmnl/nlmsg.c libmnl/socket.c
DHCP=libmnl/dhcp/dhcpclient.c libmnl/dhcp/dhcpmsg.c libmnl/dhcp/packet.c
QL_CM_DHCP=udhcpc_netlink.c
QL_CM_DHCP+=${LIBMNL}
endif

CFLAGS += -Wall -Wextra -Werror -O1 #-s
LDFLAGS += -lpthread -ldl -lrt

release: clean qmi-proxy mbim-proxy atc-proxy #qrtr-proxy
    $(CC) ${CFLAGS} ${QL_CM_SRC} ${QL_CM_DHCP} -o out/quectel-CM ${LDFLAGS}

debug: clean
    $(CC) ${CFLAGS} -g -DCM_DEBUG ${QL_CM_SRC} ${QL_CM_DHCP} -o out/quectel-CM -lpthread -ldl -lrt

qmi-proxy:
    $(CC) ${CFLAGS} quectel-qmi-proxy.c -o out/quectel-qmi-proxy ${LDFLAGS} 

mbim-proxy:
    $(CC) ${CFLAGS} quectel-mbim-proxy.c -o out/quectel-mbim-proxy ${LDFLAGS} 

qrtr-proxy:
    $(CC) ${CFLAGS} quectel-qrtr-proxy.c -o out/quectel-qrtr-proxy ${LDFLAGS} 

atc-proxy:
    $(CC) ${CFLAGS} quectel-atc-proxy.c atchannel.c at_tok.c util.c -o out/quectel-atc-proxy ${LDFLAGS} 

clean:
    cd out/; rm -rf *.o libmnl/*.o quectel-CM quectel-qmi-proxy quectel-mbim-proxy quectel-atc-proxy


rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ make -j8
cd out/; rm -rf *.o libmnl/*.o quectel-CM quectel-qmi-proxy quectel-mbim-proxy quectel-atc-proxy
/opt/FriendlyARM/toolchain/4.9.3/bin/arm-none-linux-gnueabihf-gcc -Wall -Wextra -Werror -O1  quectel-qmi-proxy.c -o out/quectel-qmi-proxy -lpthread -ldl -lrt 
/opt/FriendlyARM/toolchain/4.9.3/bin/arm-none-linux-gnueabihf-gcc -Wall -Wextra -Werror -O1  quectel-mbim-proxy.c -o out/quectel-mbim-proxy -lpthread -ldl -lrt 
/opt/FriendlyARM/toolchain/4.9.3/bin/arm-none-linux-gnueabihf-gcc -Wall -Wextra -Werror -O1  quectel-atc-proxy.c atchannel.c at_tok.c util.c -o out/quectel-atc-proxy -lpthread -ldl -lrt 
/opt/FriendlyARM/toolchain/4.9.3/bin/arm-none-linux-gnueabihf-gcc -Wall -Wextra -Werror -O1  QmiWwanCM.c GobiNetCM.c main.c QCQMUX.c QMIThread.c util.c qmap_bridge_mode.c mbim-cm.c device.c atc.c atchannel.c at_tok.c udhcpc.c -o out/quectel-CM -lpthread -ldl -lrt

QMIThread.c: In function ‘requestGetProfile’:
QMIThread.c:2100:9: error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode
         for(int i=0; i<profile_num; i++)
         ^
QMIThread.c:2100:9: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code
QMIThread.c:2111:5: error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode
     for(int i=0; i<profile_num; i++)
     ^
make: *** [Makefile:32: release] Error 1

rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 


Z:\quectel-CM\QMIThread.c
static int requestGetProfile(PROFILE_T *profile) {
    PQCQMIMSG pRequest;
    PQCQMIMSG pResponse;
    PQMUX_MSG pMUXMsg;
    int err;
    PQMIWDS_APNNAME pApnName;
    PQMIWDS_USERNAME pUserName;
    PQMIWDS_PASSWD pPassWd;
    PQMIWDS_AUTH_PREFERENCE pAuthPref;
    PQMIWDS_IPTYPE pIpType;
    PQMIWDS_PDPCONTEXT pPdpContext;
    PQMIWDS_PROFILELIST pProfileList;
    
    const char *ipStr[] = {"IPV4", "NULL", "IPV6", "IPV4V6"};

    profile->old_apn[0] = profile->old_user[0] = profile->old_password[0] = '\0';
    profile->old_auth = 0;
    profile->old_iptype = 0;
    if (profile->enable_ipv4 && profile->enable_ipv6)
        profile->iptype = 3;
    else if (profile->enable_ipv6)
        profile->iptype = 2;
    else
        profile->iptype = 0;

    if (!profile->pdp)
        return 0;

_re_check:
    pRequest = ComposeQMUXMsg(QMUX_TYPE_WDS, QMIWDS_GET_PROFILE_LIST_REQ, WdsGetProfileListReqSend, profile);
    err = QmiThreadSendQMI(pRequest, &pResponse);s_pResponse = malloc(le16_to_cpu(pResponse->QMIHdr.Length) + 1);
    qmi_rsp_check_and_return();
    
    pProfileList = (PQMIWDS_PROFILELIST)GetTLV(&pResponse->MUXMsg.QMUXMsgHdr, 0x01);
    uint8 profile_indexs[42] = {0};
    uint8 profile_num = pProfileList->ProfileList[0];
    if(profile_num >= 1)
    {
        uint8 j = 0;
        uint8 k = 2;
        for(int i=0; i<profile_num; i++)
        {
            profile_indexs[j++] = pProfileList->ProfileList[k];
            if(pProfileList->ProfileList[++k] == 0)
                k+=2;
            else
                k+=2+pProfileList->ProfileList[k];
        }
    }
    free(pResponse);
    
    for(int i=0; i<profile_num; i++)
    {
        profile->profile_index = profile_indexs[i];
        
        pRequest = ComposeQMUXMsg(QMUX_TYPE_WDS, QMIWDS_GET_PROFILE_SETTINGS_REQ, WdsGetProfileSettingsReqSend, profile);
        err = QmiThreadSendQMI(pRequest, &pResponse);
        qmi_rsp_check_and_return();
        
        pPdpContext = (PQMIWDS_PDPCONTEXT)GetTLV(&pResponse->MUXMsg.QMUXMsgHdr, 0x25);
        if(pPdpContext->pdp_context == profile->pdp)
            break;
        else
            free(pResponse);

        if(i == profile_num-1)
        {
            pRequest = ComposeQMUXMsg(QMUX_TYPE_WDS, QMIWDS_CREATE_PROFILE_REQ, WdsCreateProfileSettingsReqSend, profile);
            err = QmiThreadSendQMI(pRequest, &pResponse);
            qmi_rsp_check_and_return();
            free(pResponse);
            goto _re_check;
        }
    }
    

    pApnName = (PQMIWDS_APNNAME)GetTLV(&pResponse->MUXMsg.QMUXMsgHdr, 0x14);
    pUserName = (PQMIWDS_USERNAME)GetTLV(&pResponse->MUXMsg.QMUXMsgHdr, 0x1B);
    pPassWd = (PQMIWDS_PASSWD)GetTLV(&pResponse->MUXMsg.QMUXMsgHdr, 0x1C);
    pAuthPref = (PQMIWDS_AUTH_PREFERENCE)GetTLV(&pResponse->MUXMsg.QMUXMsgHdr, 0x1D);
    pIpType = (PQMIWDS_IPTYPE)GetTLV(&pResponse->MUXMsg.QMUXMsgHdr, 0x11);

    if (pApnName/* && le16_to_cpu(pApnName->TLVLength)*/)
        uchar2char(profile->old_apn, sizeof(profile->old_apn), &pApnName->ApnName, le16_to_cpu(pApnName->TLVLength));
    if (pUserName/*  && pUserName->UserName*/)
        uchar2char(profile->old_user, sizeof(profile->old_user), &pUserName->UserName, le16_to_cpu(pUserName->TLVLength));
    if (pPassWd/*  && le16_to_cpu(pPassWd->TLVLength)*/)
        uchar2char(profile->old_password, sizeof(profile->old_password), &pPassWd->Passwd, le16_to_cpu(pPassWd->TLVLength));
    if (pAuthPref/*  && le16_to_cpu(pAuthPref->TLVLength)*/) {
        profile->old_auth = pAuthPref->AuthPreference;
    }
    if (pIpType) {
        profile->old_iptype = pIpType->IPType;
    }

    dbg_time("%s[pdp:%d index:%d] %s/%s/%s/%d/%s", __func__, profile->pdp, profile->profile_index, profile->old_apn, profile->old_user, profile->old_password, profile->old_auth, ipStr[profile->old_iptype]);

    free(pResponse);
    return 0;
}
#endif


修改为:
static int requestGetProfile(PROFILE_T *profile) {
    PQCQMIMSG pRequest;
    PQCQMIMSG pResponse;
    PQMUX_MSG pMUXMsg;
    int err;
    PQMIWDS_APNNAME pApnName;
    PQMIWDS_USERNAME pUserName;
    PQMIWDS_PASSWD pPassWd;
    PQMIWDS_AUTH_PREFERENCE pAuthPref;
    PQMIWDS_IPTYPE pIpType;
    PQMIWDS_PDPCONTEXT pPdpContext;
    PQMIWDS_PROFILELIST pProfileList;
    
    const char *ipStr[] = {"IPV4", "NULL", "IPV6", "IPV4V6"};

    profile->old_apn[0] = profile->old_user[0] = profile->old_password[0] = '\0';
    profile->old_auth = 0;
    profile->old_iptype = 0;
    if (profile->enable_ipv4 && profile->enable_ipv6)
        profile->iptype = 3;
    else if (profile->enable_ipv6)
        profile->iptype = 2;
    else
        profile->iptype = 0;

    if (!profile->pdp)
        return 0;

_re_check:
    pRequest = ComposeQMUXMsg(QMUX_TYPE_WDS, QMIWDS_GET_PROFILE_LIST_REQ, WdsGetProfileListReqSend, profile);
    err = QmiThreadSendQMI(pRequest, &pResponse);s_pResponse = malloc(le16_to_cpu(pResponse->QMIHdr.Length) + 1);
    qmi_rsp_check_and_return();
    
    pProfileList = (PQMIWDS_PROFILELIST)GetTLV(&pResponse->MUXMsg.QMUXMsgHdr, 0x01);
    uint8 profile_indexs[42] = {0};
    uint8 profile_num = pProfileList->ProfileList[0];
    if(profile_num >= 1)
    {
        uint8 j = 0;
        uint8 k = 2;
        //for(int i=0; i<profile_num; i++)
        int i;
        for(i=0; i<profile_num; i++)

        {
            profile_indexs[j++] = pProfileList->ProfileList[k];
            if(pProfileList->ProfileList[++k] == 0)
                k+=2;
            else
                k+=2+pProfileList->ProfileList[k];
        }
    }
    free(pResponse);
    
    //for(int i=0; i<profile_num; i++)
    int i;
    for(i=0; i<profile_num; i++)

    {
        profile->profile_index = profile_indexs[i];
        
        pRequest = ComposeQMUXMsg(QMUX_TYPE_WDS, QMIWDS_GET_PROFILE_SETTINGS_REQ, WdsGetProfileSettingsReqSend, profile);
        err = QmiThreadSendQMI(pRequest, &pResponse);
        qmi_rsp_check_and_return();
        
        pPdpContext = (PQMIWDS_PDPCONTEXT)GetTLV(&pResponse->MUXMsg.QMUXMsgHdr, 0x25);
        if(pPdpContext->pdp_context == profile->pdp)
            break;
        else
            free(pResponse);

        if(i == profile_num-1)
        {
            pRequest = ComposeQMUXMsg(QMUX_TYPE_WDS, QMIWDS_CREATE_PROFILE_REQ, WdsCreateProfileSettingsReqSend, profile);
            err = QmiThreadSendQMI(pRequest, &pResponse);
            qmi_rsp_check_and_return();
            free(pResponse);
            goto _re_check;
        }
    }
    

    pApnName = (PQMIWDS_APNNAME)GetTLV(&pResponse->MUXMsg.QMUXMsgHdr, 0x14);
    pUserName = (PQMIWDS_USERNAME)GetTLV(&pResponse->MUXMsg.QMUXMsgHdr, 0x1B);
    pPassWd = (PQMIWDS_PASSWD)GetTLV(&pResponse->MUXMsg.QMUXMsgHdr, 0x1C);
    pAuthPref = (PQMIWDS_AUTH_PREFERENCE)GetTLV(&pResponse->MUXMsg.QMUXMsgHdr, 0x1D);
    pIpType = (PQMIWDS_IPTYPE)GetTLV(&pResponse->MUXMsg.QMUXMsgHdr, 0x11);

    if (pApnName/* && le16_to_cpu(pApnName->TLVLength)*/)
        uchar2char(profile->old_apn, sizeof(profile->old_apn), &pApnName->ApnName, le16_to_cpu(pApnName->TLVLength));
    if (pUserName/*  && pUserName->UserName*/)
        uchar2char(profile->old_user, sizeof(profile->old_user), &pUserName->UserName, le16_to_cpu(pUserName->TLVLength));
    if (pPassWd/*  && le16_to_cpu(pPassWd->TLVLength)*/)
        uchar2char(profile->old_password, sizeof(profile->old_password), &pPassWd->Passwd, le16_to_cpu(pPassWd->TLVLength));
    if (pAuthPref/*  && le16_to_cpu(pAuthPref->TLVLength)*/) {
        profile->old_auth = pAuthPref->AuthPreference;
    }
    if (pIpType) {
        profile->old_iptype = pIpType->IPType;
    }

    dbg_time("%s[pdp:%d index:%d] %s/%s/%s/%d/%s", __func__, profile->pdp, profile->profile_index, profile->old_apn, profile->old_user, profile->old_password, profile->old_auth, ipStr[profile->old_iptype]);

    free(pResponse);
    return 0;
}
#endif


rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ make -j8
cd out/; rm -rf *.o libmnl/*.o quectel-CM quectel-qmi-proxy quectel-mbim-proxy quectel-atc-proxy
/opt/FriendlyARM/toolchain/4.9.3/bin/arm-none-linux-gnueabihf-gcc -Wall -Wextra -Werror -O1  quectel-qmi-proxy.c -o out/quectel-qmi-proxy -lpthread -ldl -lrt 
/opt/FriendlyARM/toolchain/4.9.3/bin/arm-none-linux-gnueabihf-gcc -Wall -Wextra -Werror -O1  quectel-mbim-proxy.c -o out/quectel-mbim-proxy -lpthread -ldl -lrt 
/opt/FriendlyARM/toolchain/4.9.3/bin/arm-none-linux-gnueabihf-gcc -Wall -Wextra -Werror -O1  quectel-atc-proxy.c atchannel.c at_tok.c util.c -o out/quectel-atc-proxy -lpthread -ldl -lrt 
/opt/FriendlyARM/toolchain/4.9.3/bin/arm-none-linux-gnueabihf-gcc -Wall -Wextra -Werror -O1  QmiWwanCM.c GobiNetCM.c main.c QCQMUX.c QMIThread.c util.c qmap_bridge_mode.c mbim-cm.c device.c atc.c atchannel.c at_tok.c udhcpc.c -o out/quectel-CM -lpthread -ldl -lrt

rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ 


rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM$ cd out/
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM/out$ ll
total 272
drwxrwxr-x 2 rootroot rootroot   4096 5月   2 16:29 ./
drwxrwxr-x 5 rootroot rootroot   4096 5月   2 16:29 ../
-rwxrwxr-x 1 rootroot rootroot  45844 5月   2 16:29 quectel-atc-proxy*
-rwxrwxr-x 1 rootroot rootroot 183564 5月   2 16:29 quectel-CM*
-rwxrwxr-x 1 rootroot rootroot  16336 5月   2 16:29 quectel-mbim-proxy*
-rwxrwxr-x 1 rootroot rootroot  20296 5月   2 16:29 quectel-qmi-proxy*
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM/out$ 
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM/out$ file quectel-CM 
quectel-CM: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.0.8, BuildID[sha1]=df17be612cd8840b562e01885b0a84d9afa96d78, with debug_info, not stripped
rootroot@rootroot-ThinkBook-16-G5-IRH:~/quectel-CM/out$ 


参考资料:
百度:QMIThread.c:2100:9: error: ‘for’ loop initial declarations are only allowe


https://blog.csdn.net/qq_53381910/article/details/131819714
error: ‘for‘ loop initial declarations are only allowed in C99 or C11 mode


https://blog.csdn.net/lei2014lei/article/details/134590485
error: ‘for‘ loop initial declarations are only allowed in C99 or C11 mode


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/5880.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS-复合选择器

作用&#xff1a; 后代选择器&#xff1a; 子代选择器 并集选择器 用逗号隔开&#xff0c;在style里面写的时候&#xff0c;每一个标签空一行。 <title>Document</title><style>p,div,span{color: aqua;}</style> </head> <body><p>…

C语言——队列的实现

队列按照先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则管理数据。这意味着最先进入队列的元素会被最先移出&#xff0c;类似于排队等候服务的情况。队列通常有两个主要操作&#xff1a;入队&#xff08;enqueue&#xff09;&#xff0c;将元素添加…

python - 3D图表绘制

Pyecharts 和 3D 图表绘制 Pyecharts 是一个用于生成各种图表的 Python 库&#xff0c;它基于 Echarts&#xff0c;支持大量的图表类型&#xff0c;非常适合用于数据分析和可视化。Pyecharts 主要优点是易于使用&#xff0c;可以直接在 Python 环境中绘制富有交互性的图表&…

ES练习项目-酒店搜索

目录 1 需求分析2 酒店搜索和分页2.1 请求和响应分析2.2 定义实体类&#xff0c;接收请求参数的JSON对象2.3 编写controller&#xff0c;接收页面的请求2.4 编写业务实现&#xff0c;利用RestHighLevelClient实现搜索、分页 3. 酒店结果过滤3.1 请求和响应分析3.2 修改请求参数…

结合创新!频域+时间序列,预测误差降低64.7%

频域时间序列不仅能提供更丰富的信息&#xff0c;还能提高模型性能和预测准确性。对于论文er来说&#xff0c;是个可发挥空间大、可挖掘创新点多的研究方向。 具体来说&#xff1a; 通过将复杂的时间序列数据转换成简单的频率成分&#xff0c;我们可以更容易地捕捉到数据的周期…

【人工智能基础】逻辑回归实验分析

实验环境&#xff1a;anaconda、jutpyter Notebook 实验使用的库&#xff1a;numpy、matplotlib 一、逻辑回归 逻辑回归是一个常用于二分类的分类模型。本质是&#xff1a;假设数据服从这个分布&#xff0c;然后使用极大似然估计做参数的估计。 二、实验准备 引入库、预设值…

Sam Altman:那些我希望有人能早点告诉我的事

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

【跟我学RISC-V】(一)认识RISC-V指令集并搭建实验环境

写在前面 现在计算机的体系架构正是发展得如火如荼的时候&#xff0c;占领桌面端市场的x86架构、占领移动端市场的arm架构、在服务器市场仍有一定地位的mips架构、国产自研的指令集loongarch架构、还有我现在要讲到的新型开源开放的RISC-V指令集架构。 我先说一说我的学习经历…

初始计算机网络

TCP/IP TCP/IP模型 TCP/IP网络模型&#xff1a;对于不同设备之间的通信&#xff0c;就需要网络通信&#xff0c;而设备是多样性的&#xff0c;所以要兼容多种多样的设备&#xff0c;就协商出了一套通用的网络协议。 TCP/IP分层 这个网络协议是分层的&#xff0c;每一层都有…

【MATLAB】GUI初步设计

MATLAB界面设计 前言一、基本步骤1.1 创建GUI文件1.2 界面设计 总结 前言 为了完成图像处理的作业&#xff0c;简直就是生活不易啊 找到一个很棒的教学视频 基于MATLAB的GUI界面设计流程讲解 一、基本步骤 1.1 创建GUI文件 由于在写博文之前我已经创建好文件了&#xff0c;…

文件批量高效管理,批量将PDF类型文件移动到指定文件夹里,实现文件高效管理

文件的管理与整理成为了我们生活中不可或缺的一部分。面对堆积如山的PDF文件&#xff0c;你是否也曾感到手足无措、焦头烂额&#xff1f;现在&#xff0c;有了我们的批量文件管理工具&#xff0c;PDF文件的管理将变得前所未有的高效与简单&#xff01; 首先&#xff0c;我们要…

拆单算法交易(Algorithmic Trading)

TWAP TWAP交易时间加权平均价格Time Weighted Average Price 模型&#xff0c;是把一个母单的数量平均地分配到一个交易时段上。该模型将交易时间进行均匀分割&#xff0c;并在每个分割节点上将拆分的订单进行提交。例如&#xff0c;可以将某个交易日的交易时间平均分为N 段&am…

compose调用系统分享功能分享图片文件

compose调用系统分享功能图片文件 简介UI界面提供给外部程序的文件访问权限创建FileProvider设置共享文件夹 通用分享工具虚拟机验证结果参考 本系列用于新人安卓基础入门学习笔记&#xff0c;有任何不同的见解欢迎留言 运行环境 jdk17 andriod 34 compose material3 简介 本案…

JavaEE_操作系统之进程(计算机体系,,指令,进程的概念、组成、特性、PCB)

一、冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09; 现代的计算机, 大多遵守冯诺依曼体系结构 CPU 中央处理器: 进行算术运算和逻辑判断.存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)输入设备: 用户给计算机发号施令的设备.输出设备: 计算机个…

基于php+mysql+html超市商品管理系统(含论文)

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、Php、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

【数据结构-之八大排序(下),冒泡排序,快速排序,挖坑法,归并排序】

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a;基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 …

eve 导入linux

mkdir /opt/unetlab/addons/qemu/linux-centos7 cd /opt/unetlab/addons/qemu/linux-centos7 上传hda.qcow2 /opt/unetlab/wrappers/unl_wrapper -a fixpermissions Linux images - (eve-ng.net) Due to very high demand of this section and problems with how to crea…

【车载开发系列】MCAL基本概念

【车载开发系列】MCAL基本概念 【车载开发系列】MCAL基本概念 【车载开发系列】MCAL基本概念一. BSW与MCAL1&#xff09;BSW-服务层2&#xff09;BSW-ECU抽象层3&#xff09;MCAL驱动层 二. MCAL基本概念三. MCAL组成1&#xff09;PORT2&#xff09;DIO3&#xff09;ADC4&#…

阿里云开源大模型开发环境搭建

ModelScope是阿里云通义千问开源的大模型开发者社区&#xff0c;本文主要描述AI大模型开发环境的搭建。 如上所示&#xff0c;安装ModelScope大模型基础库开发框架的命令行参数&#xff0c;使用清华大学提供的镜像地址 如上所示&#xff0c;在JetBrains PyCharm的项目工程终端控…

机器人正反向运动学(FK和IK)

绕第一个顶点可以沿Z轴转动&#xff0c;角度用alpha表示 绕第二个点沿X轴转动&#xff0c;角度为Beta 第三个点沿X轴转动&#xff0c;记作gama 这三个点构成姿态&#xff08;pose&#xff09; 我们记第一个点为P0&#xff0c;画出它的本地坐标系&#xff0c;和世界坐标系一样红…