嵌入式linux下wifi网卡的使用(二)——应用程序iw编译
首先编译iw,
Iw支持两种加密/认证方式。第一种是OPEN/OPEN 第二种是WEP/WEP
在网上下载iw源码,发现iw的编译需要依赖libnl库(这个库是为了方便应用程序使用netlink借口而开发的一个库)什么是netlink:netlink套接字是用以实现用户进程与内核间进行通信的一种特殊的进程间通信,也是网络应用程序与内核通信的最常用的借口
在嵌入式软件开发的过程中,通常需要很多的开源软件的编译及其使用,经过了这个久的开发,现在结合这几个实例谈谈软件编译移植的过程,以及debug的过程
首先查看目录下是否有configure这个文件,可以得知这个目录下有这个文件,有这个文件后,在linux下交叉编译的一个万能方法就是
./configure -–host=arm-linux --prefix=$PWD/tmp
然后进行make,通常开源软件都不会一帆风顺的编译过,十分恶心,只能消停的debug,编译这个libnl出现错误
GEN route/pktloc_syntax.c
make all-am
make[2]: Entering directory `/home/wifi/iw/libnl-3.2.23/lib'
CC addr.lo
addr.c:1027: error: 'AF_RDS' undeclared here (not in a function)
addr.c:1033: error: 'AF_CAN' undeclared here (not in a function)
addr.c:1034: error: 'AF_TIPC' undeclared here (not in a function)
addr.c:1038: error: 'AF_ISDN' undeclared here (not in a function)
addr.c:1039: error: 'AF_PHONET' undeclared here (not in a function)
make[2]: *** [addr.lo] 错误 1
make[2]: Leaving directory `/home/wifi/iw/libnl-3.2.23/lib'
make[1]: *** [all] 错误 2
make[1]: Leaving directory `/home/wifi/iw/libnl-3.2.23/lib'
make: *** [all-recursive] 错误 1
可以吧这些错误放在Google搜索下
自己看这些错误应该就是一些宏没有被定义,那就自己定义呗
Vim ./lib/addr.c +1027
在哪里能找到这个宏的定义呢?实际上这些头文件大都来自于内核中,在内核中搜索然后拷贝后发现可以了make
Make install
然后看到当前目录中的tmp目录下已经有编译出来的文件了
etc include lib sbin share
接下来要把include目录中的头文件放在交叉编译链的目录中
cp * -fr /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/
库文件
cp * -rf -d /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/
动态的库文件也需要拷贝到网络系统的lib目录下
cp *so* -d /home/S5-driver/lesson8/rootfs/lib/
到这里,这个开源的应用库就被我们编译结束了。
解压.tar.gz文件用xzf
解压.tar.bz2用xjf
解压iw进行入目录,没有configure文件,那么只能修改makefile
将makefile中的CC改为arm-linux-gcc
出错:
#如果这个变量被定义了才会定义下面的变量
ifeq ($(NL31FOUND),Y)
CFLAGS += -DCONFIG_LIBNL30
LIBS += -lnl-genl
NLLIBNAME = libnl-3.1
endif
#变量未定义的情况下才会打印这句话,什么时候会被定义,往前看
76:ifeq ($(NLLIBNAME),)
$(error Cannot find development files for any supported version of libnl)
Endif
再往上看下这个宏
其实我们用的libnl的版本是3.11所以只能选择3.x这项,
NL3xFOUND := $(shell $(PKG_CONFIG) --atleast-version=3.2 libnl-3.0 && echo Y)
而这句话对用的shell语言只能在PC机上运行,不能在开发板上运行,所以直接让
NL3xFOUND=y
再进行编译又出现了另外的一些错误
找不到头文件,因为复制的时候
cp * -fr /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/
这个命令应该在./tmp/include/libnl3/目录下执行
更改后继续进行编译
出错
info.c:493: error: implicit declaration of function 'htole16'
再网上找到这个函数自己定义
#define htole16(x) ((((uint16_t)(x))<<8) | (((uint16_t)(x))>>8)) & 0xffff
再执行make,编译成功,成功出现iw这个应用程序。将这个程序复制到根文件系统的bin目录下,这个东西就是个wifi的命令了
嵌入式linux下wifi网卡的使用(二)——应用程序iw编译的更多相关文章
- 嵌入式linux下wifi网卡的使用(四)——应用程序sub_supplicant编译
有readme先看看readme看看有没有编译的方法 里面告诉我们安装时可能会依赖某些库事实证明会依赖openssl库,之前也使用过openssl 这个文件中有个defualtconfig,先用它做. ...
- Linux下双网卡绑定(bonding技术)
Linux网卡绑定探析 2013-08-20 15:39:31 现在很多服务器都自带双千兆网口,利用网卡绑定既能增加网络带宽,同时又能做相应的冗余,目前应用于很多的场景.linux操作系统下自带的 ...
- Linux下修改网卡IP、DNS和网关
Linux下修改网卡IP和网关 建议通过终端字符方式下来修改 一.修改IP地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOO ...
- kali Linux下wifi密码安全测试(1)虚拟机下usb无线网卡的挂载 【转】
转自:http://blog.chinaunix.net/uid-26349264-id-4455634.html 目录 kali Linux下wifi密码安全测试(1)虚拟机下usb无线网卡的挂载 ...
- Linux下查看网卡驱动和版本信息
Linux下查看网卡驱动和版本信息 查看网卡生产厂商和信号 查看基本信息:lspci 查看详细信息:lspci -vvv # 3个小写的v 查看网卡信息:lspci | grep Ethernet 查 ...
- linux下一个网卡配置多个ip【虚拟ip】
Linux下配置网卡ip别名何谓ip别名?用windows的话说,就是为一个网卡配置多个ip.什么场合增加ip别名能派上用场?布网需要.多ip访问测试.特定软件对多ip的需要...and so on. ...
- linux下Oracle11g RAC搭建(二)
linux下Oracle11g RAC搭建(二) 一.安装前配置 网络的配置 IP占用測试 进入windows下.运行cmd,使用ping命令验证网段是否被占用. 注:用哪个网段都行,一定保证不要被其 ...
- 嵌入式 Linux下永久生效环境变量bashrc
嵌入式 Linux下永久生效环境变量bashrc 1) .bashrc文件 在linux系统普通用户目录(cd /home/xxx)或root用户目录(cd /root)下,用指令ls -al可以看到 ...
- Linux下多网卡同网段多IP网络分流设定方法
Linux下多网卡同网段多IP网络分流设定方法 -- :: 标签:Linux下多网卡同网段多IP网络分流设定方法 当服务器需要较高的网络流量时,在其它资源不造成瓶颈的情况下无疑会用到多网卡. 第1选项 ...
随机推荐
- 为PowerApps和Flow,Power BI开发自定义连接器
作者:陈希章 发表于 2017年12月20日 前言 我在之前用了几篇文章来介绍新一代微软商业应用平台三剑客(PowerApps,Microsoft Flow,Power BI),相信对于大家会有一种跃 ...
- 运行期以索引获取tuple元素-C++17
//运行期以索引获取tuple元素-C++17 //需支持C++17及以上标准的编译器,VS2017 15.5.x.CodeBlocks 16.01 gcc 7.2 //参见:http://purec ...
- 自动化运维工具——puppet详解(二)
一.class 类 1)什么是类? 类是puppet中命名的代码模块,常用于定义一组通用目标的资源,可在puppet全局调用: 类可以被继承,也可以包含子类: 具体定义的语法如下: class NAM ...
- [Servlet&JSP] 初识ServletContext
ServletContext是整个Web应用程序运行后的代表对象,能够通过ServletConfig的getServletContext()方法来取得,之后就能够利用ServletContext来取得 ...
- 设置应用栏(Setting Up the App Bar)
今天星期五,刚从体育场打完球回来,洗了洗脚.明天还要继续上班,也是非常艰难.近期我的小腰有点不舒服,就早点睡觉歇息. 所以今天就简单的翻译一篇Android官方站点上的文章,我会加一些补充. 原文地址 ...
- Android 通知栏Notification的整合 全面学习 (一个DEMO让你全然了解它)
在android的应用层中,涉及到非常多应用框架.比如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架.通知机制,ActionBar框架等等. ...
- 在Laravel中使用swoole来取代nginx作为http服务器
1.是什么限制Laravel框架的速度? Laravel框架启动的时候需要加载很多文件,再加上其出了名的生态环境好,所以在开发过程中我们就会发现有非常多的已经造好的轮子,这也就使得Laravel的一次 ...
- All-In-One方式-安装openstack
ALL-IN-ONE安装openstack******************************************************************************* ...
- java.util.ConcurrentModificationException异常排查
java.util.ConcurrentModificationException对于这个异常我们一般会认为是在遍历list的时候对这个list做了add,remove等修改操作造成的,最近在线上 ...
- c#值类型与引用类型区别
值类型对象的两种表示方式:未装箱和已装箱,引用类型总是处于已装箱 值类型从System.ValueType派生.该类型提供了与System.Object相同方法,但System.ValueType重写 ...