Linux 学习记录2 驱动配置
1. 驱动的使用:
1.1 加载驱动:
1.1.1 把驱动放入根文件目录
1.1.2 使用insmod或modprobe来加载驱动:
insmod 驱动
modprobe 驱动#对于一个第一次加载的驱动可以用depmod一下
1.2 查看挂载的驱动:
ismod
1.3 卸载驱动:
rmmod 模块名
1.4 查看设备号:
cat /proc/devices
WIFI驱动配置
1.配置主线内核
进入内核文件:
make ARCH=arm licheepi_zero_defconfig
make ARCH=arm menuconfig
找到divice drivers选项,然后找到staging drivers,配置为以下图片(按y选中,n取消):
2. 编译内核和模块:
编译内核:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16 INSTALL_MOD_PATH=out modules
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16 INSTALL_MOD_PATH=out modules_install
编译设备树: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
3. 配置根文件系统:
make menuconfig#配置根文件
进行以下配置:
4.编译根文件系统:
sudo make
5.烧录:
按照上一篇文章进行烧录
完成后进行以下步骤:
1.将linux内核文件夹drivers/staging/rtl8723bs/内的 r8723bs.ko文件移动到根文件系统的root文件夹中。可直接打开usb进行操作。
2.去官网官网下载rtl8723bs_nic.bin文件放入到root文件夹下。
最终结果如下(那个sh文件是后面内容会讲解怎么创建):
启动Linux驱动:
连接数据线后,登录系统。
使用:ls命令看是否有以上两个文件
1.将rtl8723bs_nic.bin放入驱动文件夹:
mkdir -p /lib/firmware/rtlwifi/ #创建放置文件夹
cp rtl_8723bs_nic.bin /lib/firmware/rtlwifi/ #拷贝至wifi驱动文件夹
insmod r8723bs.ko #加载驱动
ifconfig wlan0 up #开启驱动
ifconfig #查看驱动
若打印出:
# ls
r8723bs.ko rtl8723bs_nic.bin wifi_connect.sh
# insmod r8723bs.ko
[ 21.427128] r8723bs: module is from the staging directory, the quality is unknown, you have been warned.
[ 21.453689] RTL8723BS: module init start
[ 21.457651] RTL8723BS: rtl8723bs v4.3.5.5_12290.20140916_BTCOEX20140507-4E40
[ 21.464823] RTL8723BS: rtl8723bs BT-Coex version = BTCOEX20140507-4E40
[ 21.472057] pnetdev = (ptrval)
[ 21.506962] RTL8723BS: rtw_ndev_init(wlan0)
[ 21.513071] RTL8723BS: module init ret =0
#
# ifconfig wlan0 up
[ 49.117865] rtl8723bs: acquire FW from file:rtlwifi/rtl8723bs_nic.bin
[ 49.277466] random: crng init done
# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wlan0 Link encap:Ethernet HWaddr CC:79:CF:6F:67:EB
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
则说明成功挂载WiFi成功。
2.配置连接WiFi:
1.修改interfaces文件:
vi /etc/network/interfaces #使用vi编辑文件
vi基本操作:
使用i对该文件进行修改 ,然后按esc后,:w对文件进行保存, :q进行退出。
修改文件为以下内容:
# Configure Loopback
auto lo
iface lo inet loopback
# 增加wlan0描述
auto wlan0
iface wlan0 inet dhcp
2.修改wpa_supplicant.config文件,添加连接的wifi信息:
vi /etc/wpa_supplicant.conf #编辑文件
修改文件为以下内,修改wifi ssid和密码:
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ap_scan=1
network={
ssid="wifi_name"
scan_ssid=1
key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
pairwise=TKIP CCMP
group=CCMP TKIP WEP104 WEP40
psk="wifi_password"
priority=5
}
3.创建一个socket通信的目录
mkdir -p /var/run/wpa_supplicant
4.连接WiFi
wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlan0
若提示以下,说明连接成功,如果不成功可以继续使用上面命令继续连接:
# [ 880.338484] RTL8723BS: rtw_set_802_11_connect(wlan0) fw_state = 0x00000008
[ 880.723789] RTL8723BS: start auth
[ 880.729711] RTL8723BS: auth success, start assoc
[ 880.744700] RTL8723BS: rtw_cfg80211_indicate_connect(wlan0) BSS not found !!
[ 880.751857] RTL8723BS: assoc success
[ 880.760803] RTL8723BS: send eapol packet
[ 880.778103] RTL8723BS: send eapol packet
[ 880.786962] RTL8723BS: set pairwise key camid:4, addr:62:ad:f4:bb:60:26, kid:0, type:AES
[ 880.797964] RTL8723BS: set group key camid:5, addr:62:ad:f4:bb:60:26, kid:1, type:AES
4.获取IP地址:
# udhcpc -i wlan0
结果如下:
# udhcpc -i wlan0
udhcpc: started, v1.29.2
udhcpc: sending discover
udhcpc: sending select for 172.20.10.13
udhcpc: lease of 172.20.10.13 obtained, lease time 85536
deleting routers
adding dns 172.20.10.1
5.可使用ping命令看是否网络连通
# ping www.baidu.com
PING www.baidu.com (183.232.231.174): 56 data bytes
64 bytes from 183.232.231.174: seq=0 ttl=55 time=39.431 ms
64 bytes from 183.232.231.174: seq=1 ttl=55 time=45.033 ms
64 bytes from 183.232.231.174: seq=2 ttl=55 time=43.003 ms
64 bytes from 183.232.231.174: seq=3 ttl=55 time=57.488 ms
64 bytes from 183.232.231.174: seq=4 ttl=55 time=38.929 ms
使用ctr+c可结束ping命令,以上结果说明网络连通。
--- www.baidu.com ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 38.929/44.776/57.488 ms
#
6.开机自动启动WiFi驱动:
可将以上命令放入一个sh命令中:
示例如下:
vi wifi_connect.sh #创建一个sh命令
内容如下:
#!/bin/sh
insmod /root/r8723bs.ko
ifconfig wlan0 up
wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlan0
sleep 3s
udhcpc -i wlan0
echo "wifi_init finish!"
开机时直接使用 sh wifi_connect.sh 对wifi进行配置且连接。
使用iw库扫描WiFi:
1.iw库的交叉编译:
1.获取libnl库(编译依赖此库):
http://www.infradead.org/~tgr/libnl/files/
2.编译安装libnl库:
解压libnl库
tar -xvf libnl-3.2.25.tar.gz
cd libnl-3.2.25
mkdir work#创建一个文件夹存安装后的数据
./configure --host=arm-linux-gnueabihf --prefix=/root/home/libnl-3.2.25/work
# host后为交叉编译器名称prefix后为路径
make
make install#成功后会产生以下文件夹
3.下载iw 5.3源文件:
https://mirrors.edge.kernel.org/pub/software/network/iw/
4.编译iw库:
tar -xvf iw-5.3.tar.gz
cd iw-5.3/
#该地址为上面添加的work文件夹下的/lib/pkgconfig
export PKG_CONFIG_PATH=/root/home/libnl-3.2.25/work/lib/pkgconfig:$PKG_CONFIG_PATH
make CC=arm-linux-gnueabihf-gcc#交叉编译器 成功会在iw-4.0生成iw
5.将生成的iw放入板子的根文件目录中:
可以直接拖入根文件的root目录再使用:
cp iw /usr/bin #文件夹下
6.测试iw函数:
insmod r8723bs.ko
ifconfig wlan0 up
iwlist wlan0 scanning #扫描WiFi
6.1 iw相关命令:
iw list #列出WIFI网卡的性能
iw dev wlan0 scan #扫描可连接WIFI AP
iw wlan0 connect dswei #连接到不加密的WIFI,WIFI名字为dswei
iw wlan0 connect iPhone keys d:0:1112222222 #连接WIFI,WIFI名为iPhone,d: default, 0: 第0个密码