openWRT Ubuntu环境搭建及交叉编译工具制作与使用

First Post:

Last Update:

Word Count:
1k

Read Time:
4 min

Openwrt本身不支持直接编译C语言的,不支持GCC,因此,我们在Ubuntu下写好的代码,通过gcc编译后的可执行文件是不能直接在openWRT上运行的。

因此,我们需要制作基于openWRT的交叉编译工具 toolchain。

搭建开发环境

1.1 openWRT下载

下载Chaos Calmer (15.05)正式发行版

git clone -b chaos_calmer https://github.com/openwrt/openwrt

1.2 openWRT依赖安装

在编译openWRT之前,需要安装依赖,否则会自动停止进入make menuconfig。

一次性安装所需依赖组件,输入:

sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev subversion git-core gawk asciidoc libz-dev zlib1g-dev libssl-dev openssl

分步安装如下:

sudo apt-get install g++

sudo apt-get install libncurses5-dev

sudo apt-get install zlib1g-dev

sudo apt-get install bison

sudo apt-get install flex

sudo apt-get install unzip

sudo apt-get install autoconf

sudo apt-get install gawk

sudo apt-get install make

sudo apt-get install gettext

sudo apt-get install gcc

sudo apt-get install binutils

sudo apt-get install patch

sudo apt-get install bzip2

sudo apt-get install libz-dev

sudo apt-get install asciidoc

sudo apt-get install subversion

sudo apt-get install sphinxsearch

sudo apt-get install libtool

sudo apt-get install sphinx-common

sudo apt-get install openssl (新加的依赖库)

安装完成后需要重启终端

Feeds是OpenWRT环境所需要的软件包套件.比较重要的feeds有:

pacakges’:一些额外的基础路由器特性软件

‘LuCI’:OpenWRT默认的GUI

‘Xwrt’:另一种可选的GUI界面

./scripts/feeds update -a

./scripts/feeds install -a

1.3 openWRT toolchain编译

1.3.1 配置 menuconfig

cd openwrt

make menuconfig

进入下图所示的menuconfig配置界面,进行如下配置:

1、Target System

我手上的路由器CPU芯片是MT7620A,所以配置为 RT288x

2、Subtarget

配置为MT7620

3、Target Profile

配置为MT7620a EVB

4、Package the OpenWrt-based Toolchain

因为我们要制作toolchain交叉编译工具,所以这里通过click 空格键来切换到
“*”为选中状态

img

1.3.2 编译 Toolchain

配置完成后,保存并退出,然后输入命令编译:

1
2
3
[注意]本次编译过程中需要从国外站点下载所需的依赖文件,因此,编译之前必须挂载VPN来允许访问境外网站,且保证网络稳定,整个编译过程大概为2-4个小时。

make V=s

一切无错的情况下,会在
openwrt源码目录/bin/ramips/
目录下找到编译好的toolchain
OpenWrt-Toolchain-ramips-mt7620_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2

编译交叉编译工具链,有X86和X64之分,根据系统有关系,因此使用现有的toolchain的时候,注意区分系统。

编译成功后如下图所示:

img

1.3.3 安装 Toolchain

openWRT的交叉编译工具链需要安装到当前系统中,我使用的是Ubuntu 64,然后配置环境变量,才能使用。步骤如下:

1、解压toolchain

将交叉编译工具链解压到Ubuntu的“、opt”目录下,载openWRT的更目录下运行:

1
sudo tar jxvf ./bin/ramips/OpenWrt-Toolchain-ramips-mt7620_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2 -C /opt/
2、设置环境变量

执行 sudo gedit /etc/bash.bashrc打开文件,在文件最后添加如下配置:

1
2
3
4
5
export PATH=/opt/OpenWrt-Toolchain-ramips-mt7620_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin:$PATH



export STAGING_DIR=/~/workspace/openwrt/staging_dir

其中,
export STAGING_DIR配置的是STAGING路径,取决于你openWRT源码的路径。

保存后,执行如下命令:

1
source /etc/bash.bashrc
3、检查是否安装成功
1
执行命令:mipsel-openwrt-linux-gcc -v

安装toolchain,如下图所示:

img

上图中,Error:ld不用管。

1.3.4 Toolchain测试

1、编写hello.c

测试程序:hello.c

源码:

#include <stdio.h>

int main(void)

{

unsigned char i = 0;

while(1)

{

printf(“\n hello openWRT! %d\n”, i);

sleep(1);

}

return 0;

}

2、交叉编译

mipsel-openwrt-linux-gcc hello.c -o hello

生成可执行文件
hello

该可执行文件是试用openWRT的toolchain编译所得,是无法在Ubuntu上直接运行的,需要拷贝到openWRT里运行。

3、通过winSCP放到openWRT

用户名:root

密码:root

img

4、通过SSH远程登陆后执行

img

img

img

添加X可执行权限:

chmod 777 hello

执行./hello

img