本帖最后由 翠花儿 于 2021-6-19 16:01 编辑
1 实验环境本实验使用到的硬件是迅为电子的 imx6Q开发板(板载 MT6620 模块),开发板上运行的操作系统是QT5.7文件系统(所以开发环境搭建可以参考《i.mx6Q开发板使用手册》的 “搭建交叉编译环境”,作者使用的交叉编译器是arm-2009q3)。如果大家使用的是其它的文件系统,需要注意的是搭建交叉编译环境所需要的交叉编译器一定要和制作文件系统使用的交叉编译器一致。配套资料在网盘资料的路径为“iTOP-i.MX6开发板资料汇总(不含光盘资料)\08_iTOP-i.MX6开发板Linux系统开发资料\08-linux系统创建AP热点”。 2 交叉编译 openssl1 我们新建一个hostap的文件夹,使用 ssh 上传本压缩包里面的“openssl-1.0.2h.tar.gz”到 UBuntu 系统的hostap文件夹下,我们然后在终端输入“tar -xvf openssl-1.0.2h.tar.gz”,开始解压 openssl,如下图所示: 解压完成会生成“openssl-1.0.2h”目录,如下图所示: 2 我们使用“cd openssl-1.0.2h”命令,进入“openssl-1.0.2h”目录,如下图所示: 然后我们在终端输入“./config no-asm shared --prefix=$(pwd)/__install”命令 no-asm:是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码 是对 arm 格式不支持的; Shared:生成动态连接库; file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml4712\wps4.png--prefix:指定 make install 后生成目录的路径(我们安装到当前目录的 install 文件夹里面); 运行结果如下图所示: 然后我们使用“vi Makefile”命令,打开 Makefile 文件,如图所示: 我们需要修改 Makefile 文件里面的“CC,AR,RANLIB,MM,SHARED_LDFLAGS“这几个变量,这几个变量分别改成: CC= arm-none-linux-gnueabi-gcc 删除 CFLAGS=中的 m64 AR= arm-linux-gnueabihf-ar $(ARFLAGS) r RANLIB= arm-linux-gnueabihf-ranlib NM= arm-linux-gnueabihf-nm SHARED_LDFLAGS= 最终修改结果如下图所示: 按照上面的修完完成以后保存并退出,接着在终端输入“make”命令,可以编译 openssl,运行结果如下图所示: 编译完成如下图所示: 接着我们在终端输入“make install”安装命令,如图所示: 执行完“make install”命令,会将编译生成的库文件,以及一些头文件拷贝到“install” 文件夹,如下图所示: 至此关于 openssl 的安装完成了。 3 交叉编译 libnl使用 ssh 上传本压缩包里面的“libnl-3.2.25.tar.gz”到UBuntu 系统的hostap文件夹下(与上面的 openssl 在同一个目录下) 然后在终端输入“tar -xvf libnl-3.2.25.tar.gz”解压命令,如下图所示: 解压完成以后使用“cd libnl-3.2.25”进入到 libnl 目录,如下图所示: 然后我们在终端输入“./configure --host=arm-none-linux-gnueabi --prefix=$(pwd)/__install --enable-shared --enable-static CC=arm-none-linux-gnueabi-gcc”命令。 --prefix=$(pwd)/__install:指定编译出来的库存放的路径(当前目录下的__install 文件夹) 运行结果如下图所示: 接着我们在终端输入“make CC=arm-none-linux-gnueabi-gcc”编译命令,如图所示: 编译完成如下图所示: 然后我们在终端输入“make install”命令,安装编译生成的库文件到当前目录的“ install” 文件夹,如下图所示: 我们可以使用“cd install”命令,进入到“ install”文件夹查看编译生成的文件,如下图所示: 至此 libnl 交叉编译就完成了。 4 交叉编译 hostapd使用 ssh 上传本压缩包里面的“hostapd-2.9.tar.gz”到 Ubuntu 系统(与上面的 openssl 和 libnl同一目录),然后我们在终端输入“tar -xvf hostapd-2.9.tar.gz”开始解压 hostapd,如下图所示: 接着我们使用“cd hostapd-2.9/hostapd”命令,进入到 hostapd 目录,如下图所示: 然后我们在终端输入“cp defconfig .config”生成配置文件,如下图所示: 然后我们使用“vi Makefile”打开 Makefile 文件,将 ifndef CC CC=gcc Endif 修改为: #ifndef CC CC=arm-none-linux-gnueabi-gcc #endif 如下图所示: 然后在 Makefile 文件里面添加: CFLAGS += -I../../libnl-3.2.25/__install/include/libnl3/ CFLAGS += -I../../openssl-1.0.2h/__install/include/ LIBS += -L../../libnl-3.2.25/__install/lib/ LIBS += -L../../openssl-1.0.2h/__install/lib/ 指定 hostapd 依赖的头文件和库文件(前面编译 openssl 和 libnl 安装到的目录),添加完成后如下图所示: 然后退出并保存,接着在终端输入“make”命令,开始编译,如图所示: 编译完成后如下图所示: 我们在终端输入“ls”命令可以看到生成了“hostapd”文件,如下图所示: 至此,hostap 编译完成了。 5 交叉编译iptables拷贝iptables-1.4.19.tar.bz2 压缩包到/home/topeet/iMX6Q/hostap目录下(与上面的 openssl 和 libnl同一目录),并输入命令 tar -vxf iptables-1.4.19.tar.bz2 解压到当前目录下。如下图所示: 输入命令cd iptables-1.4.19进入到iptables-1.4.19目录下,在此目录下输入mkdir __install 命令创建安装目录。如下图所示: 在iptables-1.4.19目录下输入命令./configure --host=arm-none-linux-gnueabi --prefix=/home/topeet/iMX6Q/hostap/iptables-1.4.19/__install/ --enable-static --disable-shared 注意修改为自己的安装路径。如下图所示: 成功后如下图所示: 在iptables-1.4.19目录输入make进行编译,编译成功后如下图所示: 在iptables-1.4.19目录输入make install进行安装,安装成功后如下图所示: 进入到__install/lib目录下,可以看到安装目录下生成了文件。 使用命令tar zcvf lib_iptables.tar.gz * 压缩lib下的文件。如下图所示: 6 准备所需库文件,配置文件和执行文件经过前面34.2, 34.3, 34.4, 34.5章节的步骤我们已经编译出了hostapd 运行所需的库文件以及hostapd 可执行程序,接下来我们需要拷贝这些文件到开发板上: 6.1 打包 openssl 库使用“cd openssl-1.0.2h/ _install/lib”命令进入到 openssl 的库文件夹,如图所示: 然后使用“tar zcvf openssl.tar.gz engines libcrypto.a libcrypto.so libcrypto.so.1.0.0 libssl.a libssl.so libssl.so.1.0.0 pkgconfig”打包命令(因为该目录下有些是链接文件,通过 ssh 拷贝可能会有问题,所以我们先打包),如下图所示: 运行完,会在当前目录下生成“openssl.tar.gz”压缩包,如下图所示: 6.2 打包 libnl 库用“cd libnl-3.2.25/__install/lib”命令进入到 libnl 的库文件夹,如下图所示: 然后我们在终端输入“tar zcvf lib_nl.tar.gz libnl*”压缩命令,如下图所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml4712\wps42.jpg 运行完会在当前目录下生成“lib_nl.tar.gz”压缩包,如下图所示: 6.3 拷贝库文件和 hostap1.我们使用ssh(大家可以使用nfs或者U盘拷贝到开发板上面),将“lib_nl.tar.gz”压缩包和“openssl.tar.gz”压缩包拷贝到开发板的“/usr/lib”目录下,,然后分别输入“tar -xvf lib_nl.tar.gz”和 “tar -vxf openssl.tar.gz ”两个命令,解压 libnl 和openssll库文件到当前目录下。 2.然后拷贝“hostapd.conf”,“udhcpd.conf”,“udhcpd.leases”配置文件到开发板的“/etc”目录下。 3.然后拷贝“hostapd”到开发板的“/usr/sbin”目录下。 4.然后将 “iptables-1.4.19/__install/sbin”下的xtables-multi拷贝到到开发板的bin目录下,输入chmod 777 xtables-multi修改权限,并改名为iptables。 5.将压缩包lib_iptables.tar.gz拷贝到开发板lib目录下并解压。 6 然后我们分别进入开发板的“/usr/lib”“/etc”“/usr/sbin”“/bin”“/lib”目录下,分别输入命令“chmod 777 -R *”,赋予权限给我们刚刚拷贝的文件。 至此所需的文件我们已经准备好了。 hostapd.conf 文件是设置 AP 热点的网络名字,以及密码,其内容如下: ctrl_interface=/var/run/hostapd interface=wlan0 driver=nl80211 ssid=Topeet_TEST channel=1 macaddr_acl=0 auth_algs=1 hw_mode=g ignore_broadcast_ssid=0 #wpa=2 wpa_passphrase=12345678 #wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP 上面的 ssid 是 wifi 的名称(Topeet_test),wpa_passphrase 是 wifi 的密码(1234567890)。 udhcpd.conf 文件是配置 dhcp 的,内容如下: start 192.168.0.1 end 192.168.0.100 interface wlan0 max_leases 20 #default: 254 remaining yes #default: yes auto_time 7200 decline_time 3600 conflict_time 3600 offer_time 60 min_lease 60 lease_file /etc/udhcpd.leases opt dns 114.114.114.114 option subnet 255.255.255.0 opt router 192.168.0.1 |
Start 和 end 指定了 wifi 分配的 IP 地址范围(192.168.0.1-192.168.0.100),其它的参数大家可以网上查阅下,这里就不再具体讲述了。 61.7 开发板上配置 AP 热点开发板连接好电源和调试串口,我们插入网线连接到路由器,然后打开调试串口终端,然后给开发板上电,等待系统启动完成,如图所示: 然后在调试串口输入“ifconfig wlan0 192.168.0.1 up”命令,配置 wlan0 的 ip,并启用 wlan0,如图所示: 然后我们输入命令“ifconfig”,发现wlan0的信息,如下图所示: 所有的准备就绪后,我们要用前面移植的iptables来实现linux平台实现网络数据的转发和网络数据共享的功能。首先我们一定要记得先实现eth0能上网,将开发板的网线连上路由器,如果eth0都上不了网,自然谈不上转发。我们要将eth0的网络数据转发给wlan0,从而实现wlan0可以上网的功能。 整体结构和测试环境如下图所示: 输入下面的命令,配置nat转发表。 // 将局域网内地址通过eth0接口伪装后转发出去 iptables -A FORWARD -s 192.168.0.1/24 -o eth0 -j ACCEPT //对于已经建立连接的包以及该连接相关的包都允许通过! iptables -A FORWARD -d 192.168.0.1/24 -j ACCEPT // 配置数据包转发时候的接口 iptables -t nat -A POSTROUTING -s 192.168.0.1/255.255.255.0 -o eth0 -j MASQUERADE echo 1 >/proc/sys/net/ipv4/ip_forward 然后在调试串口输入“hostapd -B /etc/hostapd.conf”开始 AP 热点,运行结果如下图所示: 然后在调试串口输入“udhcpd -fS /etc/udhcpd.conf &”,开启 dhcp server 服务(udhcpd 这个程序是我们在制作文件系统的时候 busybox 里面默认提供的,如果大家的文件系统没有这个程序,可以重新配置下 busybox 或者是单独移植一下 udhcpd 这个程序,具体的移植步骤这里就不在介绍了),运行结果如图所示: 至此 AP 热点功能已经开启了,我们可以在调试串口输入“ps -el”查看所有进程,能够看到hostapd 和 udkcpd 两个进程在后台运行,如图所示: 然后我们可以使用手机或笔记本扫描 wifi,能够查找到“Topeet_TEST”网络,并连接该 wifi 网络,密码输入“123456780”,最后会连接到“Topeet_TEST”网络,同时我们在调试串口会看到 dhcp 为我们的手机分配的 ip 地址“192.168.0.2”,如图所示: 手机连接上以后,串口控制台打印信息如下: 至此开发板上创建热点可以连接,并且可以访问外网了。
|