从源码编译 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
-
从官网下载源代码文件:
咕咕搜索
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
-
配置编译选项, 生成编译文件
可以在源代码的路径下找到
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
-
-
编译, 移动编译结果, 查看
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
没有回复内容