Openwrt 交叉编译(Crosscompile)及使用SDK生成ipk安装包

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编译)2015-03-17 16:45:11屏幕截图得到工具链后将其解压

第二步,设置环境变量

这里只有两个变量需要设置

1.将工具链中的bin文件夹加入PATH

2.添加一个STAGING_DIR  变量,将其指向放toolchain的文件夹,比如我把toolchain解压到了/home/yj/openwrt/mips-linux-gcc/下,就把STAGING_DIR 的值赋为/home/yj/openwrt/mips-linux-gcc/

环境变量的作用及设置请自行百度,附我的配置(看前两行)

2015-03-17 16:59:25屏幕截图

第三步,进行编译

设置好环境变量后,可以检验一下,在shell中输入编译器的前几部分,看是否可以自动补全

2015-03-17 17:04:21屏幕截图

接着我们就可以进行编译了

1.编译单个文件,就像普通的编译一样,只不过把gcc换成了交叉编译的编译器  执行  mips-openwrt-linux-uclibc-gcc test.c -o test    得到的test就是路由器上可以执行的文件

2.编译软件,在./configure 时加上–host=mips-openwrt-linux-uclibc

以mentohust为例

2015-03-17 17:20:52屏幕截图

再执行make 命令就可以生成可执行文件了

2015-03-17 17:23:45屏幕截图

在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文件夹中

2015-03-17 18:43:52屏幕截图

然后执行  make package/mentohust/compile

这是编译指定包,编译package里所有的包的话直接 make就可以了

2015-03-17 19:30:09屏幕截图

编译后,生成ipk包

2015-03-17 18:44:16屏幕截图

 

Openwrt 交叉编译(Crosscompile)及使用SDK生成ipk安装包》有8个想法

  1. 你好,yj~
    为了让校园网(锐捷认证的)开共享,我买了newifi mini,刷了Breed+Open-WRT,固件是”openwrt-ramips-mt7620-Lenovo-y1-squashfs-sysupgrade-1.2.bin“。然后我就在网上找了
    ”mentohust_0.3.1-1_ramips.ipk“和”mentohust_0.3.1-1_ramips.ipk“刷入之后提示架构出错。
    然后我Google看到你的这篇文章,可是在编译遇到了一些麻烦。yj大大,跪求赐教或者帮我编译一个可用的ipk包,我自己编译能力有限,这几天真的无计可施了。。
    谢谢!~
    https://downloads.openwrt.org/chaos_calmer/15.05/ramips/mt7620/OpenWrt-SDK-15.05-ramips-mt7620_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2
    https://downloads.openwrt.org/chaos_calmer/15.05/ramips/mt7620/OpenWrt-ImageBuilder-15.05-ramips-mt7620.Linux-x86_64.tar.bz2

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据