Openwrt交叉编译
首先我先介绍下什么是交叉编译:
交叉编译,简单的说就是,就是在一个平台上生成另一个平台上的可执行文件,举个例子,我我用我的电脑(x86_64平台)编译出路由器(mips-AR71XX)上可以执行的二进制文件,要进行交叉编译首先就要有对应平台的编译器。
Openwrt的交叉编译并不复杂。
第一步,你需要得到toolchain(工具链),我个人理解这个就相当于编译器
如何得到toolchian呢?有两种方法
1.到openwrt下载(要注意平台,比如我的路由器是tp-wr703n,所对应的平台就是AR71XX,就要到http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/下载 OpenWrt-Toolchain-ar71xx-for-mips_34kc-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2
2.自己编译,在编译固件时可以看到有编译toolchain的选项(如果不知道我在说什么的话,先学习下openwrt编译)得到工具链后将其解压
第二步,设置环境变量
这里只有两个变量需要设置
1.将工具链中的bin文件夹加入PATH
2.添加一个STAGING_DIR 变量,将其指向放toolchain的文件夹,比如我把toolchain解压到了/home/yj/openwrt/mips-linux-gcc/下,就把STAGING_DIR 的值赋为/home/yj/openwrt/mips-linux-gcc/
环境变量的作用及设置请自行百度,附我的配置(看前两行)
第三步,进行编译
设置好环境变量后,可以检验一下,在shell中输入编译器的前几部分,看是否可以自动补全
接着我们就可以进行编译了
1.编译单个文件,就像普通的编译一样,只不过把gcc换成了交叉编译的编译器 执行 mips-openwrt-linux-uclibc-gcc test.c -o test 得到的test就是路由器上可以执行的文件
2.编译软件,在./configure 时加上–host=mips-openwrt-linux-uclibc
以mentohust为例
再执行make 命令就可以生成可执行文件了
在src文件夹中就可以看到mentohust的可执行文件已经生成
利用SDK来生成ipk文件
SDK中其实是包含toolchain的,SDK就是将编译好的文件在打包到一个ipk中,便于安装。
SDK与toolchain一样,可以自己编译也可以从网上下载,不过我试了下直接下载的使用有问题,而自己编译的可以使用。
SDK生成ipk包时需要的只是一个makefile文件,makefile里写了所需下载的文件、生成规则、软件版本、类型等。makefile的写法可以到openwrt的官方wiki中找到。
再次以mentohust为例生成ipk包。
mentohust.tar.gz 这是其makefile文件
解压后的文件夹放到SDK的package文件夹中
然后执行 make package/mentohust/compile
这是编译指定包,编译package里所有的包的话直接 make就可以了
编译后,生成ipk包