编译iw工具

从源码编译 iw

交叉编译工具

  • aarch64-linux-gnu-gcc

源码下载地址 (website)

libnl : https://www.infradead.org/~tgr/libnl/

iw : https://git.kernel.org/pub/scm/linux/kernel/git/jberg/iw.git/

从源码编译 libnl

  1. 从官网下载源代码文件:

    咕咕搜索 libnl 即可找到官网 https://www.infradead.org/~tgr/libnl/ 之后下载最新版的源码即可

    wget https://www.infradead.org/~tgr/libnl/files/libnl-3.2.25.tar.gz
    
    tar -xf libnl-3.2.25.tar.gz 
    
  2. 配置编译选项, 生成编译文件

    可以在源代码的路径下找到 configure 可执行文件, 这就和源码编译 qemu 类似了, 先使用 --help 查看一下支持的选项

    (base) yukikaze@LAPTOP-SQ5KB8RN:~/code/tools/libnl-3.2.25$ ./configure --help
    

    我能用到的就下面这些, 一个指示编译生成的结果的存放位置, 一个指示选择哪个编译器进行编译

    • –prefix=PREFIX install architecture-independent files in PREFIX [/usr/local]

    • –host=HOST cross-compile to build programs to run on HOST [BUILD]

    因此在当前路径下新建一个目录 build 用来存放编译结果, 配置编译文件的命令为, 该命令中要求必须是绝对文件路径

    ./configure --prefix=/home/yukikaze/code/tools/libnl-3.2.25/build --host=aarch64-linux-gnu
    
  3. 编译, 移动编译结果, 查看

    make
    

    在编译的过程中会报很多 warning , 不需要处理

    make install # 会将编译结果移动至 `/home/yukikaze/code/tools/libnl-3.2.25/build/` 路径下 
    

    移动过程基本不会出错

    cd build
    
    ls
    etc  include  lib  sbin  share
    

    可以在 lib 路径下查看到动态运行库, 能看到这些动态运行库也是动态链接的, 连接到了 aarch64 的相关库中

    (base) yukikaze@LAPTOP-SQ5KB8RN:~/code/tools/libnl-3.2.25/build/lib$ readelf -d libnl-3.so
    
    Dynamic section at offset 0x1dd98 contains 28 entries:
    Tag        Type                         Name/Value
    0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
    0x0000000000000001 (NEEDED)             Shared library: [ld-linux-aarch64.so.1]
    0x000000000000000e (SONAME)             Library soname: [libnl-3.so.200]
    0x000000000000000c (INIT)               0x7718
    0x000000000000000d (FINI)               0x15094
    0x0000000000000019 (INIT_ARRAY)         0x2ce30
    0x000000000000001b (INIT_ARRAYSZ)       40 (bytes)
    0x000000000000001a (FINI_ARRAY)         0x2ce58
    

从源码编译 iw

前面的 libnl 是为这里编译 iw 提供一些库的支持。从 linux kernel 的源码仓库可以下载到最新的 iw 源码

git clone git://git.kernel.org/pub/scm/linux/kernel/git/jberg/iw.git

修改一下 Makefile 文件, 静态编译 iw

这里的静态编译指的是静态链接 libnl 库, 但是依然会动态链接到 libnl 所需的动态链接库 aarch64 的那些

# ... 前面有很多, 直接搜 CFLAGS 后添加即可 
CFLAGS += -static

添加环境变量, 该添加仅在当前bash中生效, 该环境变量指向刚刚编译的 libnl 结果中的 pkgconfig 路径

export PKG_CONFIG_PATH=/home/yukikaze/code/tools/libnl-3.2.25/build/lib/pkgconfig:$PKG_CONFIG_PATH

编译

make CC=aarch64-linux-gnu-gcc 

编译成功后结尾会有如下提示

(base) yukikaze@LAPTOP-SQ5KB8RN:~/code/tools/iw$ make CC=aarch64-linux-gnu-gcc 
 CC   iw

查看编译结果 iw 文件, 可以看到其为动态链接的格式, 需要存在 /lib/ld-linux-aarch64.so.1 文件, 在使用的时候注意将动态链接文件移动至 busybox 制作的根目录文件系统的对应位置即可。

(base) yukikaze@LAPTOP-SQ5KB8RN:~/code/tools/iw$ file iw
iw: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=0809a0c2e944438ebdde170230733b6e501e3875, for GNU/Linux 3.7.0, with debug_info, not stripped

来源链接:https://www.cnblogs.com/polariszg/p/18640706

请登录后发表评论

    没有回复内容