16、开发板通过WIFI网络NFS挂载Ubuntu虚拟机上某个文件夹

假设WIFI驱动已经安装完成

一、安装wireless tools 工具

1、得到 iwlist_for_visteon-master 文件夹, 进入 iwlist_for_visteon-master 目录下如下所示:
在这里插入图片描述
2、然后打开 Makefile 文件修改文件中的 CC、 AR 和 RANLIB 这三个变量, 修改后如下所示:
在这里插入图片描述
3、其中 CC、 AR 和 RANLIB 这三个变量为所使用的编译器工具, 将其改为我们所使用的arm-linux-gnueabihf-xxx 工具即可。 修改完成以后就可以使用如下命令编译:

make clean
make

编译完成以后就会在当前目录下生成 iwlist、 iwconfig、 iwspy、 iwpriv、 ifrename 这 5 个工具, 另外还有很重要的 libiw.so.29 这个库文件。 将这 5 个工具拷贝到开发板根文件系统下的/usr/bin 目录中, 将libiw.so.29 这个库文件拷贝到开发板根文件系统下的/usr/lib 目录中。 拷贝完成后就可以测试 iwlist 命令是否工作正常。

二、安装wpa_supplicant工具

1、libopenssl 移植
wpa_supplicant 依 赖 于 libopenssl , 因 此 需 要 先 移 植 libopenssl , 首 先 获 取openssl-1.1.1-stable-SNAP-20190915.tar.gz 压 缩 包 , 拷 贝 到 Ubuntu 系 统 下 并 解 压 , 得 到openssl-1.1.1-stable-SNAP-20190915 文件夹, 然后在新建一个名为“libopenssl”的文件夹, 用于存放 libopenssl的编译结果。 进入到解压出来的 openssl-1.1.1-stable-SNAP-20190915 目录中, 然后执行如下命令进行配置:

./config shared no-asm --prefix=/home/topeet/tool/libopenssl/

配置成功以后会生成 Makefile, 打开 Makefile, 找到所有包含“-m64” 的内容, 一共两处分别为变量CNF_CFLAGS 和 CNF_CXXFLAGS, 将这两个变量中的“-m64” 删除掉, 修改后如下图所示:
在这里插入图片描述
Makefile 修改好以后使用如下命令编译并安装 libopenssl:

make CROSS_COMPILE=arm-linux-gnueabihf- -j4
make install

编译安装完成后在 libopenssl 目录下有如下内容:
在这里插入图片描述
其中的 lib 目录是我们需要的, 将 lib 目录下的所有文件拷贝到开发板根文件系统中的/usr/lib 目录下。 当使用 U 盘拷贝文件是可能会“无法创建符号链接” , 这样的文件可以先将 lib 目录下的文件打包成 tar.gz 格式的压缩包, 然后拷贝到跟文件系统下解压到/usr/lib 目录下。 执行下面的命令:

cd /home/topeet/tool/libopenssl/lib/ //进入 lib 目录下
tar -czvf lib.tar.gz * //打包当前目录下的文件生成 lib.tar.gz

然后通过 U 盘拷贝到跟文件系统下解压到/usr/lib 目录下。

mount /dev/sda1 /mnt //挂载 U 盘到 mnt 目录下
tar -xvf /mnt/lib.tar.gz -C /usr/lib //直接解压 lib.tar.gz 到/usr/lib 目录下

“-C” 指定解压的目录。
2、libnl 库移植
wpa_supplicant 也依赖于 libnl, 因此还需要移植一下 libnl 库, 获取 libnl-3.2.23.tar.gz 压缩包, 然后拷贝到Ubuntu 系统下并解压, 得到 libnl-3.2.23 文件夹, 然后在新建一个名为“libnl” 的文件夹, 用于存放 libnl 的编译结果。 进入到 libnl-3.2.23 文件夹中, 然后执行如下命令进行配置:

./configure --host=arm-none-linux-gnueabi --prefix=/home/topeet/tool/libnl/

–host 用于指定交叉编译器的前缀, 这里设置为“arm-linux-gnueabihf” , --prefix 用于指定编译结果存放目
录, 这里要设置为我们刚刚创建的 libnl 文件夹。 配置完成以后就可以执行如下命令对 libnl 库进行编译、
安装:

make -j12
make install

编译安装完成后的 libnl 目录下如图所示:
在这里插入图片描述
需要用到 libnl 文件下的 lib 库文件, 通过 U 盘拷贝 lib 下的库文件到/usr/lib 目录下。
3、wpa_supplicant 移植
接下来移植 wpa_supplicant, 获取 wpa_supplicant 源码包 wpa_supplicant-2.7.tar.gz, 拷贝到 Ubuntu 系统下并解压, 得到 wpa_supplicant-2.7 文件夹, 进入 wpa_supplicant-2.7 目录下, 有如下内容:
在这里插入图片描述
进入到图中的 wpa_supplicant 目录下, 然后进行配置, wpa_supplicant 的配置比较特殊, 需要将wpa_supplicant 下的 defconfig 文件拷贝一份并重命名为.config, 命令如下:

cd wpa_supplicant/
cp defconfig .config

完成以后打开.config 文件, 在里面指定交叉编译器、 openssl、 libnl 库和头文件路径, 设置如下:

49 CC = arm-linux-gnueabihf-gcc
/* openssl 库文件和头文件路径*/
50 CFLAGS += -I/home/topeet/tool/libopenssl/include
51 LIBS += -L/home/topeet/tool/libopenssl/lib -lssl -lcrypto
52 /*libnl 库文件和头文件路径*/
53 CFLAGS += -I/home/topeet/tool/libnl/include/libnl3
54 LIBS += -L/home/topeet/tool/libnl/lib

CC 变量用于指定交叉编译器, 这里就是 arm-linux-gnueabihf-gcc, CFLAGS 指定需要使用的库头文件路径,LIBS 指定需要用到的库路径。 编译 wap_supplicant 的时候需要用到 openssl 和 libnl 库, 所以在代码中指定了这两个的库路径和头文件路径。 上述内容在.config 中的如下所示:
在这里插入图片描述
.config 文件修改完成后就可以编译 wap_supplicant 了, 在 wap_supplicant 目录下使用下列命令编译:

export PKG_CONFIG_PATH=/home/topeet/tool/libnl/lib/pkgconfig:$PKG_CONFIG_PATH
make

首先我们使用 export 指定了 libnl 库的 pkgconfig 路径, 环境变量 PKG_CONFIG_PATH 保存着 pkgconfig包路径。 在 tool/libnl/lib/下有个名为“pkgconfig” 的目录, 如图所示;
在这里插入图片描述
编译 wpa_supplicant 的时候是需要指定 libnl 的 pkgconfig 路径, 否则会提示“libnl-3.0” 或者“libnl-3.0.pc”找不到等错误。 编译完成以后就会在本目录下生成 wpa_supplicant 和 wpa_cli 这两个命令, 如下所示:
在这里插入图片描述
将编译好的 wpa_cli 和 wpa_supplicant 这两个文件拷贝到开发板根文件系统的/usr/bin 目录下, 拷贝完成
后, 可以测试一下这两个命令能否使用, 在终端下输入下面的命令:

wpa_supplicant -v

上面的命令查看一下 wpa_supplicant 版本号, 如果 wpa_supplicant 工作正常的话就会打印出版本号, 如图所示:
在这里插入图片描述
可 以 看 出 wpa_supplicant 的 版 本 号 输 出 正 常 , 说 明 wpa_supplicant 移 植 成 功 , 接 下 来 就 是 使 用wpa_supplicant 将开发板的 WIFI 链接到热点上, 实现 WIFI 上网功能。

三、配置udhcpc工具

1、udhcpc是自动获取ip地址用的,如果不配置好,则不能得到ip地址。

四、Ubuntu虚拟机配置NFS

1、安装NFS服务

	sudo apt install nfs-kernel-server

2、修改/etc/exports,配置可挂载目录,添加如下内容

	/home/book *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

3、充气NFS服务

	sudo /etc/init.d/nfs-kernel-server restart

3、自挂载检验,验证一下NFS可用

	sudo mount -t nfs -o nolock,vers=3 127.0.0.1:/home/book /home/myfiles
	ls  /home/myfiles

五、连接路由器

1、关闭eth0,打开wlan(关闭有线网络,打开wifi)

	ifconfig eth0 down
	ifconfig wlan0 down

2、扫描附近wifi

	iwlist wlan0 scan

3、wpa_supplicant联网
在使用 wpa_supplicant 命令之前, 现在开发板根文件系统的/etc 目录下创建一个 wpa_supplicant.conf 配置文件, 此文件用于配置要连接的 wifi 热点和 wifi 热点的密码。 比如我要连接到 “ XW” 这个热点上,wpa_supplicant.conf 文件内容如下所示:
在这里插入图片描述
第 4 行, ssid 是要连接的 WIFI 热点名字, 这里我要连接的是“ XW” 这个 wifi 热点。
第 5 行, psk 就是要连接的 WIFI 热点密码, 根据自己的实际情况填写即可。
注意, wpa_supplicant.conf 文件对于格式要求比较严格, “ =” 前后一定不能有空格, 也不要用 TAB 键来缩进, 比如第 4 行和 5 行的缩进应该采用空格, 否则的话会出现 wpa_supplicant.conf 文件解析错误。 最重要的一点, wpa_supplicant.conf 文件内容要自己手动输入, 不要偷懒复制粘贴。wpa_supplicant.conf 文 件 编 写 好 以 后 再 在 开 发 板 根 文 件 系 统 下 创 建 一 个“/var/run/wpa_supplicant” 目录, wpa_supplicant 工具要用到此目录, 命令如下:

	mkdir /var/run/wpa_supplicant -p

一切准备好以后就可以使用 wpa_supplicant 工具让 rtl8723 wifi 模块连接到热点上, 输入如下命令:

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

当 rlt8723 连接上 wifi 热点后有如下信息打印
在这里插入图片描述
当 进 行 测 试 时 有 可 能 会 打 印 很 多调试信息 ,导 致 不 能 正 常 操 作 ,修改源码文件drivers/net/wireless/rtl8723BU/include/autoconf.h, 将第 320 行#define CONFIG_DEBUG 语句注释掉, 这样在使用 rtl8723 wifi 模块时就不会有调试信息打印了。 如下图所示:
在这里插入图片描述
当连接到 WIFI 热点上以后会输出“wlan0: CTRL-EVENT-CONNECTED” 字样。 接下来就是最后一步了,
设置 wlan0 的 IP 地址, 这里使用 udhcpc 命令从路由器申请 IP 地址, 输入如下命令:

	udhcpc -i wlan0 //从路由器获取 IP 地址

IP 地址获取成功后, 如下图所示
在这里插入图片描述
上图可以看出, wlan0 获取 IP 地址成功, IP 地址为 192.168.1.84。 可以使用 ifconfig 命令查看 wlan0 网卡的
详细信息。

	ifconfig wlan0

接着就是ping虚拟机,ping通后即可尝试进行挂接

六、挂载虚拟机上某个目录

确保开发板可以 ping 通 Ubuntu 后,就可以通过 NFS 挂载 Ubuntu 中的某个目录。哪些目录呢?请查看 Ubutnu 的/etc/exports 文件。
假设 Ubuntu 的 IP 为: 192.168.1.100,在开发板上可以执行下面的命令挂载 Ubuntu 的/home/book 目录到开发板的/myfiles 目录:

	mount -t nfs -o nolock,vers=2 192.168.1.100:/home/book /myfiles

// 如果不成功,就把 vers=2 改为 vers=3 或 vers=4

	mount -t nfs -o nolock,vers=3 192.168.1.100:/home/book /myfiles

如果一切正常,你可以在 Ubuntu 上把文件放到/home/book 目录中,在开发板上可以从/myfiles目录中访问该文件。

猜你喜欢

转载自blog.csdn.net/BaoTTing/article/details/105469125