Openwrt开发指南 第26章 编写应用程序交叉编译

描述

1 交叉编译环境简介

首先说一下什么是交叉编译:我们在 ubuntu 中写了一个程序,比如 main.c,然后使用 ubuntu 的编译器进行编译,生成的可执行文件自然可以在 ubuntu 中运行。但是生成的可执行文件可以在我们的开发板中能运行吗?答案当然是否定的,原因很简单,就是平台不同,芯片架构不同。那我们如何使得 ubuntu 编译出来的可执行文件在开发板上面运行呢,当然就要借助一些工具了,通过一些工具进行对程序编译,生成在开发板上可以运行的文件,那这些工具我们把它叫做交叉编译工具,把这种从一个平台开发另一个平台应用的方式称为交叉编译。

Toolchain 即交叉编译工具,要在 ubuntu 编译我们写的应用程序使得生成开发板可以执行的文件,必须有这一套工具才可以进行!

2 交叉工具的配置

首先,我们查看是否已经有交叉编译工具:

OpenWrt

显然没有Toolchain!

注意:在本节教程的附件里编者已经给出了交叉编译工具。

好的,配置OpenWrt 使得支持toolchain。在openwrt/目录下运行 make menuconfig,并且选中 toolchain:

OpenWrt

保存之后,编译 OpenWrt:

$make V=99

编译完成之后,我们可以查看是否有交叉编译工具包的存在。

OpenWrt

OK,解压交叉编译工具包:解压完成后,然后我们cd 到解压完成后的工具包中,再进入该工具包中的另一个目录,找到 bin 文件夹,同样cd 进去 bin 文件夹。

好了,现在我们就拥有交叉编译工具了,我们要把交叉编译工具的路径保存在一个环境变量中,这样做是为了,我们编译程序时会根据这个环境变量找到交叉编译工具的位置。以 root 的权限编辑如下文件:

#vi /etc/environment

注意:也可用sudo vi /etc/environment。

编辑前该文件的内容如下(我的ubuntu):

OpenWrt

好的,增加我们交叉编译工具路径后(注意以冒号分隔)。为了让这个环境变量起作用,我们重启 ubuntu!

【注意】还可如下配置。

  1. 拷贝OpenWrt-Toolchain-ramips-rt305x_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686.tar.bz2到虚拟机中的/opt/目录下
  2. 解压OpenWrt-Toolchain-ramips-rt305x_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686.tar.bz2, 用命令

sudo tar -xvf OpenWrt-Toolchain-ramips-rt305x_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686.tar.bz2 //必须用超级用户模式

  1. 编辑~/.bashrc文件, vi ~/.bashrc

在文件最后增加一行

export PATH=$PATH: /opt/OpenWrt-Toolchain-ramips-rt305x_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin

保存退出

  1. 运行 source ~/.bashrc 让文件生效
  2. 测试

方法一:

在命令行下输入 mipsel-o 然后按tab键看会不会自动补全

方法二:

输入:mipsel-openwrt-linux- -v

OpenWrt

3 测试交叉编译环境

重启完成后,我们编写一个非常简单的应用程序:

#include < stdio.h >
int main ()
{
    printf(“hello world!n”);
    return 0;
}

然后使用交叉编译工具进行编译!

OpenWrt

编译完成后生成可执行文件:

OpenWrt

然后我们尝试在ubuntu中运行可执行文件 main:

OpenWrt

很显然,这个可执行文件无法在 ubuntu 上运行,但是,却可以在我们开发板中运行,我们把可执行文件移动到开发板中进行执行:

OpenWrt

注意:main的权限应为777,否则无法运行。

OpenWrt

【注意】交叉编译工具链编译的时报没有STAGING_DIR,它在ubuntu上的/home/farsight/chaos_calmer/staging_dir,在ubuntu上键入下面命令

export STAGING_DIR=/home/farsight/chaos_calmer/staging_dir

或者放入.bashrc中,

$vi ~/.bashrc

在最后一行添加export STAGING_DIR=/home/farsight/chaos_calmer/staging_dir即可

$ source ~/.bashrc

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分