65.9K
CodeProject 正在变化。 阅读更多。
Home

Intel® Edison - 将内核模块添加到 Yocto - 示例“Batman”。

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2015 年 10 月 8 日

CPOL

2分钟阅读

viewsIcon

8872

Intel® Edison - 将内核模块添加到 Yocto - 示例“Batman”。

获取新的 Intel® IoT 开发者套件,这是一个完整的硬件和软件解决方案,允许开发者使用 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 <软件包名称>" 安装

选项 2 - 在目标板上编译

稍微难一点 - 并且需要 Intel(R) Edison 根文件系统上有足够的可用空间。在目标板上安装内核源代码并在目标板上编译模块

选项 3 - 在 Yocto 构建环境中构建

需求

  • Linux x64 主机系统(例如 Ubuntu* 12.04 [听说在 14.04 上运行 Yocto* 有问题 - 也许现在已经解决了],Fedora* 20,...)
  • 至少 50 GB 的可用磁盘空间(至少如果您想编译整个 Yocto 镜像)

Yocto 设置

构建 kernel-modules-batman-adv

  • bitbake -c menuconfig virtual/kernel; 这将打开一个新窗口,运行 Edison 的 Linux 内核配置
  • 配置蝙蝠侠:在 menuconfig 会话中配置您希望在“网络支持 > 网络选项 > 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 geschrieben 下找到 tarball
  • 否则:opkg install build/tmp/deploy/ipk/edison/kernel-module-batman-adv_<版本>.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

为了使用蝙蝠侠,您还应该安装 batctl。 在网络上可以找到 bitbake 配方。 我使用了并采用了 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 更改了其包含安装路径,因此我必须修补 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 中找到软件包。 它可以通过在运行 Yocto* Linux 的 Intel(R) Edison 上使用“opkg install”直接安装

安装后在 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)
© . All rights reserved.