STA模式

前面已经使用/config/wifi/ssw01bInit.sh加载了模块驱动,并且wlan0网卡已存在。现在我们通过wpa_supplicant工具(在/config/wifi目录下)来连接wifi热点。
修改/appconfigs/wpa_supplicant.conf,填入wifi热点信息:

# vi /appconfigs/wpa_supplicant.conf

当然,在连接之前先看看能否搜索到这个热点:

# /config/wifi/iwlist wlan0 scan

可以看到已经搜索到这个热点,接下来尝试连接:

# /config/wifi/wpa_supplicant -D nl80211 -i wlan0 -c /appconfigs/wpa_supplicant.conf -B &

提示没有相关库,这些库位于/config/wifi/目录下,我们配置一下LD_LIBRARY_PATH:

# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/config/wifi
# /config/wifi/wpa_supplicant -D nl80211 -i wlan0 -c /appconfigs/wpa_supplicant.conf -B &

看起来是连接上了,但ifconfig发现没有分配到IP,这是因为没有dhcp服务:

这里我先手动给它设置一个IP,并测试是否能否和同一路由器下的设备通信:

# ifconfig wlan0 192.168.1.134
# ping 192.168.1.166

可以看到能够正常通信,接下来给它设置DNS和网关,然后测试能否上网:

# route add default gw 192.168.1.1
# echo nameserver 114.114.114.114 > /etc/resolv.conf
# ping www.baidu.com

好的,现在可以上网了。为了让它在连接热点时自动获取IP、DNS及网关,我们需要添加dhcp服务,当然,这个服务可以从buildroot获得:

# cd buildroot-2020.05/
# ARCH=arm make menuconfig

保存一下buildroot配置:

# cp .config ./configs/ssd20x_defconfig -f

重新编译buildroot:

# make BR2_JLEVEL=4

编译完成后,可以看到dhcp服务已经添加进来了:

# ls output/target/etc/init.d

接下来就是和之前一样,把rootfs.tar.gz重新打包并更新,但有一点比较麻烦的是,之前的rootfs.tar.gz包含我们新增/修改的文件(U盘/SD卡自动挂载),需要确定是在buildroot刚刚编译出来的rootfs.tar的基础上添加我们新增/修改的文件,还是在rootfs.tar.gz的基础上从buildroot拷贝服务(文件)过来?考虑到以后可能还会添加一些其他的服务,并且我们新增的文件变化不会太大,因此选择第一种方式,在rootfs.tar的基础上添加我们新增/修改的文件。
首先我们需要把新增的文件放到一个地方(这里我放在project/image/rootfs_add_files目录),然后rootfs.mk中实现拷贝工作:

# cd ..
# mkdir project/image/rootfs_add_files
# cd project/image/rootfs
# tar -xvf rootfs.tar.gz
# cp rootfs/sdcard/ rootfs/udisk/ ../rootfs_add_files/ -rf
# mkdir ../rootfs_add_files/etc/
# mkdir ../rootfs_add_files/etc/init.d
# cp rootfs/etc/hotplug/ ../rootfs_add_files/etc/ -r
# cp rootfs/etc/init.d/S10mdev ../rootfs_add_files/etc/init.d

# vi ../configs/i2m/rootfs.mk

接下来把buildroot生成的rootfs.tar重新打包并替换rootfs.tar.gz:

# rm rootfs -rf
# mv rootfs.tar.gz rootfs.tar.gz_bk
# cp ../../../buildroot-2020.05/output/images/rootfs.tar ./
# mkdir rootfs
# tar -xvf ./rootfs.tar  -C ./rootfs/
# tar -cvf rootfs.tar.gz ./rootfs

重新编译固件:

# cd ../../../
# ./Release_to_customer.sh  -f nand -p ssd201

这个错误我们之前的做法是删除libstdc++.so.6.0.25-gdb.py,但是这个文件可能有用(直接删除它的做法似乎欠妥),因此,我们只需要在strip时,把它筛除即可:

# vi project/image/configs/i2m/rootfs.mk

同时,把/config/wifi添加到LD_LIBRARY_PATH中:

# vi project/image/configs/i2m/rootfs.mk

再重新编译固件:

# ./Release_to_customer.sh  -f nand -p ssd201

这次没有错误了,给板子更新固件,系统启动后,可以看到dhcp服务已经开启了:

# ps | grep dhcp

接下来,开始wifi连接:

# /config/wifi/ssw01bInit.sh
# ifconfig wlan0 up
# vi /appconfigs/wpa_supplicant.conf
# /config/wifi/wpa_supplicant -D nl80211 -i wlan0 -c /appconfigs/wpa_supplicant.conf -B &
# ifconfig wlan0
# route
# cat /etc/resolv.conf
# ping www.baidu.com

可以看到dhcp服务已经正常工作了。


文档更新时间: 2021-09-15 16:22   作者:Aeeditor