交叉编译 WPA_Supplicant

2023-05-16

本文记录这个wifi配置工具的编译过程,步骤不少 ,涉及的开源代码包也比较多,以后很容易忘。

  • WPA_Supplicant简介

        首先,稍稍介绍下wpa_supplicant,这是一个控制无线网络连接的工具,类似于iw/iwconfig,但现有的iwconfig已经比较旧了,很多功能都支持不了,这也是我非得费时费力搞这些的原因。
        它由wpa_supplicant 和wpa_cli两部分组成,前者是一个daemon角色,后者则是控制工具的角色,wpa_cli实际与daemon通信,故无法独立运行。使用时, wpa_supplicant可带参数或配置脚本就能够完成所需的工作,不一定需要wpa_cli配合;但wpa_cli提供了很多子命令,便于调试,灵活配置,也能以此完成所有事情。

  • 编译wpa_supplicant

编译环境: Ubuntu-21.04   
交叉工具链接:arm-linux-gnueabi-7.3.1

(1)准备源码

wpa_supplicant官网:http://w1.fi/wpa_supplicant/
GIT源:git://w1.fi/hostap.git 
当前最新版本是wpa_supplicant-2.10.tar.gz  

直接下载版本包并解压,或直接 git clone git://w1.fi/hostap.git 到本地/home(或子)目录下,

golden@ubuntu:~/workspace$ git clone git://w1.fi/hostap.git       
.......
golden@ubuntu:~/workspace$ cd hostap/wpa_supplicant/
golden@ubuntu:~/workspace/hostap/wpa_supplicant$ 

(2)配置“.config”文件。

该文件包含了编译配置变量。源码目录中,默认不存在.config,但提供了一些示例文件,如下。

$ ls *config 
android.config  defconfig

$ cp defconfig ok6410_defconfig

我本地不是android,故选文件defconfig作为参考,将其复制成自己的配置文件,方便后续修改。 

为了避免后续报如下错误,需要修改编译ok6410_defconfig,将关联库的信息,添加入编译选项

/home/golden/workspace/tools/7.3.1/arm-linux-gnueabi/bin/ld: cannot find -lnl-3
/home/golden/workspace/tools/7.3.1/arm-linux-gnueabi/bin/ld: cannot find -lnl-genl-3
/home/golden/workspace/tools/7.3.1/arm-linux-gnueabi/bin/ld: cannot find -lnl-route-3
/home/golden/workspace/tools/7.3.1/arm-linux-gnueabi/bin/ld: cannot find -lssl
/home/golden/workspace/tools/7.3.1/arm-linux-gnueabi/bin/ld: cannot find -lcrypto
/usr/local/lib/pkgconfig/../../lib/libdbus-1.so: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status
make: *** [Makefile:1899: wpa_supplicant] Error 1

 wpa_supplicant依赖工具包,按日志显示的前后顺序分别是 libnlopenssldbus。我们必须事先在交叉工具链中准备好相关的依赖库和头文件,否则在上面的问题提示之前,就会提示缺少头文件,这一点,我是用ubuntu系统安装的头文件应付错误后,才后知后觉想到的。
为了叙述的连贯性,依赖包的安装,将在后续小中节说明,建议优先按后面小节准备好依赖包。
待准备好依赖库和头文件后,设置配置文件中的CFLAGS 和LIBS,让编译器知道其所在的路径。

ok6410_defconfig (原始的相关代码)

.....
# Uncomment following two lines and fix the paths if you have installed OpenSSL
# or GnuTLS in non-default location
#CFLAGS += -I/usr/local/openssl/include
#LIBS += -L/usr/local/openssl/lib
.....
# driver_nl80211.c requires libnl. If you are compiling it yourself
# you may need to point hostapd to your version of libnl.
#
#CFLAGS += -I$<path to libnl include files>
#LIBS += -L$<path to libnl library files>
....
# Add support for new DBus control interface
# (fi.w1.wpa_supplicant1)
CONFIG_CTRL_IFACE_DBUS_NEW=y

# Add introspection support for new DBus control interface
CONFIG_CTRL_IFACE_DBUS_INTRO=y
.....

将以下加亮部分的代码,加到ok6410_defconfig 开头即可(dbus部分不需要修改)

# //cross for ok6410 by Golden ,these will update by make.sh
CC=gcc
CROSSINC=/usr/include
CROSSLIB=/usr/lib
# // end
#上面三个变量将保存交叉编译工具链gcc名称和路径。工具链不同、路径不同,
# 都将影响设置,故此将这些设置提取成变量。但又没法直接传参,给.config文件中的变量赋值。
# 所以我将这些工作,通过make.sh脚本来处理,封装掉细节差异。

# Uncomment following two lines and fix the paths if you have installed OpenSSL
# or GnuTLS in non-default location
CFLAGS += -I$(CROSSINC)
LIBS += -L$(CROSSLIB)

.....
# driver_nl80211.c requires libnl. If you are compiling it yourself
# you may need to point hostapd to your version of libnl.
#
CFLAGS += -I$(CROSSINC)/libnl3
LIBS += -L$(CROSSLIB)/libnl/cli/cls/ -L$(CROSSLIB)/libnl/cli/qdisc/

.....
 

 (3)编译代码。

我将所有编译细节都包含到脚本make_wpa.sh中,源码如下:

make_wpa.sh:

#!/bin/bash

CROSS_COMPILE=arm-linux-gnueabi-

GCC_PATH=`which ${CROSS_COMPILE}gcc`
if [ -z $GCC_PATH ];then
    echo "Please initialize cross-compile envirnment"
    exit
fi

CC=${CROSS_COMPILE}gcc
CROSSLIB=${GCC_PATH%bin/*}lib
CROSSINC=${GCC_PATH%bin/*}include

# see cflag cc in defconfig
cp ok6410_defconfig .config

# Update cross-compile options in .config
sed -i "s/CC=gcc/CC=${CC}/g" .config
sed -i "s/CROSSLIB=\/usr\/lib/CROSSLIB=${CROSSLIB//\//\\/}/g" .config
sed -i 's/CROSSINC=\/usr\/include/CROSSINC='"${CROSSINC//\//\\/}"'/g' .config

make 

上述代码中, 与环境相关,只有CROSS_COMPILE变量,其与实际主机有关。可根据实际工具链的情况进行修改。执行脚本之前,必须将工具链的所在路径加入到全局变量PATH中,例如:
golden@ubuntu:~/ $   PATH=$PATH:$HOME/tools/7.3.1/bin
将make_wpa.sh放在wpa_supplicant/目录下,然后执行编译脚本即可:./make_wpa.sh
如果工具链配置正确,就会自动编译;否则,将提示错误。

golden@ubuntu:~/workspace/hostap/wpa_supplicant$ gedit make_wpa.sh &
[1] 1188608
golden@ubuntu:~/workspace/hostap/wpa_supplicant$ chmod +x make_wpa.sh
golden@ubuntu:~/workspace/hostap/wpa_supplicant$ 
golden@ubuntu:~/workspace/hostap/wpa_supplicant$ ./make_wpa.sh   
.....

golden@ubuntu:~/workspace/hostap/wpa_supplicant$ ls -dl ./wpa_cli ./wpa_passphrase ./wpa_supplicant systemd/ 
drwxrwxr-x 2 golden golden     4096  3月 12 14:45 systemd/
-rwxrwxr-x 1 golden golden   329645  3月 12 14:55 ./wpa_cli
-rwxrwxr-x 1 golden golden   245150  3月 12 14:55 ./wpa_passphrase
-rwxrwxr-x 1 golden golden 11353986  3月 12 14:55 ./wpa_supplicant

编译结束,得到 wpa_supplicant 和wpa_cli

golden@ubuntu:~/workspace/hostap/wpa_supplicant$ file wpa_supplicant 
wpa_supplicant: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, with debug_info, not stripped
golden@ubuntu:~/workspace/hostap/wpa_supplicant$ file wpa_cli
wpa_cli: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, with debug_info, not stripped

  • 交叉编译wpa_supplicant的依赖库

以下所涉及的开源包,编译命令都是类似的,除了configure参数可能有差异,基本上如下:
        #   ./configure    --prefix=....  --host=...
        #   make
        #   make install 
 
其中,--prefix指定 "make install"安装编译结果的路径;
           --host将指定用于什么架构,实际指定值也将用于配置CC、CPP编译项
为了减少重复,这里统一把编译过程概括成脚本,除了个别小节有特别说明之外,源码编译则用该脚本:make.sh 。

注意,如之前所述,执行脚本make.sh之前,须事先配置过交叉工具链的全局路径: PATH=$PATH:$HOME/tools/7.3.1/bin
在新打开的终端窗口中,执行过一次即可,确认PATH情况,可通过命令:echo $PATH

make.sh :

#!/bin/bash

CROSSPREFIX=arm-linux-gnueabi   #不要以“-”结尾

GCC_PATH=`which ${CROSSPREFIX}-gcc`
if [ -z $GCC_PATH ];then
    echo "Please initialize cross-compile envirnment"
    exit
fi
CROSSROOT=${GCC_PATH%bin/*}
CROSSLIB=${CROSSROOT}lib
CROSSINC=${CROSSROOT}include

# --prefix 指定安装目录
# --host:指定目标主机类型,与gcc编译器前缀有关
# CFLAGS LDFLAGS 将arm-linux编译工具链的头文件和库路径加入引用配置
./configure --prefix=${CROSSROOT} --host=$CROSSPREFIX CFLAGS=-I${CROSSINC} LDFLAGS=-L${CROSSLIB}

make
make install 

  • 1.交叉编译libnl(Netlink Protocol Library Suite

源码地址: https://www.linuxfromscratch.org/blfs/view/svn/basicnet/libnl.html
下载当前最新的libnl-3.5.0.tar.gz,并事先安装PC端的依赖包
# sudo apt-get install flex bison

注意,网络上有不少libnl下载地址,有些不是最新,比如libnl-3.2.25,那么在编译wpa_supplicant-2.10时,会提示缺少头文件以及函数未定义,这些问题在libnl-3.5.0上可避免。

../src/drivers/driver_macsec_linux.c:20:10: fatal error: netlink/route/link/macsec.h: No such file or directory
 #include <netlink/route/link/macsec.h>

下载源码并解压,得到

golden@ubuntu:~/workspace$ tar  xvzf libnl-3.5.0.tar.gz
....
golden@ubuntu:~/workspace$ cd libnl-3.5.0/
golden@ubuntu:~/workspace/libnl-3.5.0$ ls
aclocal.m4     configure.ac  libnl-3.0.pc.in      libnl-genl-3.0.pc.in   libnl-nf-3.0.pc.in     libnl-xfrm-3.0.pc.in  Makefile.in
build-aux      COPYING       libnl-3.sym          libnl-genl-3.sym       libnl-nf-3.sym         libnl-xfrm-3.sym      make.sh
ChangeLog      etc           libnl-cli-3.0.pc     libnl-idiag-3.0.pc     libnl-route-3.0.pc     libtool               man
config.log     include       libnl-cli-3.0.pc.in  libnl-idiag-3.0.pc.in  libnl-route-3.0.pc.in  m4                    python
config.status  lib           libnl-cli-3.sym      libnl-idiag-3.sym      libnl-route-3.sym      Makefile              src
configure      libnl-3.0.pc  libnl-genl-3.0.pc    libnl-nf-3.0.pc        libnl-xfrm-3.0.pc      Makefile.am           tests

将上面所说的默认脚本make.sh放置在源码目录下,执行即可:./make.sh

  • 2.交叉编译openssl

官网地址:https://www.openssl.org/source/ 
GIT源:https://github.com/openssl/openssl.git

 直接下载当前最新的版本 :openssl-3.0.1.tar.gz ,并解压。

golden@ubuntu:~/workspace$ tar xvzf ./openssl-3.0.1.tar.gz
...
golden@ubuntu:~/workspace$ cd openssl-3.0.1/
golden@ubuntu:~/workspace/openssl-3.0.1$ ls 
ACKNOWLEDGEMENTS.md  config.com        demos     HACKING.md   make_openssl.sh           NOTES-UNIX.md      README-ENGINES.md    tools
apps                 configdata.pm     doc       include      ms                NOTES-VALGRIND.md  README-FIPS.md       util
appveyor.yml         configdata.pm.in  engines   install      NEWS.md           NOTES-VMS.md       README.md            VERSION.dat
AUTHORS.md           Configurations    e_os.h    INSTALL.md   NOTES-ANDROID.md  NOTES-WINDOWS.md   README-PROVIDERS.md  VMS
build.info           Configure         external  LICENSE.txt  NOTES-DJGPP.md    os-dep             ssl                  wycheproof
CHANGES.md           CONTRIBUTING.md   FAQ.md    Makefile     NOTES-NONSTOP.md  pod2htmd.tmp       SUPPORT.md
config               crypto            fuzz      Makefile.in  NOTES-PERL.md     providers          test

 设置专门的编译脚本 make_openssl.sh:

#!/bin/bash

CROSS_COMPILE=arm-linux-gnueabi-
GCC_PATH=`which ${CROSS_COMPILE}gcc`
if [ -z $GCC_PATH ];then
    echo "Please initialize cross-compile envirnment"
    exit
fi

CROSSROOT=${GCC_PATH%bin/*}

# 指定cpu架构体系。配置项可搜索文件./Configurations/10-main.conf,例如 linux-mips32, -march项可默认不配置
# --prefix= 指定编译后安装路径
# --cross-compile-prefix=指定交叉编译工具链命令的前缀,以连接号结束
# shared作用是生成动态链接库
# no-asm表示不使用汇编代码,没有问题就不加,如果编译有问题再加:
# --openssldir=指定openssl配置文件的安装目录,如果不指定,默认安装到--prefix指定目录下的ssl目录
./Configure --prefix=${CROSSROOT} linux-armv4 -march=armv6 --cross-compile-prefix=${CROSS_COMPILE} no-asm shared  
make
make install

脚本置于源码根目录,并执行: ./make_openssl.sh    
自动将结果安装到工具链路径中。

  • 3.交叉编译dbus

 当前最新版本是 dbus-1.14.0.tar.xz  ,下载地址和详情介绍:https://www.linuxfromscratch.org/blfs/view/svn/general/dbus.html
GIT源:http://git@gitlab.freedesktop.org:dbus/dbus.git

下载并解压源码:

golden@ubuntu:~/workspace$ xz -d  dbus-1.14.0.tar.xz
golden@ubuntu:~/workspace$ tar xvf   dbus-1.14.0.tar
....
golden@ubuntu:~/workspace$ cd dbus-1.14.0/
golden@ubuntu:~/workspace/dbus-1.14.0$ ls
aclocal.m4           cleanup-man-pages.sh  config.status    dbus-1.pc                 Doxyfile.in  Makefile.am   README           README.wince
aminclude_static.am  cmake                 configure        dbus-1.pc.in              install      Makefile.in   README.cmake     stamp-h1
AUTHORS              CMakeLists.txt        configure.ac     dbus-1-uninstalled.pc     INSTALL      make_dbus.sh       README.cygwin    test
autogen.sh           config.h              CONTRIBUTING.md  dbus-1-uninstalled.pc.in  libtool      NEWS          README.launchd   tools
build-aux            config.h.in           COPYING          doc                       m4           NEWS.pre-1-0  README.valgrind
bus                  config.log            dbus             Doxyfile                  Makefile     NEWS.pre-1-2  README.win

 保存以下脚本内容到源码目录中的make_dbus.sh, 并执行该脚本:./make_dbus.sh

#!/bin/bash

CROSSPREFIX=arm-linux-gnueabi     # 结尾不要加‘-’

GCC_PATH=`which ${CROSSPREFIX}-gcc`
if [ -z $GCC_PATH ];then
    echo "Please initialize cross-compile envirnment"
    exit
fi

CROSSROOT=${GCC_PATH%bin/*}
CROSSLIB=${CROSSROOT}lib
CROSSINC=${CROSSROOT}include

# --prefix 指定安装目录
# --host:指定目标主机类型,与gcc编译器前缀有关
# CFLAGS LDFLAGS 将arm-linux编译工具链的头文件和库路径加入引用配置
./configure --prefix=${CROSSROOT} --host=$CROSSPREFIX CFLAGS=-I${CROSSINC} LDFLAGS=-L${CROSSLIB} --disable-doxygen-docs --disable-xml-doc --disable-tests

make
make install 

编译的过程中, 先后提示错误:

#1:  config-loader-expat.c:27:10: fatal error: expat.h: No such file or directory

----解决方法:交叉编译并安装 expat-2.4.7

#2:  dbus-launch.c:45:10: fatal error: X11/Xlib.h: No such file or directory

 ----解决方法:交叉编译并安装 libX11-1.7.3

3.1 交叉编译expat

源码地址:https://sourceforge.net/projects/expat/
GIT源: https://github.com/libexpat/libexpat
目前最新版本/expat/2.4.7/expat-2.4.7.tar.xz

下载并解压: xz -d  expat-2.4.7.tar.xz  ;tar  expat-2.4.7.tar
参考小节“1.交叉编译libnl”,放置并执行脚本:make.sh

3.2 交叉编译libX11

源码地址:https://www.x.org/releases/individual/lib/
目前最新版本:libX11-1.6.10.tar.gz

下载并解压:tar xzvf libX11-1.6.10.tar.gz
如果使用默认编译脚本make.sh,会提示错误
checking whether malloc(0) returns NULL....Configure: error in /....

需要将“enable_malloc0returnsnull=yes” 配置进去,故使用新脚本如下:

./make_libx11.sh

#!/bin/bash

CROSSPREFIX=arm-linux-gnueabi

GCC_PATH=`which ${CROSSPREFIX}-gcc`
if [ -z $GCC_PATH ];then
    echo "Please initialize cross-compile envirnment"
    exit
fi

CROSSROOT=${GCC_PATH%bin/*}
CROSSLIB=${CROSSROOT}lib
CROSSINC=${CROSSROOT}include

# --prefix 指定安装目录
# --host:指定目标主机类型,与gcc编译器前缀有关
# CFLAGS LDFLAGS 将arm-linux编译工具链的头文件和库路径加入引用配置

# BUG fix for libX11: checking whether malloc(0) returns NULL
echo "enable_malloc0returnsnull=yes" > tmp.cache

./configure --prefix=${CROSSROOT} --host=$CROSSPREFIX CFLAGS=-I${CROSSINC} LDFLAGS=-L${CROSSLIB} --cache-file=tmp.cache 
rm  tmp.cache

make
make install

执行脚本./make_libx11.sh,编译过程先后依序出现如下错误提示:

#1  ../../../include/X11/Xlib.h:44:10: fatal error: X11/X.h: No such file or directory

----解决方法:交叉编译并安装 xproto-7.0.31.tar.gz
     历史版本下载:https://xorg.freedesktop.org/archive/individual/proto/
     解压后,并参考小节"1.交叉编译libnl",执行前面的编译脚本make.sh安装即可

#2  imTrans.c:59:10: fatal error: X11/Xtrans/Xtrans.h: No such file or directory

----解决方法:交叉编译并安装 xtrans-1.4.0.tar.gz
     历史版本下载:https://xorg.freedesktop.org/archive/individual/lib/
     解压后,并参考小节"1.交叉编译libnl",执行前面的编译脚本make.sh安装即可

#3 XKB.c:32:10: fatal error: X11/extensions/XKBproto.h: No such file or directory

----解决方法:交叉编译并安装 kbproto-1.0.7.tar.gz
     历史版本下载:https://xorg.freedesktop.org/archive/individual/proto/
     解压后,并参考小节"1.交叉编译libnl",执行前面的编译脚本make.sh安装即可

#4 XKBExtDev.c:35:10: fatal error: X11/extensions/XI.h: No such file or directory

----解决方法:交叉编译并安装 inputproto-2.3.2.tar.gz 
     历史版本下载:https://xorg.freedesktop.org/archive/individual/proto/
     解压后,并参考小节"1.交叉编译libnl",执行前面的编译脚本make.sh安装即可

#5 ../include/X11/Xlib-xcb.h:7:10: fatal error: xcb/xcb.h: No such file or directory

----解决方法:交叉编译并安装 libxcb-1.14.tar.xz 
     历史版本下载:https://www.x.org/releases/individual/lib/
     解压后,并参考小节"1.交叉编译libnl",执行前面的编译脚本make.sh,依次提示如下错误:

     ##(1) No package 'xcb-proto' found  ;  No package 'xorg-macros' found

        ----解决方法:ubuntu内安装依赖工具: sudo apt-get install xcb-proto
                            并且交叉编译并安装xcb-proto-1.14.1.tar.gz
                            历史版本下载:https://xorg.freedesktop.org/archive/individual/proto/
                            解压后,并参考小节"1.交叉编译libnl",执行前面的编译脚本make.sh安装即可

     ##(2) Make sure that xcb/proto installed it on your Python path.

        ----解决方法:ubuntu内安装依赖工具:sudo apt-get install python3-xcbgen
                           并修改make.sh脚本, 将“PYTHON=python3”添加到./configure参数列表中

./configure PYTHON=python3 --prefix=${CROSSROOT} --host=$CROSSPREFIX CFLAGS=-I${CROSSINC} LDFLAGS=-L${CROSSLIB}

     ##(3) xcb_auth.c:33:10: fatal error: X11/Xauth.h: No such file or directory

        ----解决方法:交叉编译并安装 libXau-1.0.9.tar.gz
                           历史版本下载:https://www.x.org/releases/individual/lib/
                           解压后,并参考小节"1.交叉编译libnl",执行前面的编译脚本make.sh安装即可

#6 Font.c:49:10: fatal error: X11/extensions/xf86bigfproto.h: No such file or directory

----解决方法:交叉编译并安装 xorgproto-2020.1.tar.bz2 
     历史版本下载:https://xorg.freedesktop.org/archive/individual/proto/
     解压后,并参考小节"1.交叉编译libnl",执行前面的编译脚本make.sh安装即可

参考文章: 交叉编译libX11_ggggyj的专栏-CSDN博客_libx11交叉编译

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

交叉编译 WPA_Supplicant 的相关文章

  • 14、交叉编译cairo

    14 交叉编译cairo 目标平台 xff1a LOONGSON 1B 开发板 内核 xff1a Linux 3 0 编译平台 xff1a ubuntu10 04 交叉工具链 xff1a gcc 3 4 6 2f 一 简介 在信息领域中 x
  • ubuntu x86搭建 麒麟arm QT6交叉编译

    ubuntu搭建QT6交叉编译 使用QT6搭建arm交叉编译平台 编译环境准备 交叉编译器 qt源码准备 开始编译QT 使用QT6搭建arm交叉编译平台 近期项目需求开发平台是unbuntu x86 目标机器是UOS arm架构 由于需要在
  • 交叉编译 acl

    交叉编译 acl 概述 访问控制列表 xff08 Access Control Lists xff0c ACL xff09 是应用在路由器接口的指令列表 在 Linux 系统中 xff0c ACL 用于设定用户针对文件的权限 xff0c 而
  • 一文搞懂交叉编译,Windows和Linux的交叉编译

    文章目录 什么是交叉编译为什么要交叉编译工具链的种类 我们应该怎样建立交叉编译环境在Windows下交叉编译和调试树莓派软件一 Windows下编译树莓派程序二 用WSL来编译树莓派程序三 通过gdbserver远程调试 基于 MinGW
  • Linux下wifi工具wpa_cli使用

    wpa cli使用 扫描查看扫描结果添加network设置SSID选择某个network查看networks使能某个network查询连接情况自动分配IP地址API Demo 扫描 root 64 demo wpa cli i wlan0
  • 交叉编译 WPA_Supplicant

    本文记录这个wifi配置工具的编译过程 xff0c 步骤不少 xff0c 涉及的开源代码包也比较多 xff0c 以后很容易忘 WPA Supplicant简介 首先 xff0c 稍稍介绍下wpa supplicant xff0c 这是一个控
  • Ubuntu 16.04中用bazel交叉编译tensorflow lite

    首先在csdn上着了大神关于这个的实践如下链接 https www cnblogs com jojodru p 7744630 html 但是报错如下 xff0c 说是找不到opt选项 INFO Reading rc options for
  • 树莓派交叉编译(PS交叉编译链下载安装、配置永久环境变量、带WiringPi库交叉编译、软链接)

    目录 一 本章概述 二 交叉编译工具链的下载安装 下载 安装 交叉编译链临时有效 交叉编译链永久有效 三 交叉编译的使用 对比gcc与armgcc PC端交叉编译发送到树莓派运行 四 带WiringPi库的交叉编译如何处理 复制树莓派上的W
  • Ubuntu20.04下交叉编译树莓派能运行的c++程序(不含第三方库)

    参见博主之前的博客 里面生成了test目标文件 现在将这个目标文件传到树莓派上 运行出现如下报错信息 这里因为我的编译平台 x64 Ubuntu操作系统 和目标平台 ARM raspbian操作系统 所以前者编译出来的东西并不能在目标平台上
  • Ubuntu16.04 ARM/Qt 交叉编译环境搭建

    嵌入式开发 Ubuntu16 04 ARM Qt 交叉编译环境搭建 背景 环境说明 安装交叉编译工具 下载Qt源码包 编译Qt源码 安装QtCreator 配置QtCreator 应用QtCreator交叉编译 Ubuntu16 04 AR
  • 在Vitis IDE中使用第三方库 libtiff 保存 tiff 文件

    目的和思路 一个Vitis IDE 裸机项目 需要将视频帧无损地保存下来 由于每帧的像素数据是 16bit 1通道的 bayer 格式 满足这一需求的图像格式似乎只有 tiff 格式 开源的tiff 库是 libtiff 而在 Vitis
  • Go交叉编译

    交叉编译是指在一个硬件平台生成另一个硬件平台的可执行文件 而Go提供了非常方便的交叉编译方式 如何编译 Go交叉编译 涉及到几个环境变量的设置 GOARCH GOOS和CGO ENABLED GOARCH 编译目标平台的硬件体系架构 amd
  • mips使用buildroot,交叉静态编译file程序出现ld: cannot find -lz错误解决过程

    最近用unbutu X64 版本16 04 使用buildroot 版本2020 2 交叉编译一个mips的目标机 因为目标机没有支持库所以很多程序使用静态编译 这次的主角是file这个程序 运行该程序能知道各类文件的类型及追踪需要的支持库
  • 编译工具链和交叉编译工具链简易说明

    文章目录 编译工具链 交叉编译工具链 编译工具链 做C C 开发特别是嵌入式方向的肯定会涉及编译工具链和交叉编译工具链相关内容 C C 的程序需要经过 gcc 等编译成二进制程序才能被计算机使用 这里的 gcc 通常是泛指 包括 gcc g
  • mips-openwrt交叉编译 undefined reference to `__stack_chk_guard 错误

    最近在mips openwrt的工具链中交叉编译可执行程序时 出现了以下的错误 undefined reference to stack chk guard undefined reference to stack chk fail 百度一
  • sqlite3的交叉编译

    比如说我们在qtcreator中编写程序的时候想用到sqlite3数据库 但是因为qtcreator中的编译器中的库中并没有sqlite3的库 所以肯定编译不了 所以若想在qtcreator中编译sqlite3的程序 首先的将sqlite3
  • TVM:源码编译安装

    TVM Linux源码编译安装 笔者环境 OS Ubuntu 18 04 CMake 3 10 2 gcc 7 5 0 cuda 11 1 编译安装过程总览 本文将简介 tvm 的编译安装过程 包含两个步骤 通过C 代码构建共享库 设置相关
  • ubuntu16.04 安装交叉编译工具aarch64-linux-gnu-gcc/g++

    前言 最近需要把人脸识别代码放到RK3399Pro的嵌入式板子上 所以编写好的c 代码要放到板子上编译 或者在ubuntu系统上使用交叉编译工具 编译好可执行文件在放到板子里运行 为了在能在ubuntu系统上能交叉编译 安装aarch64
  • 使用 mdev 机制实现热插拔USB无线网卡 自动获取IP

    文章目录 实验环境 一 MDEV 机制 1 基本用法 2 MDEV 的配置文件 二 Kernel hotplug 三 wpa supplicant 使用方法 wpa cli 命令 四 DHCP 五 实现 1 开机脚本 2 创建 mdev 配
  • 搭建树莓派Pico交叉编译环境和工具链(arm-none-eabi-gcc)时可能会遇到的错误以及解决方案

    本文是一个类似手册的文章 用来记录可能遇到的错误 你可以通过侧栏选择遇到的错误来查看详细信息 No install step for ELF2UF2Build 遇到这种错误有两种原因 安装了版本不对或者不完整的arm none eabi g

随机推荐

  • 字符串子序列匹配问题

    题目给你长度为n的字符串L xff0c 给你q个长度为0 m的字符串b xff0c 让你判断每一个b是否是字符串L的子序列 L和b长度小于1e5 xff09 例题 xff1a Long Long Ago 有三种做法 最后一种能过 一 最长公
  • 字符串最小字典序子序列

    给出一个长度为n 1 lt n lt 10000 的只有小写字母的字符串 xff0c 然后找出一个长度为m的最小字典子序列 做一个预处理 xff0c 首先26个vector存储每个字母出现位置的下标 xff0c O n 遍历字符串 xff0
  • 关于vscode中使用c语言链接mysql的问题

    关于vscode中使用c语言链接mysql的问题 最近想着写一个图书管理系统 用来当C语言的期末设计作业 xff0c 想着反正都要写了 就写 大 一点就想着连一下数据库吧 xff01 xff01 就碰到了N多的问题 首先我使用的是vscod
  • debain 、pve虚拟化平台修改国内源并修改dns

    pve 是基于debain的一个linux 虚拟化平台 xff0c 可以实现创建虚拟机 问题 xff1a Failed to fetch xxxxxxx E Failed to fetch http ftp debian org debia
  • 虚拟化平台PVE(ProxmoxVirtual Environment)安装部署

    1 iso下载 官方ISO下载地址 2 ventoyu盘制作工具 ventoy官方下载 使用上边制作好u盘 xff0c 将下载好的PVE镜像文件拖入u盘中 3 进入主板bios xff0c 设置u盘为第一启动项 4 进入pe系统选择镜像 5
  • ubuntu22.04安装教程

    1 选择语言 默认 2 取消安装更新 默认 3 选择键盘语言 默认 4 配置ip xff0c 可以直接选择dhcp xff0c 也可选择配置静态ip 默认 5 配置代理 跳过不填写 6 设置镜像源 默认 https mirrors aliy
  • Ubuntu 16.04源码编译安装MySQL5.7

    CentOS源码编译安装 xff0c 可以参考 CentOS 6源码编译安装MySQL5 6 这篇文章 1 软件环境 Ubuntu 16 04mysql 5 7 24 2 安装前的准备 Ubuntu 16 04 sudo apt get i
  • 解决Ubuntu 16.04软件中心闪退的问题

    依次执行以下命令 xff1a sudo apt get update sudo apt get dist upgrade sudo apt get install reinstall software center 引用链接 xff1a h
  • 【Zookeeper+Hadoop+HBase】WMware上搭建基于Ubuntu18.04的Zookeeper+Hadoop+HBase集群

    WMware上搭建基于Ubuntu18 04的Zookeeper 43 Hadoop 43 HBase集群 前言一 环境准备1 创建虚拟机2 网络配置3 克隆2个虚拟机4 更改主机名hostname以及修改hosts文件4 配置各节点之间的
  • 【SpringBoot+阿里云ssl】完成 http转https以及ws转wss

    SpringBoot 43 阿里云ssl完成 http转https以及ws转wss 前言一 HTTP转HTTPS二 ws转wss 前言 本文工作是建立在已经有一个SSL证书的基础之上 阿里云证书如何申请可以参考以下链接 xff1a 阿里云免
  • 【python】pyplot绘制横轴为时间的图

    1 导入环境 span class token keyword import span numpy span class token keyword as span np span class token keyword import sp
  • 【Python】numpy二维数组删除指定行和列

    Python numpy二维数组删除指定行和列 1 原始数据2 删除指定行3 删除指定列4 删除指定多行和多列 1 原始数据 span class token keyword print span span class token punc
  • 【Pytorch】深度学习快速上手心得

    Pytorch 深度学习快速上手心得 前言一 环境安装1 1 安装Anaconda1 2 Anaconda 常见指令1 4 Pytorch环境安装1 3 Jupyter安装 二 一个简单的demo快速入门深度学习2 1 环境依赖2 2 数据
  • 【nginx】快速入门——SpringBoot项目代理及图片代理

    nginx快速入门 1 简介2 Ngnix下载2 Nginx启动与停止2 1 启动2 2 关闭2 3 重新启动 3 Ngnix配置文件4 SpringBoot项目代理5 图片代理6 代理html页面 1 简介 nginx engine x
  • 【Nginx+SSL】在华为云和腾讯云上配置Nginx+SSL,实现Http转Https

    Nginx 43 SSL 在华为云和腾讯云上配置Nginx 43 SSL xff0c 实现Http转Https 0 前言0 1 腾讯云证书下载0 2 华为云证书下载 1 Nginx的SSL模块安装2 SSL证书上传3 Nginx的配置3 1
  • 【大论文中注意事项】2022年11月3日记录

    大论文中注意事项 1 时间安排2 论文标题3 摘要4 自己的内容 重要 5 第一章的全文研究内容6 关于正文中的序号7 第一章的课题来源8 文章9 文献10 第一章的本文主要研究内容11 实验的对比12 每一章的小节13 章节正文开始14
  • 【文件上传】前端html上传 + 后端SpringBoot接收并保存

    1 前端页面 lt form gt 记得设置一下enctype 61 34 multipart form data 34 span class token doctype span class token punctuation lt sp
  • linux系统下,11款常见远程桌面控制软件

    远程控制能够给人们带来很多便利 xff0c 本文介绍了11款常见的Linux系统下的远程桌面控制工具 xff0c 总有一款能适合您 一 Grdc 它是一个用GTK 43 编写的 xff0c 适用于gnome桌面环境的远程桌面访问软件 看图
  • ubuntu远程桌面到Windows

    我知道的有两种方法 xff1a 1 xff09 使用Terminal Server Client 打开Applications gt Internet gt Terminal Server Client xff0c 在 General 选项
  • 交叉编译 WPA_Supplicant

    本文记录这个wifi配置工具的编译过程 xff0c 步骤不少 xff0c 涉及的开源代码包也比较多 xff0c 以后很容易忘 WPA Supplicant简介 首先 xff0c 稍稍介绍下wpa supplicant xff0c 这是一个控