wifi驱动---wpa_supplicant 移植操作指南
1.获取源码
创建个文件夹 下载源码并解压
mkdir wifi1
cd wifi1
wget http://w1.fi/releases/wpa_supplicant-2.6.tar.gz
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1q.tar.gz
wget https://www.infradead.org/~tgr/libnl/files/libnl-3.2.23.tar.gz
tar -xvf *
2.移植libopenssl
wpa_supplicant 依赖于 libopenssl,因此需要先移植 libopenssl
prefix=/home/ljh/mydemo/wifi1/tool/libopenssl/ 这里的路径是自己定义配置输出的库文件的路径 根据自己路径创建即可
1.配置生成 Makefile
cd wifi1
mkdir tool
cd tool
mkdir libopenssl
cd ../openssl-1.1.1q/
./config shared no-asm --prefix=/home/ljh/mydemo/wifi1/tool/libopenssl/
2.声明编译器路径并修改Makefile
/home/ljh/mydemo/sophpi-huashan/host-tools/gcc/riscv64-linux-musl-x86_64/bin根据编译器源码路径修改
export PATH=$PATH:/home/ljh/mydemo/sophpi-huashan/host-tools/gcc/riscv64-linux-musl-x86_64/bin
vi Makefile
找到所有包含“-m64”的内容,一共两处分别为变量 CNF_CFLAGS 和 CNF_CXXFLAGS,将这两个变量中的“-m64”删除掉
3.编译
make CROSS_COMPILE=riscv64-unknown-linux-musl- -j4
make install
编译成功如下图所示
4.生成文件压缩并传输到开发板
注意:需要提前在开发板的mnt/data/创建wifi文件夹 并且在wifi文件下创建lib文件夹
cd ../tool/libopenssl/lib/
tar -czvf lib.tar.gz *
scp lib.tar.gz [email protected]:/mnt/data/wifi/lib
3.移植libnl库
wpa_supplicant 也依赖于 libnl,因此还需要移植一下 libnl 库
1.配置生成Makefile
cd wifi1/tool
mkdir libnl
cd ../libnl-3.2.23/
export PATH=$PATH:/home/ljh/mydemo/sophpi-huashan/host-tools/gcc/riscv64-linux-musl-x86_64/bin
./configure --host=riscv64-unknown-linux-musl --prefix=/home/ljh/mydemo/wifi1/tool/libnl/
2.编译
make -j6
make install
编译安装完成后的libnl目录下如图 所示:
3.生成文件压缩并传输到开发板
需要用到libnl文件下的lib库文件,文件传输拷贝lib下的库文件到开发板的mnt/data/wifi/lib目录下。
注意:需要提前在开发板的mnt/data/创建wifi文件夹 并且在wifi文件下创建lib文件夹
cd ../tool/libnl/lib
tar -czvf libnl.tar.gz *
scp libnl.tar.gz [email protected]:/mnt/data/wifi/lib
4.移植wpa_supplicant
接下来移植wpa_supplicant
1.配置.config 指定交叉编译器
cd wpa_supplicant-2.7/wpa_supplicant/
cp defconfig .config
完成以后打开.config 文件,在里面指定交叉编译器、openssl、libnl 库和头文件路径,设置如下
/home/ljh/mydemo/wifi1/tool 这里的路径是前面创建存放lib库文件的文件夹 根据自己设置而改
CC = riscv64-unknown-linux-musl-gcc -Wl,-dynamic-linker,/lib/ld-musl-riscv64v_xthead.so.1
# /* openssl 库文件和头文件路径*/
CFLAGS += -I/home/ljh/mydemo/wifi1/tool/libopenssl/include
LIBS += -L/home/ljh/mydemo/wifi1/tool/libopenssl/lib -lssl -lcrypto
# /*libnl库文件和头文件路径*/
CFLAGS += -I/home/ljh/mydemo/wifi1/tool/libnl/include/libnl3
LIBS += -L/home/ljh/mydemo/wifi1/tool/libnl/lib
2.编译wap_supplicant
/home/ljh/mydemo/wifi1/tool 这里的路径是前面创建存放lib库文件的文件夹 根据自己设置而改
编译 wpa_supplicant 的时候是需要指定 libnl 的 pkgconfig 路径,否则会提示“libnl-3.0”或者“libnl-3.0.pc”找不到等错误。
export PKG_CONFIG_PATH=/home/ljh/mydemo/wifi1/tool/libnl/lib/pkgconfig:$PKG_CONFIG_PATH
make
编译完成以后就会在本目录下生成 wpa_supplicant 和 wpa_cli
3.生成文件压缩并传输到开发板
编译好的wpa_cli 和 wpa_supplicant 这两个文件拷贝到开发板的mnt/data/wifi
注意:需要提前在开发板的mnt/data/创建wifi文件夹
scp -r wpa_cli wpa_supplicant [email protected]:/mnt/data/wifi
在开发板测试使用:
#声明库文件路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/data/wifi/lib/
正常输出一下内容表示移植成功
5.WIFI联网测试
1.在开发板解压库文件压缩包并声明库文件路径
cd /mnt/data/wifi/lib
gzip -d *.gz
tar xvf *.tar
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/data/wifi/lib/
export PATH=$PATH:/mnt/data/wifi/
2.联网使用
在开发板的mnt/data/wifi中
mkdir wpa
vi wpa_supplicant.conf
编写以下内容保存退出
ctrl_interface= 这里指的是上边的wpa路径
ssid是wifi的名称 psk是密码 这里我使用是手机热点
ctrl_interface=./wpa
ap_scan=1
network={
ssid="Axiong123"
psk="11111111"
}
输入命令使用:
wpa_supplicant -D nl80211 -c ./wpa_supplicant.conf-i wlan0 &
成功输出:
观察手机:
可以ping 通百度 联网成功!