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服务已经正常工作了。