BLOG
Enjoy when you can, and endure when you must.
利用 OpenWrt SDK 编译自定义软件

之前尝试了不少 VPN 的使用,不过都仅限于本机。那么问题就来了,这样无论怎么玩都无法避免多台设备需要进行多次配置的问题。如果有一台设备能统领该任务,其余设备只需要通过它进行一次中转,这样岂不就高大上了很多?由此具体的想法就是:VPN 或 ShadowSocks + 自动选路,且设备本身支持路由功能。

其实,目前还是有不少所谓的智能路由器能实现上述功能。但通过曾经对一些设备的试用,感觉并不大好。当然最主要的问题还是没!设!备!正当此时,我灵机一动想到朋友那有一个闲置的树莓派,而 OpenWrt 也正好提供了支持。于是乎又可以来一番折腾了。这才符合我的性格!

如何在树莓派上运行 OpenWrt 以及 VPN 或 ShadowSocks 的具体配置方式并不是本文的主题,这些文章在网上数不胜数,Google 一下即可找到一些写得非常详细的。这里主要是想写一下关于利用 SDK 来对 package 进行编译以适应自己的设备。或者说白了,因为所要使用到的 shadowsocks-libev 和 ChinaDNS 需要和设备的 CPU 匹配,而网上已编译好来适配树莓派 bcm2708 芯片的 ipk 不太容易找到,因此想想还是来自己编译或许还会更省心一点。

因此本文就以编译 shadowsocks-libev-spec 为例说一说手动编译的流程。首先说一下我的系统环境:CentOS 6.4。接下来进入正题:

第一步:下载对应 CPU 的 SDK 包,如 OpenWrt-SDK-15.05.1-brcm2708-bcm2708_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64。这可以在 openwrt 的官网找到;

第二步:解压并进入到 SDK 根目录,如:

tar -xjf OpenWrt-SDK-15.05.1-brcm2708-bcm2708_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64.tar.bz2
cd OpenWrt-SDK-15.05.1-brcm2708-bcm2708_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64

第三步:下载 shadowsocks-libev(这里使用的是 git 直接从 github 上拉取):

git clone https://github.com/shadowsocks/openwrt-shadowsocks.git package/shadowsocks-libev

第四步:执行 make menuconfig,选择 Network -> shadowsocks-libev-spec,保存并退出,如下图所示:

第五步:执行 make package/shadowsocks-libev/compile V=99,进行编译;

第六步:完成后,在 bin/brcm2708/packages/base 中可以看到编译得到的 shadowsocks-libev-spec_2.4.6-1_brcm2708.ipk;

第七步:拷贝至 openwrt 中用 opkg 进行安装即可。

 

不过在编译过程中,我刚开始遇到了点问题,大致报如下错误:

...
configure: loading site script /tmp/OpenWrt-SDK-15.05.1-brcm2708-bcm2708_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64/include/site/arm
checking for arm-openwrt-linux-gcc... ccache_cc
checking whether the C compiler works... no
configure: error: in `/tmp/OpenWrt-SDK-15.05.1-brcm2708-bcm2708_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64/build_dir/target-arm_arm1176jzf-s+vfp_uClibc-0.9.33.2_eabi/shadowsocks-libev/openssl/shadowsocks-libev-2.4.6':
configure: error: C compiler cannot create executables
See `config.log' for more details
make[2]: *** [/tmp/OpenWrt-SDK-15.05.1-brcm2708-bcm2708_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64/build_dir/target-arm_arm1176jzf-s+vfp_uClibc-0.9.33.2_eabi/shadowsocks-libev/openssl/shadowsocks-libev-2.4.6/.configured_yyn] Error 77
...

如果在编译时遇到问题,可以查看根据提示在 config.log 中查看一下错误详情。这里我遇到的主要问题是没有安装 ccache,通过 yum 安装之后即编译成功。

COMMENTS
LEAVE COMMNT