1:google 下载rtl8188eus的网卡驱动源码
https://github.com/quickreflex/rtl8188eus
2.解压缩下载的文件,把驱动文件rtl8192_8188eus_linux_xxx.tar.gz(xxx是版本号)添加到要编译的内核树里面去
(1)假定你的内核位置为/root/linux-kernel,解压缩驱动文件,并且把解压缩后的驱动文件夹名改为rtl8192eus。
(2)把改好名字的驱动文件夹rtl8192eus复制到/root/linux-kernel/drivers/net/wireless/下。
(3)修改/root/linux-kernel/drivers/net/wireless/下的Makefile和Kconfig文件,在Makefile添加obj -$(CONFIG_RTL8192EU) += rtl8192eu/,在Kconfig下添加 source "drivers/net/wireless/rtl8192cu/Kconfig"。
(4)make menuconfig 配置内核,在Device Drivers/Network device support/Wireless LAN下选中8192cu,编译内核。
kernel/drivers/net/wireless/Makefile
这里的CONFIG_RTL8188EU名字必须是 8188eus/Konfig里面的指定的名字
kernel/drivers/net/wireless/Kconfig下添加 source "drivers/net/wireless/rtl8192cu/Kconfig
3. (1)make menuconfig,将8188eus配置编译进内核:
在Device Drivers/Network device support/Wireless LAN下选中Realtek 8188E USB WiFi
另外 根据其它网友的经验需要将下面配置也添加进去,防止编译出错
进入内核目录,make menuconfig
[*] Networking support —>
[*] Wireless —>
Device Drivers —> [*] Network device support —> Wireless LAN —> [*] Wireless LAN (IEEE 802.11) <*> IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)
保存退出后,vi .Config
3 (2) make uImage 成功 烧录到开发板 插入USB wifi
ifconfig wlan0 up ,
4.
(1)应用软件测试 https://code.google.com/archive/p/starterkit-org/downloads
下载软件:
(2)tar -xvf wireless_tools.30.rtl.tar.gz
vi Makefile (没有看到configure 文件)
sudo make DESTDIR=$PWD/tmp install (可以不用修改)
nfs 30000000 192.168.2.102:/work/nfs_root/uImage_wifi
/ # mount -t nfs -o nolock,vers=2 192.168.2.102:/work/app/wireless_8188eus/wirel
ess_tools.30.rtl /mnt 成功挂载后,可以执行命令!
如何设置上电启动挂载文件系统:
set bootargs console=ttySAC0,115200 init=linuxrc root=/dev/nfs nfsroot=192.168.2.102:/work/nfs_root/fs_mini_mdev_new ip=192.168.2.5:192.168.2.102:192.168.2.1:255.255.255.0::eth0:off
###############################################################################################
关于-/bin/sh:xx(命令) not found 的几种原因:
1./bin/目录下没有这个命令;
2.bin/目录有这个命令,只是执行权限不够,或者程序执行权限不够;
3.程序需要的静态库或者动态库没有;
解决办法:
原因一的解决方法:安装busy box将busy box支持的命令安装到文件系统的bin目录下;(只要安装了busy box它会自动加载命令到bin目录下,这个你懂的,若不懂请看我的博文《根文件系统的制作》)
原因二的解决方法:在/bin/目录下找到对应的命令,修改其权限为777;具体操作: chmod 777 xx(命令) 【附加:在编写执行脚本文件时不能运行也大多是没有修改脚本权限的问题(命令其实就是一个特殊的脚本)】
原因三的解决方法:
(1)最“高效”的解决方法:用命令:arm-linux-readelf -d xxx(目标文件/命令) 查看xxx使用的动态库
如图:我的iwlist命令使用的动态库是libiw.so.29 、libm.so.6 和libc.so.6
于是我便去交叉编译器所在目录/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib下的动态库中寻找所需的上面三个库libiw.so.29 、libm.so.6 和libc.so.6 ,并复制到根文件系统的lib目录下:
(注意:这里我使用交叉编译器的版本为4.3.2的版本所以目录4.3.2有所不同即到/usr/local/arm/(编译器版本)/arm-none-linux-gnueabi/libc/armv4t/lib下的动态库中寻找)
(2)最“2”最笨的方法:把/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib下的所有动态库都拷贝到根文件系统的lib目录下;(但是这种方法在嵌入式开发里面无意增加了成本,拷贝了一些不必要的动态库文件,增大了根文件系统的体积)
参考这个后,我发现是库文件也在相应的目录,权限也打开了,就是iw list 一直-/bin/sh:xx(命令) not found ,分析后发现
我用的文件系统是jz2440的移植的系统,而我copy的库文件 实际是在ubuntu的网络文件里面,所以可以尝试挂载网络文件系统来解决!
set bootargs console=ttySAC0,115200 init=linuxrc root=/dev/nfs nfsroot=192.168.2.102:/work/nfs_root/fs_mini_mdev_new ip=192.168.2.5:192.168.2.102:192.168.2.1:255.255.255.0::eth0:off
iw command | Description |
---|---|
iw dev wlp5s0 link | 获取连接状态 |
iw dev wlp5s0 scan | 扫描可用热点 |
iw dev wlp5s0 set type ibss | 设置操作模式为ad-hoc |
iw dev wlp5s0 connect your_essid | 连接到开放网络 |
iw dev wlp5s0 connect your_essid 2432 | 连接到开放网络的指定通道 |
iw dev wlp5s0 set power_save on | 启用省电模式 |
可能iphone没有设置wep加密方式导致,无法验证这个功能
下面验证wpa加密方式:
b.1 先编译它的依赖libopenssl ----》该文章有记录
b.2 要有一个配置文件.config
tar xzf wpa_supplicant-2.0.tar.gz
cd wpa_supplicant-2.0/wpa_supplicant/
cp defconfig .config
修改.config加上一行: CONFIG_LIBNL32=y
修改Makefile:
CC=arm-linux-gcc
make 出现错误:/usr/bin/ld: cannot find -lnl-genl-3 和下面编译 hostapd 出现的error现象一样的!
分析原因:root@book-virtual-machine:/work/app/wireless_8188eus/libnl-3.2.23/tmp/include/libnl3# cp netlink -rf /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
make DESTDIR=$PWD/tmp install
################################################################################
(1)解压配置tar xzf hostapd-2.0.tar.gz
(2)
cd hostapd-2.0/hostapd
cp defconfig .config
vi .config // 添加一行: CONFIG_LIBNL32=y
vi Makefile // CC=arm-linux-gcc
make
make install DESTDIR=$PWD/tmp
cp tmp/usr/local/bin nfs...
操作:make 后出现
../src/drivers/driver_nl80211.c:22:31: fatal error:netlink/genl/genl.h: No such file or directory
原因:缺少libnl
解决方法:下载并编译安装libnl
tar xzf libnl-3.2.23.tar.gz
cd libnl-3.2.23/
./configure --host=arm-linux --prefix=$PWD/tmp
make // 修改lib/addr.c添加宏 出错
make install
lib/addr.c添加宏 从内核里面找到:
安装完成libnl后 再次make hostpad 仍然出现之前的错误,
1.怀疑编译的libnl库是不是没有放到相应的目录,导致环境变量里面没有这个文件
那就把所有libnl-3.2.23/incude目录下的文件copy 到环境变量的目录下:
2.重新编译 hostpad,出现新的错误
编译openssl
编译openssl:
http://www.openssl.org/
http://www.openssl.org/source/
tar xzf openssl-1.0.1d.tar.gz
cd openssl-1.0.1d/
./config shared no-asm --prefix=$PWD/tmp
修改Makefile:
CC= arm-linux-gcc
AR= arm-linux-ar $(ARFLAGS) r
RANLIB= arm-linux-ranlib
MAKEDEPPROG= arm-linux-gcc
make 发现出现莫名奇妙的 编译错误,后面定位到没有加sudo 权限
make install 出现错误:
rm -f /usr/bin/pod2man 重新编译sudo make clean /sudo make + 重新安装即可sudo make install!
安装成功后!!!!
3.再次编译 之前的hostapd ,出现之前错误提示
../src/crypto/tls_openssl.c:17:25: fatal error: openssl/ssl.h: No such file or director ,明明已经安装了openssl ,为什么还是找不到ssh.h
root@book-virtual-machine:/work/app/wireless_8188eus/hostapd-2.0# vi src/crypto//tls_openssl.c
发现ssl.h是在openssl目录下,所以将openssl文件夹copy到/usr/local/include目录下
再次编译,错误消失,但出现下面的问题:
解决办法:
1.# gcc -libnl-3.so 查询库文件 libhdf5.so 是否能在搜索路径中找到。
若安装了软件,找到了库文件的路径。但是依然会提示上述错误。则表示gcc的搜索路径不包含该库文件所在的路径。将库文件所在的路径加入到搜寻路径中的方法为:
gcc中的默认头文件搜索路径
- For C: gcc -xc -E -v -
- 没有看到/usr/local/lib 库