Intel® Edison - 向 Yocto 添加内核模块 - "batman" 示例
最近有人问我如何将 batman-adv 添加到 Yocto 中。
获取新的 Intel® IoT Developer Kit,这是一个完整的硬件和软件解决方案,使开发人员可以使用 Intel® Galileo 和 Intel® Edison 开发板创建令人兴奋的新解决方案。访问 Intel® IoT 开发者专区。
最近有人问我如何将 batman-adv 添加到 Yocto 中。我整理了我的回答邮件,结果有点长 - 看起来应该写成一篇博客 ;-)
选项 1 - 恳请他人完成工作
检查现有仓库中的可用性,例如 http://repo.opkg.net/edison/。在我们的具体例子中,我们可以在 http://repo.opkg.net/edison/repo/core2-32/ 中找到先决条件 libnl,但没有 b.a.t.m.a.n* [现在它已被添加到仓库中 - 仍然保留此博客]。因此,我们可以恳请例如 AlexT 在 https://communities.intel.com/thread/55692?start=0&tstart=0 上,询问他是否可以将 "kernel-module-batman-adv" 以及 "batctl" 包添加到 http://repo.opkg.net/edison/。如果你幸运的话,他可能会做,但这完全是他的志愿工作。
这些包可以通过 "opkg install <package name>" 安装
选项 2 - 在目标设备上编译
稍微困难一些 - 并且需要在 Intel(R) Edison rootfs 上有足够的可用空间。在目标设备上安装内核源码并在目标设备上编译模块
选项 3 - 在 Yocto 构建环境中构建
要求
- Linux x64 主机系统 (例如 Ubuntu* 12.04 [听说在 14.04 上运行 Yocto* 存在问题 - 也许现在已经解决],Fedora* 20, ...)
- 最少 50 GB 的可用磁盘空间(至少如果你想编译整个 Yocto 镜像)
Yocto 设置
- 从 http://www.intel.com/support/edison/sb/CS-035180.htm 下载 "Yocto complete image"
- tar xvf edison-src*.tgz
- cd edison-src
- device-software/setup.sh
- source poky/oe-init-build-env
构建 kernel-modules-batman-adv
- bitbake -c menuconfig virtual/kernel; 这将打开一个新窗口,运行 Edison 的 Linux 内核配置
- 配置 batman:在 menuconfig 会话中,配置你希望在 Networking Support > Networking Options > BATMAN 类别中看到的 b.a.t.m.a.n* 选项
- cp build/tmp/work/edison-poky-linux/linux-yocto/<你的当前内核>/linux-edison-standard-build/.config device-software/meta-edison/recipes-kernel/linux/files/defconfig
- bitbake -c compile_kernelmodules virtual/kernel
- 如果你需要完整的模块 tarball:bitbake -c deploy virtual/kernel – 你会在 build/tmp/deploy/images/edison 找到 tarball geschrieben
- 否则:在你的目标设备上 opkg install build/tmp/deploy/ipk/edison/kernel-module-batman-adv_<version>.ipk
我更改的配置
< # CONFIG_BATMAN_ADV is not set --- > CONFIG_BATMAN_ADV=m > CONFIG_BATMAN_ADV_BLA=y > CONFIG_BATMAN_ADV_DAT=y > CONFIG_BATMAN_ADV_NC=y > # CONFIG_BATMAN_ADV_DEBUG is not set
batctl
为了使用 batman,你还应该安装 batctl。在网上你可以找到 bitbake recipes。我使用了并采用了 https://github.com/openembedded/openembedded/blob/master/recipes/batctl/batctl.inc,如下所示
mkdir -p device-software/meta-edison-distro/recipes-support/batman/ cat > device-software/meta-edison-distro/recipes-support/batman/batctl_2014.4.0.bb <<EOF DESCRIPTION = "Control application for B.A.T.M.A.N. routing protocol kernel module for multi-hop ad-hoc mesh networks." HOMEPAGE = "http://www.open-mesh.net/" SECTION = "console/network" PRIORITY = "optional" LICENSE = "GPLv2+" LIC_FILES_CHKSUM = "file://../license-destdir/${PN}/generic_GPLv2;md5=801f80980d171dd6425610833a22dbe6" RDEPENDS_${PN} = "kernel-module-batman-adv" DEPENDS = "libnl" SRC_URI = "http://downloads.open-mesh.net/batman/stable/sources/batctl/batctl-${PV}.tar.gz\ file://patch.patch" SRC_URI[md5sum] = "f3a14565699313258ee6ba3de783eb0a" SRC_URI[sha256sum] = "77509ed70232ebc0b73e2fa9471ae13b12d6547d167dda0a82f7a7fad7252c36" EXTRA_OEMAKE = 'STAGING_INC="${STAGING_INC}"' do_compile() { oe_runmake } do_install() { install -d ${D}${bindir} install -m 0755 batctl ${D}${bindir} } EOF
由于 libnl 更改了其 include 安装路径,我不得不修补 batctl 的 Makefile。补丁如下所示
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 CPPFLAGS += -D_GNU_SOURCE LDLIBS += -lm EOF
在那之后,可以使用以下命令 bitbake batctl
bitbake batctl
完成后,你将在 *build/tmp/deploy/ipk/core2-32/batctl_2014.4.0-r0_core2-32.ipk* 中找到该软件包。它可以直接通过 "opkg install" 安装在运行 Yocto* Linux 的 Intel(R) Edison 上
安装后在 Intel(R) Edison 上测试
root@edison:~/ # modprobe batman-adv
如果你想让模块自动加载,你可能需要将其输入到 * /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 <lindner_marek@yahoo.de>, Simon Wunderlich <siwu@hrz.tu-chemnitz.de> license: GPL srcversion: 66711903985B5CAAE0DAF30 depends: intree: Y vermagic: 3.10.17-poky-edison+ SMP preempt mod_unload ATOM
使用 USB 以太网加密狗
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 UP BROADCAST RUNNING MULTICAST DYNAMIC MTU:1500 Metric:1 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® 物联网开发者计划提供知识、工具、套件以及专家社区,助您快速轻松地将您的创新想法转化为物联网解决方案。
使用适用于 Intel® Edison 和 Intel® Galileo 平台的 Intel® IoT Developer Kit 构想、构建它。这些套件是多功能、性能优化和完全集成的端到端 IoT 解决方案,支持各种编程环境、工具、安全性、云连接和硬件。
如需更多资源并了解新的 Intel® 物联网开发者套件 v1.0 如何帮助您简化物联网项目
- 下载 Intel® 物联网开发者套件
- 访问 Intel® 物联网开发者中心
- 参加我们的 Roadshows,获取创建您自己的物联网项目的实践培训