您的位置:首页 > 编程语言 > ASP

一次raspberrypi 的 wifi 玩弄过程

2018-02-06 00:00 441 查看

前情提要

树莓派(以下简称 rpi) 的镜像是通过 buildroot 编译出来的。

生成 sdcard.img 通过 dd 命令写进 sd 卡中

之前没有处理过跟无线相关的东西,本次希望让树莓派可以使用无线(客户端)

由于采用 buildroot ,之前未处理,所以驱动基本都是模块,没有正式编译进内核

做过的事

编译内核时将 mac80211 选项加入 (Networking Support -> Wireless -> cfg80211)

没有作用

在看了无线芯版是
broadcom
之后,在内核编译中搜索这个关键字。

同时想到是不是模块没有加载进去,于是在
/lib/modules
目录下去找,在
kernel/net/wireless
目录下找到了 lib80211 相关的,都
modprobe
进去,没有效果。

又在
kernel/drivers/net/wireless
中找到了
brcm
相关的驱动。

同时重新编译的内核,将
Device Drivers -> Network device support -> PHY Device support and infrastructure
里面的
Broadcom PHYs
选中。并且将相关的都改成了编译到内核中而不是模块。

重启之后,
ifconfig
没有东西,但是在
/sys/class/ieee80211
下面有phy0设备了。

接着查询网上 wifi相关工具和连接方法

通过 ** iw dev wlan0 scan**可以扫描可连接的无线。
iwlist [dev] scan
命令也一样可以。

提示没有开启
wlan0
,于是
ifconfig wlan0 up
再搜索,能找到

开始连接,连接使用
wpa_supplicant
命令,直接输入此命令就可以得到提示,提示的最后一行有现成的用法
wpa_supplicant -B -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf


wpa_supplicant.conf
是写好可以连接的无线有哪些,可以自行搜索用法。

为了让它自动连接工可以用
ifconfig
看到,要加入到
/etc/network/interfaces
配置文件中。并体配置文件的写法在网上搜索即可,或者照配置文件里面的
eth0
来写

写好之后
/etc/init.dS30network restart
即可,就会在
ifconfig
命令中看到。

再重启系统,一看还是有问题。主要在启动顺序上有问题

创建启动文件
S30wpa_supplicant
用于使能
wlan0
,启动
wpa_supplicant


同时加入
modprobe brcmfmac
,这是broadcom无线的驱动,可能是没有编译到内核中,要作为模块加载

再重启,可以了,自动连接了

补充

mac80211_hwsim
只是内核提供的无线模拟驱动

brcmfmac
是broadcom的无线驱动,加载此驱动才有效果

加载此驱动时,需要在
/lib/firmware/brcm
目录 下有
brcmfmac43430-sdio.bin, brcmfmac43430-sdio.txt
文件存在,这些文件需要在
linux-firmware
下去提取

加载后在
/sys/class/ieee80211
目录下会生成形如
phy*
的设备名,到此说明有效

要想利用此wifi 来连接无线网络,需要启动 wpa_supplicant,具体用户可去查询,然后
ifup wlan0
即可启动连接进行dhcp 地址获取,需要先配置
/etc/network/interfaces
,见下面示例文件

总结

之所以有这些问题,是因为不是采用 rpi 自己的系统 ,系统是通过 buildroot编译而来,跟原生的系统可能会有些不同的地方。

如果在
iwlist wlan0 scan
的时候返回没有结果,这种情况可以先考虑是不是不止一个
wlan
口,有可能生效的是其的口,可以尝试。

相关文件事例

/etc/wpa_supplicant.conf


ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
update_config=1

network={
ssid="yourwifissid"
psk="yourpassword"
}


/etc/network/interfaces


# cat /etc/network/interfaces
# interface file auto-generated by buildroot

auto lo
iface lo inet loopback

#auto eth0
iface eth0 inet dhcp
pre-up /etc/network/nfs_check
wait-delay 15

auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant.conf


/etc/init.d/S30wpa_supplicant


# cat /etc/init.d/S30wpa_supplicant
#!/bin/sh
#
# Start the wpa_supplicant....
#

dev=wlan0

case "$1" in
start)
printf "Starting wpa_supplicant: "
modprobe brcmfmac
ifconfig $dev up
/usr/sbin/wpa_supplicant -B -Dnl80211 -i$dev -c/etc/wpa_supplicant.conf
[ $? = 0 ] && echo "OK" || echo "FAIL"
;;
stop)
printf "Stopping wpa_supplicant: "
killall wpa_supplicant
[ $? = 0 ] && echo "OK" || echo "FAIL"
;;
restart|reload)
"$0" stop
"$0" start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac

exit $?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Raspberry Pi linux wifi