路由器 A731-406CTL-C01_R04 源码编译

最近入手了一个RG100A-BA,因为要使用ADSL功能,所以放弃考虑OpenWRT系列固件。

发现网上盛传的一个路由器固件可以刷给RG100A-BA,而且还比较稳定,并且还是开源的。

所以下载了一份源码,打算自己编译玩玩。折腾了几天,终于搞定,写篇文章记录一下~

提示: 在32位linux系统中可能遇到的问题要比64位系统中要少一些。

源码下载: A731-406CTL-C01_R04.tar.gz

编译环境: Ubuntu 15.04 x64

 

安装环境的配置:

下载并解压缩源码包,可以使用 consumer_install 脚本来进行安装环境的配置。

或者直接解压缩 uclibc-crosstools-gcc-4.4.2-1.tar.bz2 到 /opt/toolchains/uclibc-crosstools-gcc-4.4.2-1 目录下。

默认 bcm963xx_4.06L.02_consumer.tar.gz 也应该解压到 /opt/ 下面的,不过解压到别处也可以正常编译。

解压后 bcm963xx_4.06L.02_consumer.tar.gz 后进入到真正的源码根目录里面,因为原版的Makefile会验证make和系统kernel的版本,不一样会提示错误,导致无法继续进行编译。所以需要修改一下Makefile的几处代码。

在第39行:

all: make_version_check kernel_version_check all_postcheck1

make_version_checkkernel_version_check删除即可:

all: all_postcheck1

修改完成后保存,可以进行编译操作了。

 

编译路由器固件:

打开终端并进入源码根目录,执行命令:

make PROFILE=AR-5382u_CTL

可用的配置,可以进入targets目录下面查看,不过好像只有AR-5382u_CTL是可用的。

等待一段时间,可能会出现以下错误:

fakeroot: preload library not found, aborting.

这是因为fakeroot脚本中默认的fakeroot路径在 /opt/bcm963xx/hostTools/fakeroot 

当源码没有解压到 /opt/bcm963xx 就会出现这种情况。

对于源码路径不对应的情况下,可以通过修改源码根目录下的Makefile来解决。

第662第665行:

cd $(TARGETS_DIR); $(HOSTTOOLS_DIR)/fakeroot/fakeroot ./buildFS2

修改成下面代码即可:

cd $(TARGETS_DIR); $(HOSTTOOLS_DIR)/fakeroot/fakeroot -l $(HOSTTOOLS_DIR)/fakeroot/.libs/libfakeroot.so -f $(HOSTTOOLS_DIR)/fakeroot/faked ./buildFS2

修改完成后重新回到源码根目录,重新make:

make PROFILE=AR-5382u_CTL

 

在编译userspace目录下的代码时,可能因为缺少 uclibc-crosstools-gcc-4.2.3-3 交叉工具链而中断编译过程。

可以下载EVG2000_v2.2.0.12_with_toolchain_src.tar.bz2.zip文件,并提取其中的交叉工具链解压到 /opt/toolchains/uclibc-crosstools-gcc-4.2.3-3 目录下。

 

如果在64位系统下,还可能出现以下错误:

ld.so: object 'libfakeroot.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32)

解决方法: 切换到 hostTools/fakeroot 目录下,运行:

make clean
autoreconf -ivf
make

出现这种错误的原因是,fakeroot的库和Makefile是预构建于i686的,64位linux加载存在一些问题,只要重新配置生成Makefile再make就可以了。

 

同样,修改完成后还需要重新回到源码根目录,重新make:

make PROFILE=AR-5382u_CTL

等待一会儿~~~如果终端输出以下提示,说明构建成功了~

-e Done! Image AR-5382u_CTL has been built in /****/images.
-e Done! Release Files AR-5382u_CTL have been put in /****/targets/AR-5382u_CTL/release.

 

其它错误以及解决方案:

错误提示:

error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

原因:

64位linux缺少32位运行库。

解决方法:

sudo apt-get install lib32stdc++6

 

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据