OS X下搭建OpenWRT开发环境
本文记叙了如何在OS X环境下搭建一个OpenWRT的交叉编译开发环境。主要目的并不是为了编译OpenWRT 操作系统,而是编译一套用于开发第三方程序的SDK。本文编译的是MIPS指令集,基于uClibc的工具链, 适用于类似TP-Link 720N的路由器。
准备
- Homebrew或者类似的包管理器;
- 一套OS X的工具链,例如Xcode的命令行工具,或者是从Homebrew安装的GNU工具链;
- OpenWRT源代码;
- 10G左右的空闲硬盘空间。
编译SDK
首先需要说明的是,我只想得到一份可用的SDK,而不想要整个系统,因此依照以下步骤不见得能编译出 一份可用的系统。其次,官方编译教程在这里: http://wiki.openwrt.org/zh-cn/doc/howto/buildroot.exigence。
OpenWRT只支持在大小写敏感的文件系统中编译,不分区的话,可以用
hdiutil
工具创建一个10G左右的 dmg映像来代替:hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 10g openwrt.dmg
然后装载dmg文件,就可以在载入的卷宗中编译了。先进行环境配置
make defconfig make prereq make menuconfig
执行这些命令的过程中,多半会提示缺少软件包,用Homebrew来安装,下面列举其中一部分。
(软件包getopt):
brew install gnu-getopt
,找到可执行文件,在/usr/local/bin
下制作一个符号 链接,名字为gnugetopt
。(软件包fileutils等):
brew install coreutils
(软件包awk):
brew install gawk
(软件包wget):
brew install wget
顺利进入menuconfig,需要根据路由器选择Target System、Subtarget、Profile,确保选中OpenWrt SDK、 Toolchain。
保存退出menuconfig,执行
make
来编译,编译过程较长,完成后staging_dir
中就是我们需要的工具链。
使用工具链
设置
STAGING_DIR
环境变量,指向SDK的staging_dir
目录,设置PATH
环境变量,在其中添加SDK 工具链的bin目录:<省略...>\staging_dir\toolchain-mips_34kc_gcc-4.6-linaro_uClibc-0.9.33\bin
准备好需要编译的源码文件,对于C程序,可以运行
mips-openwrt-linux-gcc
,对于C++程序, 可以运行mips-openwrt-linux-g++
,来进行交叉编译。(对于其他路由器,gcc名字会有所不同)我觉得第1步麻烦,就直接用这段脚本来代替手动修改环境变量了:
1 2 3 4 5 |
|
最后用任何手段(例如scp)把编译出的程序发送到路由器,直接运行即可。如果希望制作ipkg包,可能还需要 更深入的研究OpenWrt SDK。