Openwrt 交叉编译(Crosscompile)及使用SDK生成ipk安装包Openwrt交叉编译
首先我先介绍下什么是交叉编译: 交叉编译,简单的说就是,就是在一个平台上生成另一个平台上的可执行文件,举个例子,我我用我的电脑(x86_64平台)编译出路由器(mips-AR71XX)上可以执行的二进制文件,要进行交叉编译首先就要有对应平台的编译器。 Openwrt的交叉编译并不复杂。 第一步,你需要得到toolchain(工具链),我个人理解这个就相当于编译器 如何得到toolchian呢?有两种方法 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包。 解压后的文件夹放到SDK的package文件夹中 然后执行 make package/mentohust/compile 这是编译指定包,编译package里所有的包的话直接 make就可以了 编译后,生成ipk包
|