英特尔® EDISON —— 添加内核模块到 YOCTO* —— "BATMAN" 案例


最近有人问我如何将 batman-adv 添加至 Yocto。 我通过邮件回复了该问题,但邮件内容过长 — 因此我想应该通过博客的形式来回答该问题;

选择 1 — 请求他人的帮助

http://repo.opkg.net/edison/ 等现有库中查找。 在列举的具体示例中,我们可以在 http://repo.opkg.net/edison/repo/core2-32/ 中查找到 prerequesite libnl,但没有 b.a.t.m.a.n*【目前已添加至库 — 请继续阅读本博客】。 因此我们可以通过 https://communities.intel.com/thread/55692?start=0&tstart=0 请求他人(比如 AlexT )是否能够将程序包 "kernel-module-batman-adv" 和 "batctl" 添加至 http://repo.opkg.net/edison/。 如果幸运,他可能会帮助你进行添加,但这不是他的义务。

该程序包可以通过 "opkg install
" 安装

选择 2 — 在对象上进行编译

这种做法的难度稍微大一些 — 并要求英特尔 Edison rootfs 上具有足够的可用空间。 在对象上安装内核源,并编译模块

选择 3 — 在 Yocto 构建环境中进行构建

要求:

Linux x64 主机系统(比如 Ubuntu* 12.04 【听说在 14.04 上运行 Yocto* 时出现了问题 — 现在可能已经解决】,Fedora* 20 等)

最低 50 GB 可用磁盘空间(编译整个 Yocto 映像的最低要求)

Yocto 设置

下载 "Yocto complete image",地址为:http://www.intel.com/support/edison/sb/CS-035180.htm

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 geschrieben 下方查找 tarball

其他:在对象上使用 opkg 安装 build/tmp/deploy/ipk/edison/kernel-module-batman-adv_.ipk

更改的配置包括:

1< # CONFIG_BATMAN_ADV is not set
2---
3> CONFIG_BATMAN_ADV=m
4> CONFIG_BATMAN_ADV_BLA=y
5> CONFIG_BATMAN_ADV_DAT=y
6> CONFIG_BATMAN_ADV_NC=y
7> # CONFIG_BATMAN_ADV_DEBUG is not set

batctl

如欲使用 batman,还需安装 batctl。 您可以在 web 中查找到 bitbake 方案。 我使用的是 https://github.com/openembedded/openembedded/blob/master/recipes/batctl/...,如下所示:

01 mkdir -p device-software/meta-edison-distro/recipes-support/batman/
02
03 cat > device-software/meta-edison-distro/recipes-support/batman/batctl_2014.4.0.bb < 04
05 DESCRIPTION = "Control application for B.A.T.M.A.N. routing protocol kernel module for multi-hop ad-hoc mesh networks."
06 HOMEPAGE = "http://www.open-mesh.net/"
07 SECTION = "console/network"
08 PRIORITY = "optional"
09
10 LICENSE = "GPLv2+"
11 LIC_FILES_CHKSUM = "file://../license-destdir/${PN}/generic_GPLv2;md5=801f80980d171dd6425610833a22dbe6"
12
13 RDEPENDS_${PN} = "kernel-module-batman-adv"
14 DEPENDS = "libnl"
15
16
17 SRC_URI = "http://downloads.open-mesh.net/batman/stable/sources/batctl/batctl-${PV}.tar.gz\
18 file://patch.patch"
19 SRC_URI[md5sum] = "f3a14565699313258ee6ba3de783eb0a"
20 SRC_URI[sha256sum] = "77509ed70232ebc0b73e2fa9471ae13b12d6547d167dda0a82f7a7fad7252c36"
21
22 EXTRA_OEMAKE = 'STAGING_INC="${STAGING_INC}"'
23
24 do_compile() {
25 oe_runmake
26 }
27
28 do_install() {
29 install -d ${D}${bindir}
30 install -m 0755 batctl ${D}${bindir}
31 }
32 EOF

由于 libnl 更改了包含安装路径,我需要为 batctl 的 Makefile 打补丁。 补丁为:

01 mkdir -p device-software/meta-edison-distro/recipes-support/batman/files
02 cat > device-software/meta-edison-distro/recipes-support/batman/files/patch.patch < 03
04 --- a/Makefile 2015-02-27 09:10:45.768409932 +0100
05 +++ b/Makefile 2015-02-27 09:11:32.710554513 +0100
06 @@ -29,7 +29,7 @@
07 MANPAGE = man/batctl.8
08
09 # batctl flags and options
10 -CFLAGS += -Wall -W -std=gnu99 -fno-strict-aliasing -MD -MP
11 +CFLAGS += -Wall -W -std=gnu99 -fno-strict-aliasing -MD -MP –I${STAGING_INC}/libnl3
12 CPPFLAGS += -D_GNU_SOURCE
13 LDLIBS += -lm
14 EOF

之后,您可以通过

view sourceprint?

1 bitbake batctl 来 bitbake batctl

上述步骤完成后,您将可以在 build/tmp/deploy/ipk/core2-32/batctl_2014.4.0-r0_core2-32.ipk. 中查找到程序包 该程序包可以通过 "opkg install" 直接安装在运行 Yocto* Linux 的英特尔 Edison 之上

安装完成后,在英特尔 Edison 上进行测试

view sourceprint?

1 root@edison:~/ # modprobe batman-adv

如果您希望自动加载模块,需要将其输入到 /etc/modules-load.d/

view sourceprint?

01 root@edison:~/ # modinfo batman-adv
02 filename: /lib/modules/3.10.17-poky-edison+/kernel/net/batman-adv/batman-adv.ko
03 version: 2013.2.0
04 description: B.A.T.M.A.N. advanced
05 author: Marek Lindner
, Simon Wunderlich
06 license: GPL
07 srcversion: 66711903985B5CAAE0DAF30
08 depends:
09 intree: Y
10 vermagic: 3.10.17-poky-edison+ SMP preempt mod_unload ATOM

使用 USB eth 加密狗:

01 root@edison:~/ # batctl if add enp0s17u1
02 root@edison:~/ # batctl if
03 enp0s17u1: active
04 root@edison:~/ # batctl s
05 tx: 6
06 tx_bytes: 468
07 tx_dropped: 0
08 rx: 1
09 rx_bytes: 42
10 forward: 0
11 forward_bytes: 0
12 mgmt_tx: 60
13 mgmt_tx_bytes: 2428
14 mgmt_rx: 0
15 mgmt_rx_bytes: 0
16 tt_request_tx: 0
17 tt_request_rx: 0
18 tt_response_tx: 0
19 tt_response_rx: 0
20 tt_roam_adv_tx: 0
21 tt_roam_adv_rx: 0
22 dat_get_tx: 0
23 dat_get_rx: 0
24 dat_put_tx: 0
25 dat_put_rx: 0
26 dat_cached_reply_tx: 0
27 nc_code: 0
28 nc_code_bytes: 0
29 nc_recode: 0
30 nc_recode_bytes: 0
31 nc_buffer: 0
32 nc_decode: 0
33 nc_decode_bytes: 0
34 nc_decode_failed: 0
35 nc_sniffed: 0

1 # ifconfig bat0
2 bat0 Link encap:Ethernet HWaddr 52:78:97:51:ba:9d
3 inet6 addr: fe80::5078:97ff:fe51:ba9d/64 Scope:Link
4 UP BROADCAST RUNNING MULTICAST DYNAMIC MTU:1500 Metric:1
5 RX packets:1 errors:0 dropped:0 overruns:0 frame:0
6 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
7 collisions:0 txqueuelen:0
8 RX bytes:42 (42.0 B) TX bytes:468 (468.0 B)

文章来源: 英特尔开发人员专区