Saturday, June 2, 2012

Yate-4.1 on Openwrt with Google Voice support


Update: August 22, 2012
Yate 4.2 is already out and so I updated the below instructions and adde a new Makefile. See the related blog on Yate 4.2 at the link below:

Yate-4.2 on Openwrt with Google Voice support

Puiblished: June 2, 2012

I had been using Yate4 for sometime and it is an excellent telephony application. As of this writing openwrt trunk only includes yate-3.2 and this limits some of the advancements in the application. I like a lot of things about yate, even though it may not be categorized as a replacement for asterisk. For a lot of folks, the excellent Google Voice support in yate, makes it a must have item in their embedded device running openwrt.

I will explain how to make yate 4.1working in openwrt. There are help pages available in openwrt for
1. how to create custom feeds
2. how to create a package
And they both explain a lot of detail on how you can achive getting custom feeds in clean way. So I am not planning to put a lot of effort on explaining those, and will focus on the core part, the makefile.

Also I will show you how to create an ipk file which you can install on your openwrt platform. The cleaner way of doing is create a custom feed and put yate4 package with the makefile in the custom feed.

Here is the makefile you can use for this purpose.

The steps to compile your own ipk is below. The pre-requisite for this is that you already have setup your openwrt compile environment, and know how to compile openwrt from source.

1. Goto your openwrt compile environment base directory.
2. mkdir package/yate
3. Download Makefile.yate to package/yate/Makefile
Note: if you dont have compiled openwrt in this directory, you might have to build the toolchain before the next step.
make tools/install
make toolchain/install
4. make package/yate/compile
5. make package/yate/install

You will have the yate4 ipk file under bin/packages
Now you can use opkg install yate4.ipk to install this package to your openwrt platform.

How to make google voice working. I was going to explain this detail here, and was documenting how I made it working. But I realized that now there is an excellent documenation in the official yate webpage.
Here is the link:  Yate4-ConnectingToGoogleVoice

Follow that link to make google voice working.

Note: For a handful of folks, who dont have an openwrt compile environment, and want to have an ipk, please post a comment with the exact router model you have (to know the cpu) and your kernel version. If I already have an ipk compatable for the model, I will share it with you. (please dont expect a reply if I dont have the ipk for you.)


  1. Good job man! My router is TP-Link WA901ND Version 1.x, if you have the IPK please let me know. My email address is thank you

    1. Attila sorry I dont have the ipk for AR7240. I will try to compile one for you sometime.

      Check the below link on how to setup an openwrt environment yourself. You will find that it is not that hard.

  2. Brilliant!

    I bought a Belkin N300 router to interface with an Arduino and your previous post helped me get OpenWrt up on that router. Then I was wondering how to install Yate on that specific OpenWrt version and I find this post!

    Thanks Manoj for making it possible for me, a complete Linux newbie, to use the $22 router with 2 usb ports for my home automation projects.

    1. Wilfred, I am glad to see that you found the blog helpful.

  3. I'm having issue on compiling you package

    error message is as below.

    [bls@localhost openwrt]$ make package/feeds/packages/yate/compile
    make[1] package/feeds/packages/yate/compile
    make[2] -C package/toolchain compile
    make[2] -C package/uclibc++ compile
    make[2] -C package/zlib compile
    make[2] -C feeds/packages/net/yate4 compile


    #make DESTDIR=/home/nikescar/openwrt/openwrt/build_dir/target-mips_r2_uClibc- install
    #install -m0755 /home/nikescar/openwrt/openwrt/build_dir/target-mips_r2_uClibc- /home/nikescar/openwrt/openwrt/build_dir/target-mips_r2_uClibc-
    #install -m0644 /home/nikescar/openwrt/openwrt/build_dir/target-mips_r2_uClibc- /home/nikescar/openwrt/openwrt/build_dir/target-mips_r2_uClibc-
    find /home/nikescar/openwrt/openwrt/build_dir/target-mips_r2_uClibc- -name 'CVS' -o -name '.svn' -o -name '.#*' -o -name '*~'| xargs -r rm -rf
    Package yate is missing dependencies for the following libraries:
    make[2]: *** [/home/nikescar/openwrt/openwrt/bin/ar71xx/packages/yate_4.1.0-1-6_ar71xx.ipk] Error 1
    make[2]: Leaving directory `/home/nikescar/openwrt/openwrt/feeds/packages/net/yate4'
    make[1]: *** [package/feeds/packages/yate/compile] Error 2
    make[1]: Leaving directory `/home/nikescar/openwrt/openwrt'
    make: *** [package/feeds/packages/yate/compile] Error 2
    [bls@localhost openwrt]$

    1. issue seem to be in your host system. please note the dependency issue reported and try debugging and google search.

  4. Hi, I have not spent much time around make in a while and I'm not sure what I'm getting wrong. My build env is producing output for my router but I don't seem to have something set correctly to include the package build.

    $ make package/yate3/compile V=99
    make[1]: Entering directory `/home/foo/openwrt/trunk'
    make[2]: Entering directory `/home/foo/openwrt/trunk/package/toolchain'
    WARNING: skipping libssp -- package not selected
    WARNING: skipping libstdcpp -- package not selected
    WARNING: skipping libpthread -- package not selected
    WARNING: skipping librt -- package not selected
    WARNING: skipping libgfortran -- package not selected
    WARNING: skipping ldd -- package not selected
    WARNING: skipping ldconfig -- package not selected
    make[2]: Leaving directory `/home/foo/openwrt/trunk/package/toolchain'
    make[2]: Entering directory `/home/foo/openwrt/trunk/package/uclibc++'
    WARNING: skipping uclibcxx -- package not selected
    make[2]: Leaving directory `/home/foo/openwrt/trunk/package/uclibc++'
    make[2]: Entering directory `/home/foo/openwrt/trunk/package/yate3'
    WARNING: skipping yate -- package not selected
    make[2]: Leaving directory `/home/foo/openwrt/trunk/package/yate3'
    make[1]: Leaving directory `/home/foo/openwrt/trunk'

    1. Ignore the post above. I had borked my build env. Here's how I started clean again:

      svn co svn://
      cd trunk
      ./scripts/feeds update -a
      mkdir package/yate3
      cp ~/Desktop/Makefile.yate package/yate3/Makefile
      make menuconfig (enabled yate under network, telephony)
      make package/yate3/compile V=99

      Now, I've just got some dependancies unmet:
      Package yate is missing dependencies for the following libraries:

      Would you suggest adding these to package/yate3/Makefile or another way?



    2. Added the depends to the yate3/Makefile:

      DEPENDS:=+libpthread +uclibcxx +zlib +libstdcpp

      make menuconfig
      make packages/yate3/install V=s

      and I have a package in bin/ar71xx/packages


      Thanks much!!


    3. Alan,

      Thanks for bringing up this dependency issue. I did not face this earlier probably because of the versions of gcc I was using.

      Your post will be helpful for other folks using similar build environment.

      Thanks for your contribution.

      By the way I did not see your post for help till today (so not replying earlier was unintentional).


  5. I am closing further comments on this thread, since I published an updated thread here:

    Yate-4.2 on Openwrt with Google Voice support