前情提要
- 树莓派(以下简称 rpi) 镜像是通过的 编译。
- 生成 通过 命令写进 sd 卡中
- 我以前没有处理过与无线相关的事情。这一次,我希望树莓派可以使用无线(客户端)
- 由于采用 buildroot ,以前没有处理过,所以驱动基本上是模块,没有正式编译到核心
做过的事
- 将编译内核 mac80211 选项加入 ()
- 没有作用
- 看无线芯版
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
下面有设备了。
- 接着查询网上 相关工具及连接方法
- 通过 ** 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
,这是无线驱动器可能不会编译成内核,而是作为模块加载
- 重启,可以,自动连接
补充
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 自己的系统 ,系统是通过 编译可能与原始系统不同。
- 如果在
iwlist wlan0 scan
当返回没有结果时,这种情况可以首先考虑不止一个 wlan
它的嘴可能有效,可以试试。
相关文件事例
ctrl_interface=/var/run/wpa_supplicant ap_scan=1 update_config=1 network={ ssid="yourwifissid" psk="yourpassword" }
# 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 $?