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

1 交叉编译环境简介首先说一下什么是交叉编译:我们在 ubuntu 中写了一个程序,比如 main.c,然后使用 ubuntu 的编译器进行编译,生成的可执行文件自然可以在 ubuntu 中运行。但是生成的可执行文件可以在我们的开发板中能运行吗?答案当然是否定的,原因很简单,就是平台不同,芯片架构不同。那我们如何使得 ubuntu 编译出来的可执行文件在开发板上面运行呢,当然就要借助一些工具了,通过一些工具进行对程序编译,生成在开发板上可以运行的文件,那这些工具我们把它叫做交叉编译工具,把这种从一个平台开发另一个平台应用的方式称为交叉编译。
toolchain 即交叉编译工具,要在 ubuntu 编译我们写的应用程序使得生成开发板可以执行的文件,必须有这一套工具才可以进行!
2 交叉工具的配置首先,我们查看是否已经有交叉编译工具:
显然没有toolchain!
注意:在本节教程的附件里编者已经给出了交叉编译工具。
好的,配置openwrt 使得支持toolchain。在openwrt/目录下运行 make menuconfig,并且选中 toolchain:
保存之后,编译 openwrt:
$make v=99
编译完成之后,我们可以查看是否有交叉编译工具包的存在。
ok,解压交叉编译工具包:解压完成后,然后我们cd 到解压完成后的工具包中,再进入该工具包中的另一个目录,找到 bin 文件夹,同样cd 进去 bin 文件夹。
好了,现在我们就拥有交叉编译工具了,我们要把交叉编译工具的路径保存在一个环境变量中,这样做是为了,我们编译程序时会根据这个环境变量找到交叉编译工具的位置。以 root 的权限编辑如下文件:
#vi /etc/environment
注意:也可用sudo vi /etc/environment。
编辑前该文件的内容如下(我的ubuntu):
好的,增加我们交叉编译工具路径后(注意以冒号分隔)。为了让这个环境变量起作用,我们重启 ubuntu!
【注意】还可如下配置。
拷贝openwrt-toolchain-ramips-rt305x_gcc-4.8-linaro_uclibc-0.9.33.2.linux-i686.tar.bz2到虚拟机中的/opt/目录下解压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 //必须用超级用户模式
编辑~/.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
保存退出
运行 source ~/.bashrc 让文件生效测试方法一:
在命令行下输入 mipsel-o 然后按tab键看会不会自动补全
方法二:
输入:mipsel-openwrt-linux- -v
3 测试交叉编译环境重启完成后,我们编写一个非常简单的应用程序:
#include int main (){ printf(“hello world!n”); return 0;}然后使用交叉编译工具进行编译!
编译完成后生成可执行文件:
然后我们尝试在ubuntu中运行可执行文件 main:
很显然,这个可执行文件无法在 ubuntu 上运行,但是,却可以在我们开发板中运行,我们把可执行文件移动到开发板中进行执行:
注意:main的权限应为777,否则无法运行。
【注意】交叉编译工具链编译的时报没有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


贸泽推出Texas Instruments简单易用的12位SAR ADC—ADS7028和ADS7138
AGV小车安全行驶的三种控制方法
人像超级夜景自拍加持,华为nova5 Pro成新一代自拍神器
iPhone8被延期到11月 全新Air Book笔记本推荐
3D打印技术在2020年的未来走向将会是什么?
Openwrt开发指南 第26章 编写应用程序交叉编译
浅析光纤液位传感器的工作原理和探测液位的过程
100%国产化芯片?智能安防监控拆解
基于NiosII 32位处理器的LED大屏幕显示系统设计
线易微电子完成Pre-A轮融资,持续引领高端模拟芯片市场
采用L297和L298的步进电机驱动器的设计
如何根据电机的参数选择电缆?为什么要限制变频器与电机之间电缆长度?
这些巨头要进一步开发触控技术了
SolidWorks软件教育版和企业版的区别
AI助力Facebook自动化寻找极端内容成功率大99%
“新能源汽车电机智能制造新模式应用”已顺利建成
非晶硅太阳能电池市场的展望
国芯思辰|全极性霍尔开关AH462在加湿器中的应用,性能兼容HAL248
智能家居市场在2020年有什么新的战略
泰克推出突破性TMT4测试解决方案,全新方法加速PCIe 3/4测试