libnl的移植
libnl简介
libnl是为了方便应用程序使用netlink接口而开发的一个库。这个库为原始netlink消息传递以及不同的netlink,family专用接口提供了一个统一的接口。libnl2.0的API与libnl1.0的API并不兼容。如果您的应用程序不做相应调整,将可能导致不可用。
移植libnl1.1是hostapd的移植的一部分。hostapd使用的libnl库为1.x版本,2.0版本的API与1.0的并不兼容,故这里移植1.1版本,但2.0移植方式相同。
开发环境
Ubuntu 18.04
arm-linux-gnueabi-gcc version 4.8.3
开发环境不一定是我这配置,只要是Linux操作系统,和ARM对应的交叉工具链就可以。
目标环境
讯为,三星4412(Cotex A9)
内核版本:4.6.1
移植步骤
- 从libnl官网下载libnl-1.1.4源码。
- 执行下面命名解压缩:
tar zxvf libnl-1.1.4.tar.gz - 进入刚解压的目录cd libnl-1.1.4,执行下面指令,做相应的配置:
sudo ./configure --host=arm-linux --prefix=$(pwd)/__install --enable-static --enable-shared CC=/usr/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc
其中--prefix=$(pwd)/__install指定了编译出来的库存放的路径,我一般将其放在当前目录下的__install目录下。注意,这里的编译器指定,必须使用绝对路径,否则会报错
这里可能出现如下错误
configure: WARNING: bison not found. Please install before continuing.
configure: WARNING: flex not found. Please install before continuing.
configure: error: Required packages are missing. Please install them and rerun ./configure
解决方法
sudo apt-get install bison
sudo apt-get install flex
配置成功后,看到如下输出
NOTE
There have been some changes starting with 3.2 regarding where and how libnl
is being installed on the system in order to allow multiple libnl versions
to be installed in parallel:
- Headers will be installed in ${prefix}/include/libnl3, therefore
you will need to add "-I/usr/include/libnl3" to CFLAGS
- The library basename was renamed to libnl-3, i.e. the SO names become
libnl-3.so., libnl-route-3.so, etc.
- libtool versioning was assumed, to ease detection of compatible library
versions.
If you are using pkg-config for detecting and linking against the library
things will continue magically as if nothing every happened. If you are
linking manually you need to adapt your Makefiles or switch to using
pkg-config files.
-------------------------------------------------------------------------------
- 执行
make编译:
这可能会遇到这样的错误
/usr/bin/ld: lib/.libs/libnl_3_la-addr.o: Relocations in generic ELF (EM: 40)
/usr/bin/ld: lib/.libs/libnl_3_la-addr.o: Relocations in generic ELF (EM: 40)
/usr/bin/ld: lib/.libs/libnl_3_la-addr.o: Relocations in generic ELF (EM: 40)
/usr/bin/ld: lib/.libs/libnl_3_la-addr.o: Relocations in generic ELF (EM: 40)
/usr/bin/ld: lib/.libs/libnl_3_la-addr.o: Relocations in generic ELF (EM: 40)
/usr/bin/ld: lib/.libs/libnl_3_la-addr.o: Relocations in generic ELF (EM: 40)
/usr/bin/ld: lib/.libs/libnl_3_la-addr.o: Relocations in generic ELF (EM: 40)
/usr/bin/ld: lib/.libs/libnl_3_la-addr.o: Relocations in generic ELF (EM: 40)
lib/.libs/libnl_3_la-addr.o: error adding symbols: File in wrong format
collect2: error: ld returned 1 exit status
Makefile:2842: recipe for target 'lib/libnl-3.la' failed
make: *** [lib/libnl-3.la] Error 1
原因
配置那步(3.)没有做对,几乎可以肯定是编译器没有配置对,导致编译出错.
- 执行下面命令,将编译好的库文件拷贝到先前
prefix指定的__install目录中:
make install
成功后,在lib目录下看到下列文件
yang@yang:/usr/local/arm/libnl$ ls
bin etc include lib share
yang@yang:/usr/local/arm/libnl$ ls lib/
libnl libnl-genl-3.so libnl-route-3.a
libnl-3.a libnl-genl-3.so.200 libnl-route-3.la
libnl-3.la libnl-genl-3.so.200.25.0 libnl-route-3.so
libnl-3.so libnl-idiag-3.a libnl-route-3.so.200
libnl-3.so.200 libnl-idiag-3.la libnl-route-3.so.200.25.0
libnl-3.so.200.25.0 libnl-idiag-3.so libnl-xfrm-3.a
libnl-cli-3.a libnl-idiag-3.so.200 libnl-xfrm-3.la
libnl-cli-3.la libnl-idiag-3.so.200.25.0 libnl-xfrm-3.so
libnl-cli-3.so libnl-nf-3.a libnl-xfrm-3.so.200
libnl-cli-3.so.200 libnl-nf-3.la libnl-xfrm-3.so.200.25.0
libnl-cli-3.so.200.25.0 libnl-nf-3.so pkgconfig
libnl-genl-3.a libnl-nf-3.so.200
libnl-genl-3.la libnl-nf-3.so.200.25.0
- include下文件在编译程序的时候会用到,而lib下在程序运行时会用到。故在移植hostapd的时候需要指定include的路径,需要将lib下文件拷贝到开发板中。
lib中的可执行文件,libnl-3.so.200.25.0、libnl-genl-3.so.200.25.0放到开发板的/lib目录,
使用file filename可以查看文件版本信息,来确定是否编译正确,使用file命令可以看到如下信息
libnl-3.so.200.26.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, with debug_info, not stripped
libnl-genl-3.so.200.26.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, with debug_info, not stripped
OKey 它被编译为ARM版本,我们可以将它放到我们的ARM开发板中了
放到开发板的的/lib目录,并创建软链接
ln -s libnl-3.so.200.25.0 libnl-3.so
ln -s libnl-3.so.200.25.0 libnl-3.so.200
ln -s libnl-genl-3.so.200.25.0 libnl-genl-3.so
ln -s libnl-genl-3.so.200.25.0 libnl-genl-3.so.200
可参考:
http://www.linuxfromscratch.org/blfs/view/svn/basicnet/libnl.html
libnl的移植的更多相关文章
- hostapd移植与使用
介绍 版本:hostapd-2.5.tar.gz 下载地址:http://w1.fi/releases/hostapd-2.5.tar.gz 依赖:libnl openssl 移植 libnl移植 w ...
- android平台编译IW
不知道怎么编译IW,所以就搜索网络上的博客http://blog.csdn.net/jksl007/article/details/16862435 首先,iw依赖于libnl库,而目前android ...
- wpa supplicant 移植
最近移植wifi,WIFI芯片使用rtl8723.在文件系统生成了设备节点.需要移植工具进行测试: iwconfig:没有密码的或者wep加密的wifi,使用iwconfig就已经够用. wpa_su ...
- wpa_supplicant_8_ti hostapd wpa_supplicant TI 官方的wpa_supplicant hostapd 移植到linux
在移植 wpa_supplicant_8_ti 的时候碰到很多头文件找不到.然后参考了下面的博客 http://blog.csdn.net/penglijiang/article/details/85 ...
- 移植wpa_supplicant2.5及界面配置wifi(原创)
JP5G开发机上需要图形界面配置 wifi网络,为此移植了wpa_supplicant2.5. 1.参考wpa_supplicant-2.5移植与使用l http://blog.csdn.net/hk ...
- 3.1 wifi网卡RT3070在S3C2440的移植和使用
学习目标:熟悉RT3070在S3C2440的移植和使用,以及其中的相关工具的安装和使用: 一.配置内核选择WIFI驱动 1. 将usb wifi插到电脑,在ubuntu使用命令:# lsusb 查看w ...
- FL2440 rt3070模块ap模式移植
---------------------------------------------------------------------------------------------------- ...
- 基于全志a33-vstar开发板的ap6210WiFi模块移植
可以去链接看更详细的,第一次用博客,这个编辑方式太不友好了. 文档:全志a33--系统移植--ap6210WiFi模块移?..链接:http://note.youdao.com/noteshare?i ...
- MVVM框架从WPF移植到UWP遇到的问题和解决方法
MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...
随机推荐
- lucas定理(模板题题解)
题目很简单,很暴力,就是组合数,没有其他的. 但是直接暴力会炸wow 我们可以利用Lucas定理来分解字问题. Lucas定理:C(n,m)(mod p)=C(n%p,m%p)*C(n/p,m/p)( ...
- 问题 L: 「Usaco2005 Feb」竞选划区O(∩_∩)O 纯属的暴力
题目描述 农场被划分为5x5的格子,每个格子中都有一头奶牛,并且只有荷斯坦(标记为H)和杰尔西(标记为J)两个品种. 如果一头奶牛在另一头上下左右四个格子中的任一格里,我们说它们相连. 奶牛要大选了. ...
- 大数据之路day01_2--记事本与EditPlus编写Hello World并且运行
在上一节我们成功的安装JAVA并且将其环境配置成功,接下来我们来编写第一个java程序——Hello World 1.利用记事本编写代码,利用命令行来编译运行 (1)新建记事本,(文件名).java后 ...
- Jenkins集群下的pipeline实战
关于Jenkins集群 在<快速搭建Jenkins集群>一文中,我们借助docker快速搭建了Jenkins集群,今天就在这个集群环境中创建pipeline任务,体验Jenkins集群下的 ...
- 深入理解计算机系统 第二章 信息的表示和处理 part2
上一周遗留问题的解决 问题:原码.反码.补码是只针对有符号数吗?无符号数有没有这三种编码方式? 得到的答案:对于无符号数,原码.反码和补码是一致的 进一步,由于有符号数是以补码的形式存储在计算机中 ...
- Maven系列第6篇:生命周期和插件详解,此篇看过之后在maven的理解上可以超越同级别90%的人!
maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能. 这是maven系列第6篇. 整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部 ...
- [设置] notepad++快捷设置之——用Finger Text实现自动补全代码
1.我参考的设置方法:https://www.e-learn.cn/content/qita/2368404 和 http://www.itdaan.com/blog/2017/09/13/f7 ...
- 【编程题与分析题】Javascript 之继承的多种实现方式和优缺点总结
[!NOTE] 能熟练掌握每种继承方式的手写实现,并知道该继承实现方式的优缺点. 原型链继承 function Parent() { this.name = 'zhangsan'; this.chil ...
- set map symbol
set 声明 let set = new Set();即创建了一个空的set 赋值 let set = new Set(['张三','李四','王五']); 特性 似于数组,但它的一大特性就是所有元素 ...
- RHEL7.2 安装Eclipse-oxygen Hadoop开发环境
1 Eclipse-oxygen下载地址 http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/re ...