i.MX6ULL应用移植 | 移植wpa_supplicant到Linux开发板(2.7版本)

一、wpa_supplicant

wpa_supplicant 是跨平台的 WPA 请求者程序(supplicant),支持 WEP、WPA 和 WPA2(IEEE 802.11i).。可以在桌面、笔记本、嵌入式系统中使用。

wpa_supplicant 是在客户端使用的 IEEE 802.1X/WPA 组件,支持与 WPA Authenticator 的交互,控制漫游和无线驱动的IEEE 802.11 验证和关联。

二、移植前的准备

1. 移植openssl

参考这篇文章:i.MX6ULL应用移植 | 移植OpenSSH 8.9到Linux开发板(zlib、openssl、openssh)

2. 移植libnl

libnl库提供了一套应用于Linux系统基于Netlink协议通信的API接口。

2.1. 下载源码

官网:https://www.infradead.org/~tgr/libnl/

下载最新的3.2.25版本:

wget https://www.infradead.org/~tgr/libnl/files/libnl-3.2.25.tar.gz

解压源码:

tar -zxf libnl-3.2.25.tar.gz

2.2. 交叉编译

新建编译安装文件夹:

mkdir libnl-3.2.25-build

编译配置:

./configure --host=arm-linux-gnueabihf --prefix=/home/mculover666/develop/imx6ull/libnl/libnl-3.2.25-build

编译:

make -j16

安装:

make install


2.3. 拷贝库文件到开发板根文件系统

sudo cp -raf lib/* ~/develop/imx6ull/rootfs-busybox-imx6ull/source_busybox/usr/lib/

三、wpa_supplicant移植

1. 下载源码

官网:Linux WPA/WPA2/IEEE 802.1X Supplicant

下载2.7版本:

wget http://w1.fi/releases/wpa_supplicant-2.10.tar.gz

最新2.10版本使用了dbus,我的编译器为arm-linux-gnueabihf-gcc 7./5.0版本,编译报错

解压源码:

tar -zxf wpa_supplicant-2.7.tar.gz

2. 交叉编译

复制def_config文件:

cd wpa_supplicant
cp defconfig .config

修改.config文件:

  • 修改交叉编译器
  • 添加openssl库文件路径
  • 添加libnl库文件路径
CFLAGS += -I/home/mculover666/develop/imx6ull/openssl/openssl-3.0.2-build/include
LIBS += -L/home/mculover666/develop/imx6ull/openssl/openssl-3.0.2-build/lib -lssl -lcrypto
CC=arm-linux-gnueabihf-gcc

CFLAGS += -I/home/mculover666/develop/imx6ull/libnl/libnl-3.2.25-build/include/libnl3
LIBS += -L/home/mculover666/develop/imx6ull/libnl/libnl-3.2.25-build/lib

设置环境变量:

export PKG_CONFIG_PATH=/home/mculover666/develop/imx6ull/libnl/libnl-3.2.25-build/lib/pkgconfig:$PKG_CONFIG_PATH

编译:

make -j16

编译之后看到可执行文件:

看一下可执行文件的类型,确保是交叉编译的:

3. 拷贝可执行文件到开发板的根文件系统

sudo cp wpa_cli wpa_supplicant ~/develop/imx6ull/rootfs/rootfs-busybox-imx6ull/source_busybox/usr/local/bin 

重新打包烧录根文件系统。

4. 测试

四、WIFI联网测试

1. 创建配置文件

在开发板根目录/etc下创建配置文件:wpa_supplicant.conf,添加以下配置内容:

ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
    
    
 ssid="Mculover666"
 psk="mculover666"
}

在var目录下创建用到的目录:

mkdir -p /var/run/wpa_supplicant

2. 连接热点

wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &

3. 获取ip地址

udhcpc -i wlan0


查看网卡:

查看路由表:

4. ping通外网测试

五、问题记录

1. 问题描述

udhcpc获取到ip地址后,没有设置到网卡。

2. 问题定位

该问题是由于使用busybox制作根文件系统时,没有把udhcpc的脚本拷贝过去。

3. 问题解决

下载之前制作根文件系统使用的busybox源码,参考之前文章:i.MX6ULL系统移植 | 使用busybox制作根文件系统(1.29.0)

拷贝busybox源码中 examples/udhcp/simple.script 脚本,到开发板根文件系统的 /usr/share/udhcpc(不能改路径,否则要重新修改编译busybox源码),并重命名为:default.script。

猜你喜欢

转载自blog.csdn.net/Mculover666/article/details/125726022