准备工作
官网的安装教程很详细了,这里就不说了
该项目的端口映射配置在run-emux-docker
文件中,默认的端口映射如下
host |
emux |
20080 |
80 |
20443 |
443 |
28080 |
8080 |
24433 |
4433 |
9999 |
9999 |
模拟新固件
准备文件
这部分官网教程说的也差不多了
需要注意的是,一定得把固件根目录打包成tar.bz2
格式的压缩包
1
|
tar -vcjf squashfs-root.tar.bz2 ./squashfs-root/
|
最后文件层次结构如下
1
2
3
4
5
6
7
8
9
10
|
/emux/files/emux/RT-AC68U# tree
.
├── config
├── kernel
│ └── zImage-2.6.39.4-vexpress -> ../../template/kernel/zImage-2.6.39.4-vexpress
├── mtdparts
├── nvram.ini
├── preload
│ └── libnvram-armx.so
└── squashfs-root.tar.bz2
|
再重新构建并启动即可
1
2
|
./build-emux-volume
./run-emux-docker
|
nvram 修复
有时候,调用 nvram 的函数构成也不一样,厂家多会自己 DIY 这部分内容
这时我们就需要反汇编固件中管理 nvram API 的库
emux 也有这部分的源码仓库地址,如下
构建 emux 程序的交叉编译工具包
step 1:修复交叉编译工具
首先把交叉编译工具包解压出来,因为该工具链不是本地编译的
所以对于一些工具会有错误的动态链接,我们需要修改其中 cc1 工具的动态链接库
路径如下
1
|
/emux-buildroot-toolchains/arm-unknown-linux/usr/libexec/gcc/arm-unknown-linux-uclibcgnueabi/4.3.6
|
起初 cc1 和 cc1plus 工具的动态链接库均有损坏,这里就只对 cc1 作出改动
1
2
3
4
5
6
|
# ldd ./cc1
linux-vdso.so.1 (0x00007fffc8af2000)
libmpfr.so.4 => not found
libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f65e1373000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f65e1181000)
/lib64/ld-linux-x86-64.so.2 (0x00007f65e1418000)
|
能看到该工具是找的本机的动态链接库,我们需要利用 patchelf 修改一下
1
2
3
|
patchelf --set-rpath \
/emux-buildroot-toolchains/arm-unknown-linux/usr/lib \
./cc1
|
之后就能正常使用了
1
2
3
4
5
6
|
# ldd ./cc1
linux-vdso.so.1 (0x00007ffca8dd9000)
libmpfr.so.4 => /emux-buildroot-toolchains/arm-unknown-linux/usr/lib/libmpfr.so.4 (0x00007fa480ee7000)
libgmp.so.10 => /emux-buildroot-toolchains/arm-unknown-linux/usr/lib/libgmp.so.10 (0x00007fa480c79000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa480a68000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa481145000)
|
step2:编译自定义的 nvram 库文件
从 custom_nvram 项目中选一个 C 文件作为模板,本文用的是custom_nvram_r6250.c
该文件中虽然也写了如何对其进行编译,但是没有对 undefined 的符号做出约束
可能会导致使用的人无法注意到没有链接到 dl 库,所以我们这里做一下补充
在其中加上对libdl.so
的链接即可
1
2
3
4
5
|
/emux-buildroot-toolchains/arm-unknown-linux/usr/bin/arm-linux-gcc \
-shared \
-fPIC \
-ldl \
-o libnvram.so custom_nvram_r6250.c
|