libnl移植到ARM Linux

时间:2021-08-10 08:48:16

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 16.04
  
  arm-linux-gnueabi-gcc version 4.6.3

  开发环境不一定是我这配置,只要是Linux操作系统,和ARM对应的交叉工具链就可以。

目标环境

  中兴ZX902C(Cotex A9)

  内核版本:3.0.1

移植步骤

  1.从libnl官网下载libnl-1.1.4源码。
  
  2.执行下面命名解压缩:

tar zxvf libnl-1.1.4.tar.gz

  3.进入刚解压的目录cd libnl-1.1.4,执行下面指令,做相应的配置:

./configure --prefix=$(pwd)/__install --enable-shared --enable-static

其中--prefix=$(pwd)/__install指定了编译出来的库存放的路径,我一般将其放在当前目录下的__install目录下。当然,很多人都放在了/usr/local/arm/目录下,但我认为这样不仅会污染系统文件系统,在管理上也不方便,时间长了也忘记了是哪个库的文件了,用的时候又要重新编译。

  4.执行下面命令,编译库:

make CC=/home/public/zx902/arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc

其中CC=/home/public/zx902/arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc指定交叉工具链。

  5.执行下面命令,将编译好的库文件拷贝到指定目录:
  

make install

如下图所示在当前目录下的__install目录下生成了头文件和库文件
libnl移植到ARM Linux

  6.include下文件在编译程序的时候会用到,而lib下在程序运行时会用到。故在移植hostapd的时候需要指定include的路径,需要将lib下文件拷贝到开发板中。