分享

使用交叉编译编译在OpenWRT上运行的程序

 云将东游 2015-03-31

首先下载OpenWrt-SDK-Linux-i686-1.tar.bz2包,解压缩

tar jxf  OpenWrt-SDK-Linux-i686-1.tar.bz2

为了方便,可以做个链接

ln -s /root/OpenWrt-SDK-Linux-i686-1/staging_dir_mipsel/bin/mipsel-linux-uclibc-gcc /usr/bin/mepsel-gcc

然后使用

/root/OpenWrt-SDK-Linux-i686-1/staging_dir_mipsel/bin/mipsel-linux-uclibc-gcc

来编译你的程序就可以了,有Make文件的,可以修改Make文件的CC行,使用mepsel-gcc编译。

有人跟我问,说链接的时候可能出错,我编译的都是简单的程序,实际上对于大型源码,需要链接的,请参考网上一个达人的编译办法

Debian 下编译OpenWrt 和使用搭建交叉编译环境(buildroot)

编译OpenWrt后也就有了交叉编译需要的工具链(ToolChain),工具链其实在官方DownLoad是可以直接获取到的.
我们是在虚拟机下做这些的,首先给Debian更新一下sshd以便我们能方便操作。

su -
注销光盘源(vi /etc/apt/sources.list 然后在光盘源前加个#)
apt-get update
apt-get install ssh openssh-server
更新OpenWrt编译环境所需的软件包。
apt-get install build-essential bison flex zlib1g-dev libncurses5-dev subversion quilt intltool ruby fastjar unzip gawk

可以开始了。
cd /usr/src
svn co svn://svn.openwrt.org/openwrt/branches/backfire/
经过一段时间后,从官方SVN仓库获得用于编译最新发行版backfire的脚本。
接下来用普通用户权限来完成吧。
在root权限下先chown 用户  /usr/src/backfire
ctrl + D 退出root

开始下载源码和编译(友情提醒:过程漫长,需要有高速的带宽,建议在睡觉前执行.)
cd backfire
make menuconfig
选择好你要编译的硬件目标和所带的软件,rg100-a aa只要把前几个选项里的bcm 63xx勾上就好了。
make V=99
于是开始了漫长的下载源码和编译过程,一觉醒来再看看吧。
最后你会发现在/usr/src/backfire/生成了一个叫做staging_dir大约99M的文件夹,表明bcm 63xx的OpenWrt和相对工具链已经编译好了。

执行以下命令,进入mips编译环境
(注意,注释掉的可以不用输.要特别注意,涉及的路径和内核一定要对!!不要跟我说编译出来的是X86的,那就是你环境变量都没设对,自己分析一下../staging_dir下的toolchain目录是哪个,不要抄我这个,我这个是RG100A的,且源码路径在/usr/src/backfire...)
  1. export PATH=$PATH:/usr/src/backfire/staging_dir/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin
  2. #export AR=/usr/src/backfire/staging_dir/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin/bin/mips-openwrt-linux-ar
  3. #export AS=/usr/src/backfire/staging_dir/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin/mips-openwrt-linux-as
  4. #export LD=/usr/src/backfire/staging_dir/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin/mips-openwrt-linux-ld
  5. #export NM=/usr/src/backfire/staging_dir/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin/mips-openwrt-linux-nm
  6. export CC=mips-openwrt-linux-gcc
  7. export CPP=mips-openwrt-linux-cpp
  8. export GCC=mips-openwrt-linux-gcc
  9. export CXX=mips-openwrt-linux-g++
  10. export RANLIB=mips-openwrt-linux-uclibc-ranlib
  11. export ac_cv_linux_vers=2.6.32
  12. export LDFLAGS="-static"
  13. export CFLAGS="-Os -s"
复制代码
内核路径在:/usr/src/backfire/build_dir/linux-brcm63xx/linux-2.6.32.27
然后我们开始编译锐捷:
tar -zxf mentohust-0.3.1.tar.gz
cd mentohust-0.3.1
./configure --host=mips-openwrt-linux   --disable-encodepass --disable-notify --prefix=/tmp
make
make install
cd /tmp
ls
这就是OpenWrt/backfire用于bcm 63xx版的锐捷,传到rg100-a试试吧,运行之前记得到官网Download下libpcap的ipk在路由上opkg install libpcap*.ipk后,mentohust才能找到网卡。
Debian 下编译OpenWrt 和使用搭建交叉编译环境(buildroot)

编译OpenWrt后也就有了交叉编译需要的工具链(ToolChain),工具链其实在官方DownLoad是可以直接获取到的.
我们是在虚拟机下做这些的,首先给Debian更新一下sshd以便我们能方便操作。

su -
注销光盘源(vi /etc/apt/sources.list 然后在光盘源前加个#)
apt-get update
apt-get install ssh openssh-server
更新OpenWrt编译环境所需的软件包。
apt-get install build-essential bison flex zlib1g-dev libncurses5-dev subversion quilt intltool ruby fastjar unzip gawk

可以开始了。
cd /usr/src
svn co svn://svn.openwrt.org/openwrt/branches/backfire/
经过一段时间后,从官方SVN仓库获得用于编译最新发行版backfire的脚本。
接下来用普通用户权限来完成吧。
在root权限下先chown 用户  /usr/src/backfire
ctrl + D 退出root

开始下载源码和编译(友情提醒:过程漫长,需要有高速的带宽,建议在睡觉前执行.)
cd backfire
make menuconfig
选择好你要编译的硬件目标和所带的软件,rg100-a aa只要把前几个选项里的bcm 63xx勾上就好了。
make V=99
于是开始了漫长的下载源码和编译过程,一觉醒来再看看吧。
最后你会发现在/usr/src/backfire/生成了一个叫做staging_dir大约99M的文件夹,表明bcm 63xx的OpenWrt和相对工具链已经编译好了。

执行以下命令,进入mips编译环境
(注意,注释掉的可以不用输.要特别注意,涉及的路径和内核一定要对!!不要跟我说编译出来的是X86的,那就是你环境变量都没设对,自己分析一下../staging_dir下的toolchain目录是哪个,不要抄我这个,我这个是RG100A的,且源码路径在/usr/src/backfire...)
  1. export PATH=$PATH:/usr/src/backfire/staging_dir/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin
  2. #export AR=/usr/src/backfire/staging_dir/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin/bin/mips-openwrt-linux-ar
  3. #export AS=/usr/src/backfire/staging_dir/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin/mips-openwrt-linux-as
  4. #export LD=/usr/src/backfire/staging_dir/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin/mips-openwrt-linux-ld
  5. #export NM=/usr/src/backfire/staging_dir/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin/mips-openwrt-linux-nm
  6. export CC=mips-openwrt-linux-gcc
  7. export CPP=mips-openwrt-linux-cpp
  8. export GCC=mips-openwrt-linux-gcc
  9. export CXX=mips-openwrt-linux-g++
  10. export RANLIB=mips-openwrt-linux-uclibc-ranlib
  11. export ac_cv_linux_vers=2.6.32
  12. export LDFLAGS="-static"
  13. export CFLAGS="-Os -s"
复制代码
内核路径在:/usr/src/backfire/build_dir/linux-brcm63xx/linux-2.6.32.27
然后我们开始编译锐捷:
tar -zxf mentohust-0.3.1.tar.gz
cd mentohust-0.3.1
./configure --host=mips-openwrt-linux   --disable-encodepass --disable-notify --prefix=/tmp
make
make install
cd /tmp
ls
这就是OpenWrt/backfire用于bcm 63xx版的锐捷,传到rg100-a试试吧,运行之前记得到官网Download下libpcap的ipk在路由上opkg install libpcap*.ipk后,mentohust才能找到网卡。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多