Click here to Skip to main content
14,176,536 members
Click here to Skip to main content
Add your own
alternative version

Tagged as


Posted 15 Jul 2015
Licenced CPOL

Intel® Edison - adding kernel modules to Yocto - example "batman"

, 15 Jul 2015
Rate this:
Please Sign up or sign in to vote.
Recently I was asked how to add batman-adv to Yocto.

This article is for our sponsors at CodeProject. These articles are intended to provide you with information on products and services that we consider useful and of value to developers

Get access to the new Intel® IoT Developer Kit, a complete hardware and software solution that allows developers to create exciting new solutions with the Intel® Galileo and Intel® Edison boards. Visit the Intel® Developer Zone for IoT.

Recently I was asked how to add batman-adv to Yocto. I put together my answer email and it turned out slightly lengthy - looked like it should go into a blog ;-)

Option 1 - kindly ask others to do the work

Check availability in existing repos like In our concrete example we can find the prerequesite libnl in but no b.a.t.m.a.n* [by now it has been added to the repo - still keeping this blog]. Hence we could kindly ask e.g. AlexT on whether he could add the packages "kernel-module-batman-adv" as well as "batctl" to If you are lucky he might do but it's voluntary work on his side.

The packages can be installed via "opkg install <package name>"

Option 2 - compile on target

Slightly more difficult - and requires sufficient free space on Intel(R) Edison rootfs. Install kernel sources on the target and compile modules on the target

Option 3 - build in Yocto build environment


  • Linux x64 host system (e.g. Ubuntu* 12.04 [have heard about issues running Yocto* on 14.04 - maybe resolved by now], Fedora* 20, ...)
  • min 50 GB free disk space (at least if you want to compile the whole Yocto image)

Yocto setup

build kernel-modules-batman-adv

  • bitbake -c menuconfig virtual/kernel; this will open a new window running Linux kernel config for Edison
  • configure batman: within the menuconfig session configure the b.a.t.m.a.n* options you want to see within the Networking Support > Networking Options > BATMAN category
  • cp build/tmp/work/edison-poky-linux/linux-yocto/<your current kernel>/linux-edison-standard-build/.config device-software/meta-edison/recipes-kernel/linux/files/defconfig
  • bitbake -c compile_kernelmodules virtual/kernel
  • in case you require the complete modules tarball: bitbake -c deploy virtual/kernel – you'd find the tarball under build/tmp/deploy/images/edison geschrieben
  • otherwise: opkg install build/tmp/deploy/ipk/edison/kernel-module-batman-adv_<version>.ipk on your target

The configs I changed:

< # CONFIG_BATMAN_ADV is not set


In order to make use of batman you should also install batctl. On the web you can find bitbake recipes. I used and adopted as per below:

mkdir -p device-software/meta-edison-distro/recipes-support/batman/

cat > device-software/meta-edison-distro/recipes-support/batman/ <<EOF

DESCRIPTION = "Control application for B.A.T.M.A.N. routing protocol kernel module for multi-hop ad-hoc mesh networks."
SECTION = "console/network"
PRIORITY = "optional"

LIC_FILES_CHKSUM = "file://../license-destdir/${PN}/generic_GPLv2;md5=801f80980d171dd6425610833a22dbe6"

RDEPENDS_${PN} = "kernel-module-batman-adv"
DEPENDS = "libnl"

SRC_URI = "${PV}.tar.gz\
SRC_URI[md5sum] = "f3a14565699313258ee6ba3de783eb0a"
SRC_URI[sha256sum] = "77509ed70232ebc0b73e2fa9471ae13b12d6547d167dda0a82f7a7fad7252c36"


do_compile() {

do_install() {
  install -d ${D}${bindir}
  install -m 0755 batctl ${D}${bindir}

As libnl has changed its include installation path I had to patch the Makefile of batctl. The patch as per below:

mkdir -p device-software/meta-edison-distro/recipes-support/batman/files
cat > device-software/meta-edison-distro/recipes-support/batman/files/patch.patch <<EOF

--- a/Makefile  2015-02-27 09:10:45.768409932 +0100
+++ b/Makefile  2015-02-27 09:11:32.710554513 +0100
@@ -29,7 +29,7 @@
MANPAGE = man/batctl.8

 # batctl flags and options
-CFLAGS += -Wall -W -std=gnu99 -fno-strict-aliasing -MD -MP
+CFLAGS += -Wall -W -std=gnu99 -fno-strict-aliasing -MD -MP –I${STAGING_INC}/libnl3
LDLIBS += -lm

After that one can bitbake batctl with:

bitbake batctl

After completion you'll find the package in build/tmp/deploy/ipk/core2-32/batctl_2014.4.0-r0_core2-32.ipk. It can be directly installed via "opkg install" on Intel(R) Edison running Yocto* Linux

Test on Intel(R) Edison after installation

root@edison:~/ # modprobe batman-adv

If you want to have the module auto-loaded you'd probably want to enter it in /etc/modules-load.d/

root@edison:~/ # modinfo batman-adv
filename:       /lib/modules/3.10.17-poky-edison+/kernel/net/batman-adv/batman-adv.ko
version:        2013.2.0
description:    B.A.T.M.A.N. advanced
author:         Marek Lindner <>, Simon Wunderlich <>
license:        GPL
srcversion:     66711903985B5CAAE0DAF30
intree:         Y
vermagic:       3.10.17-poky-edison+ SMP preempt mod_unload ATOM

Using a USB eth dongle:

root@edison:~/ # batctl if add enp0s17u1
root@edison:~/ # batctl if
enp0s17u1: active
root@edison:~/ # batctl s
     tx: 6
     tx_bytes: 468
     tx_dropped: 0
     rx: 1
     rx_bytes: 42
     forward: 0
     forward_bytes: 0
     mgmt_tx: 60
     mgmt_tx_bytes: 2428
     mgmt_rx: 0
     mgmt_rx_bytes: 0
     tt_request_tx: 0
     tt_request_rx: 0
     tt_response_tx: 0
     tt_response_rx: 0
     tt_roam_adv_tx: 0
     tt_roam_adv_rx: 0
     dat_get_tx: 0
     dat_get_rx: 0
     dat_put_tx: 0
     dat_put_rx: 0
     dat_cached_reply_tx: 0
     nc_code: 0
     nc_code_bytes: 0
     nc_recode: 0
     nc_recode_bytes: 0
     nc_buffer: 0
     nc_decode: 0
     nc_decode_bytes: 0
     nc_decode_failed: 0
     nc_sniffed: 0
# ifconfig bat0
bat0      Link encap:Ethernet  HWaddr 52:78:97:51:ba:9d  
          inet6 addr: fe80::5078:97ff:fe51:ba9d/64 Scope:Link
          RX packets:1 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:42 (42.0 B)  TX bytes:468 (468.0 B)

Intel® Developer Zone for IoT

Start inventing today with the Intel® IoT Developer Program which offers knowledge, tools, kits and a community of experts to quickly and easily turn your innovative ideas into IoT Solutions.

Dream it, Build it with the Intel® IoT Developer Kit for Intel® Edison and Intel® Galileo platforms. These kits are versatile, performance-optimized and fully integrated end-to-end IoT solutions supporting a variety of programming environments, tools, security, cloud connectivity and hardware.

For more resources and to learn how the new Intel® IoT Developer Kit v1.0 can help streamline your IoT projects:


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Intel Corporation
United States United States
You may know us for our processors. But we do so much more. Intel invents at the boundaries of technology to make amazing experiences possible for business and society, and for every person on Earth.

Harnessing the capability of the cloud, the ubiquity of the Internet of Things, the latest advances in memory and programmable solutions, and the promise of always-on 5G connectivity, Intel is disrupting industries and solving global challenges. Leading on policy, diversity, inclusion, education and sustainability, we create value for our stockholders, customers and society.
Group type: Organisation

43 members

You may also be interested in...

Comments and Discussions

-- There are no messages in this forum --
Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web01 | 2.8.190525.1 | Last Updated 15 Jul 2015
Article Copyright 2015 by Intel Corporation
Everything else Copyright © CodeProject, 1999-2019
Layout: fixed | fluid