OS X下搭建OpenWRT开发环境

本文记叙了如何在OS X环境下搭建一个OpenWRT的交叉编译开发环境。主要目的并不是为了编译OpenWRT 操作系统,而是编译一套用于开发第三方程序的SDK。本文编译的是MIPS指令集,基于uClibc的工具链, 适用于类似TP-Link 720N的路由器。

准备

  1. Homebrew或者类似的包管理器;
  2. 一套OS X的工具链,例如Xcode的命令行工具,或者是从Homebrew安装的GNU工具链;
  3. OpenWRT源代码;
  4. 10G左右的空闲硬盘空间。

编译SDK

  1. 首先需要说明的是,我只想得到一份可用的SDK,而不想要整个系统,因此依照以下步骤不见得能编译出 一份可用的系统。其次,官方编译教程在这里: http://wiki.openwrt.org/zh-cn/doc/howto/buildroot.exigence

  2. OpenWRT只支持在大小写敏感的文件系统中编译,不分区的话,可以用hdiutil工具创建一个10G左右的 dmg映像来代替: hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 10g openwrt.dmg 然后装载dmg文件,就可以在载入的卷宗中编译了。

  3. 先进行环境配置

     make defconfig
     make prereq
     make menuconfig
    

    执行这些命令的过程中,多半会提示缺少软件包,用Homebrew来安装,下面列举其中一部分。

    1. (软件包getopt):brew install gnu-getopt,找到可执行文件,在/usr/local/bin下制作一个符号 链接,名字为gnugetopt

    2. (软件包fileutils等):brew install coreutils

    3. (软件包awk):brew install gawk

    4. (软件包wget):brew install wget

  4. 顺利进入menuconfig,需要根据路由器选择Target System、Subtarget、Profile,确保选中OpenWrt SDK、 Toolchain。

  5. 保存退出menuconfig,执行make来编译,编译过程较长,完成后staging_dir中就是我们需要的工具链。

使用工具链

  1. 设置STAGING_DIR环境变量,指向SDK的staging_dir目录,设置PATH环境变量,在其中添加SDK 工具链的bin目录: <省略...>\staging_dir\toolchain-mips_34kc_gcc-4.6-linaro_uClibc-0.9.33\bin

  2. 准备好需要编译的源码文件,对于C程序,可以运行mips-openwrt-linux-gcc,对于C++程序, 可以运行mips-openwrt-linux-g++,来进行交叉编译。(对于其他路由器,gcc名字会有所不同)

  3. 我觉得第1步麻烦,就直接用这段脚本来代替手动修改环境变量了:

1
2
3
4
5
    #!/bin/bash

    export PATH=$PATH:`pwd`/toolchain-mips_34kc_gcc-4.6-linaro_uClibc-0.9.33.2/bin:`pwd`/host/bin
    export STAGING_DIR=`pwd`
    bash

最后用任何手段(例如scp)把编译出的程序发送到路由器,直接运行即可。如果希望制作ipkg包,可能还需要 更深入的研究OpenWrt SDK。

Comments