Skip to content

Instantly share code, notes, and snippets.

@kumadasu
Created October 15, 2017 13:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kumadasu/99e7ebade8d1eea47cd05ebfa1d122ac to your computer and use it in GitHub Desktop.
Save kumadasu/99e7ebade8d1eea47cd05ebfa1d122ac to your computer and use it in GitHub Desktop.
Hikey向けのROSビルド方法(暫定)

Hikeyのビルド

  • https://github.com/Linaro/documentation/blob/master/Reference-Platform/CECommon/OE.md が基本手順
  • 必要に応じてconf/site.conf, auto.confを編集
    • 後述
    • 通常はlocal.confを編集するが、こちらはシンボリックリンクになっていて代わりにsite.conf, auto.confを編集する。
    • bblayers.confもシンボリックリンクだがこれに相当するものは見つからないのでレイヤーについては直接記述することになる。
  • rpb-console-imageをビルドする
    • setup-environmentではMACHINEにhikey(not hikey32)を指定(ここでdragon-410cを指定すればdragon用になるはず)
    • イメージ選択は推奨(rpbだったかな?egl, waylandとかがついていないもの)
  • これで一旦ビルドを通す。

site.confの編集内容

私の場合はDL_DIR, SSTATE_DIRを追加しました。なくても問題ないです。

sakate@walle:~/prj/hikey/oe-rpb/build-rpb$ cat conf/site.conf 

SCONF_VERSION = "1"

# Where to store sources
DL_DIR = "/home/sakate/share/poky/downloads"

# Where to save shared state
SSTATE_DIR = "/home/sakate/share/poky/sstate-cache"

TMPDIR = "/home/sakate/prj/hikey/oe-rpb/build-rpb/tmp-rpb"

# Go through the Firewall
#HTTP_PROXY        = "http://:/"

auto.confの例

  • とりあえず適当にros関連のレシピを追加してみただけで、ros-commである必要はない。
  • 実験段階では直接パッケージを指定したビルドをするのでそれが通ってから追加すれば良い。
    • すなわち、この修正は現段階では不要。
sakate@walle:~/prj/hikey/oe-rpb/build-rpb$ cat conf/auto.conf 
DISTRO ?= "rpb"
MACHINE ?= "hikey"
SDKMACHINE ?= "x86_64"

# Extra options that can be changed by the user
INHERIT += "rm_work"

IMAGE_INSTALL = "packagegroup-core-boot"
IMAGE_INSTALL += "ros-comm"

ROSの追加

レイヤーの追加

cd $BUILDDIR/../layers/
git clone https://github.com/bmwcarit/meta-ros.git
cd $BUILDDIR
bitbake-layers add-layer $BUILDDIR/../layers/meta-ros

rosのレシピのビルド

  • bitbake console-bridgeなどでレシピを指定すればビルド可能。
  • 修正無しではこれはQAの段階で失敗する。

console-bridgeの修正

  • レシピそのものではなくレシピがダウンロードしたソースコード(今回はMakefile)に修正を加える必要がある。
  • 今回はdevtool modifyを使用する。
cd $BUILDDIR
devtool modify console-bridge
  • これでたぶん $BUILDDIR/workspace/sources/console-bridgeにソースが展開される。
  • CMakeLists.txtを修正
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ab0ad99..6547bc2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -34,7 +34,7 @@ add_library(${PROJECT_NAME} src/console.cpp)
 target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES})
 
 install(TARGETS ${PROJECT_NAME}
-  DESTINATION lib/)
+  DESTINATION ${CMAKE_INSTALL_LIBDIR})
 
 install(DIRECTORY include/
   DESTINATION include
@@ -52,7 +52,7 @@ if (NOT MSVC)
   set(pkg_conf_file "console_bridge.pc")
   configure_file("${pkg_conf_file}.in" "${CMAKE_BINARY_DIR}/${pkg_conf_file}" @
ONLY)
   install(FILES "${CMAKE_BINARY_DIR}/${pkg_conf_file}"
-    DESTINATION lib/pkgconfig/ COMPONENT pkgconfig)
+    DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig/ COMPONENT pkgconfig)
 endif()
 
 SET_DIRECTORY_PROPERTIES(PROPERTIES
  • 完了後、再度bitbake console-bridgeでビルドできるかどうかを確認する。
    • bitbake -c clean console-bridgeでクリーンする必要があるかもしれない。
    • ちなみにdevtool build console-bridgeでもビルドの確認はできるがQAまでやってくれないので、bitbakeでの確認が必要。

cpp-commonのビルド

  • 他のレシピをビルドしようとすると、こいつに依存しているためかこいつのビルドが通る必要がある。

  • これも同様にQAの問題でビルドが通らない。原因はslackで議論したように、lib64とlibの名前不一致問題が原因。

    • 一部のROSのパッケージのMakeでlibを直打ちしている箇所が混ざっていて、これが問題。
    • ただ、これをどこで修正すればよいのかわからないのが、困っているところ。
  • console-bridgeと同様にdevtoolを使って実験を進めていく。

  • ビルドが通ったように見えてQAのWarningが出ることがあるので、うまく行ったかどうかを確認するときはビルド前にcleanが必要。

  • tmp-rpb-glibc/work/aarch64-linaro-linux/cpp-common/0.5.8-r0/cpp-common-0.5.8/install_manifest.txtの内容。2箇所libが混ざっている。

    • これを生成している箇所を特定できれば修正できると思われる。
/opt/ros/indigo/lib/pkgconfig/cpp_common.pc
/opt/ros/indigo/share/cpp_common/cmake/cpp_commonConfig.cmake
/opt/ros/indigo/share/cpp_common/cmake/cpp_commonConfig-version.cmake
/opt/ros/indigo/share/cpp_common/package.xml
/opt/ros/indigo/lib/libcpp_common.so
/opt/ros/indigo/include/ros/macros.h
/opt/ros/indigo/include/ros/debug.h
/opt/ros/indigo/include/ros/header.h
/opt/ros/indigo/include/ros/types.h
/opt/ros/indigo/include/ros/datatypes.h
/opt/ros/indigo/include/ros/cpp_common_decl.h
/opt/ros/indigo/include/ros/exception.h
/opt/ros/indigo/include/ros/platform.h
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment