Linux に平行してベアメタルプログラムを走らせる のバックアップ(No.5)

更新


公開メモ

CPU でリアルタイム処理をしたい

UI や通信を Linux で行いつつ、
リアルタイム性能の必要な処理を別途動かしたい。

Zynq には CPU が2つあるので、1つを Linux に、 1つをベアメタルに使えば完全な並列処理ができるはず?

http://www.wiki.xilinx.com/Real-Time+Linux によれば、
IRQ Affinity という機能で、Linux で受け取る IRQ を特定の CPU に回すという方法もあるらしい。そちらの CPU を常時 Idle にしておき、 割り込み処理中の追加割り込みを禁止できるなら、Linux だけでリアルタイム処理ができるのかもしれないけれど、 そういう話にはなっていないようで。

資料

シンプルな AMP : 2 つの Zynq SoC プロセッサ上で動作する Linux およびベアメタルシステム
https://japan.xilinx.com/support/documentation/application_notes/j_xapp1078-amp-linux-bare-metal.pdf

上記に対する最新の補遺
http://www.wiki.xilinx.com/XAPP1078+Latest+Information

むしろこっちが最新か?
http://www.wiki.xilinx.com/Multi-OS+Support+(AMP+%26+Hypervisor)

FPGAマガジンの16に FreeRTOS をメインに動かして、 後から Linux を起動する方法が書かれている。

OpenAmp
https://github.com/OpenAMP/open-amp
http://www.wiki.xilinx.com/OpenAMP

これを読めばいいのかも。

概要

OpenAMP

https://github.com/OpenAMP/open-amp

CPU0 で走る Linux アプリから FreeRTOS や ベアメタル アプリを CPU1 で立ち上げたり、 そのリモートアプリとの間で通信をしたり、リモートアプリに Linux の資源を使わせたり するためのライブラリとのことで、まさに欲しかった機能と言えます。

  • remoteproc ホストからリモートのプロセスを制御する
  • RPMsg ホストとリモートとの間での通信手段を提供する

OpenAMP は petalinux と、libmetal ライブラリの上に成り立っています。

libmetal

linux, freertos, baremetal で共通に使えるライブラリ API を提供し、 デバイスへのアクセスや割り込み制御、メモリ確保、その他ユーティリティ機能を提供するもの のようです。

Petalinux

概要

オープンソースの Xilinx Linux とは別物。Xilinx が開発している。

登録は必要だが無料で使える。

ダウンロード

https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools.html

ここから petalinux-v2016.4-final-installer1.run のようなファイルを落とす。

https://japan.xilinx.com/support/answers/68370.html

によれば カーネルバージョンは 4.6 だそうだ。

インストール

ここでは VirtualBox 内の Debian9 stretch に入れてみる

インストール方法は、
https://japan.xilinx.com/support/documentation-navigation/development-tools/software-development/petalinux-tools.html から ug1144-petalinux-tools-reference-guide.pdf にあります。

先に petalinux が要求するパッケージを入れます。 diffstat xvfb chrpath xterm libtool は上記ガイドに書かれていませんが、 インストール時に入れろと言われます。

LANG:console
$ sudo apt-get install build-essential binutils ncurses-dev u-boot-tools file
$ sudo apt-get install tofrodos iproute2 gawk net-tools libncurses5-dev tftp tftpd-hpa zlib1g-dev libssl-dev flex bison libselinux1
$ sudo apt-get install diffstat xvfb chrpath xterm libtool

petalinux のインストーラは巨大なバイナリを含んだ bash スクリプトです。 bash スクリプトなので実行権限が無くても bash に読ませれば実行できます。

インストーラを root で走らせると途中で以下のエラーが出ます。

ERROR: The extensible sdk cannot be installed as root.
ERROR: Failed to install Yocto SDK for zynqMP.

一方、インストーラを 非root で走らせると、/opt などのルート権限の 必要なフォルダにはインストールできません。

基本的に、ユーザーのホーム以下へのインストールが期待されているようです?
ここでは ~/z-turn/petalinux へインストールすることにしました。

ところでこれ、元のインストールファイルが大きく、/tmp に展開される ファイルも大きくて、インストール後も大きいので、インストールファイル ダウンロード前の VirtualBox の空き容量が 30GB 弱だと途中でぎりぎり Disk Full になりました。35GB もあれば大丈夫そうですが、かなり 待たされた後でエラーが出るので、余裕を持った方が精神的に楽です。

インストール後は 15.9 GB でした。

LANG:console
$ bash petalinux-v2016.4-final-installer1.run -h
 PetaLinux installer.
 
 Usage:
   petalinux-v2016.4-final-installer1.run [--log <LOGFILE>] [INSTALL_DIR]
 
 Options:
   --log <LOGFILE>     specify where the logfile should be created.
                       it will be petalinux_installation_log
                       in your working directory by default.
   [INSTALL_DIR]       specify the directory where you want to
                       install the tool kit. If not specified,
                       it will install to your working directory.

$ mkdir ~/z-turn/petalinux
$ # インストールに sudo はしません
$ bash petalinux-v2016.4-final-installer1.run ~/z-turn/petalinux
 INFO: Checking installer checksum...
 INFO: Extracting PetaLinux installer...
 INFO: Installing PetaLinux...
 INFO: Checking PetaLinux installer integrity...
 INFO: Extracting Installation files...
                                       # ここまで、ものすごく時間がかかります
 LICENSE AGREEMENTS
 
 PetaLinux SDK contains software from a number of sources.  Please review
 the following licenses and indicate your acceptance of each to continue.
 
 You do not have to accept the licenses, however if you do not then you may
 not use PetaLinux SDK.
 
 Use PgUp/PgDn to navigate the license viewer, and press 'q' to close
 
 Press Enter to display the license agreements
 Do you accept Xilinx End User License Agreement? [y/N] > y
 Do you accept Webtalk Terms and Conditions? [y/N] > y
 Do you accept Third Party End User License Agreement? [y/N] > y
 INFO: Checking installation environment requirements...
 INFO: Checking free disk space
 INFO: Checking installed tools
 ERROR: You are missing the following system tools required by PetaLinux:
 
  - libtool
 Please check PetaLinux installation guide - required tools and libraries 
 pacakge section for detailed information

 INFO: Checking installed development libraries
 Please install them with your operating system package manager, and try again
 INFO: Checking network and other services
 INFO: Installing PetaLinux SDK to "/home/osamu/z-turn/petalinux/."
 INFO: Installing PetaLinux zynqMP Yocto SDK to "/home/osamu/z-turn/petalinux/./components/yocto/source/aarch64"...
 PetaLinux Extensible SDK installer version 2016.4
 =================================================
 You are about to install the SDK to "/home/osamu/z-turn/petalinux/components/yocto/source/aarch64".
 Proceed[Y/n]? Y
 Extracting SDK...............................done
 Setting it up...
 Extracting buildtools...
 done
 SDK has been successfully set up and is ready to be used.
 Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
  $ . /home/osamu/z-turn/petalinux/components/yocto/source/microblaze_lite/environment-setup-microblazeel-v10.0-bs-cmp-ml-xilinx-linux
 INFO: PetaLinux Yocto SDK for microblaze has been successfully installed.
 INFO: PetaLinux SDK has been installed to /home/osamu/z-turn/petalinux/.

libtool はすでに入っているのだけれど・・・とりあえず無視して続行します。

動作環境の構築

libtoolize を libtool として起動できるようにする

LANG:console
$ source ~/z-turn/petalinux/settings.sh
 PetaLinux environment set to '/home/osamu/z-turn/petalinux'
 WARNING: /bin/sh is not bash!
 bash is PetaLinux recommended shell. Please set your default shell to bash.
 INFO: Checking free disk space
 INFO: Checking installed tools
 ERROR: You are missing the following system tools required by PetaLinux:
 
  - libtool
 Please check PetaLinux installation guide - required tools and libraries 
 pacakge section for detailed information
 
 INFO: Checking installed development libraries
 Please install them with your operating system package manager, and try again
 INFO: Checking network and other services
 WARNING: No tftp server found - please refer to "PetaLinux SDK Installation Guide" 
 for its impact and solution
$ sudo apt-get install libtool
 libtool はすでに最新バージョン (2.4.6-2) です。
 アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 336 個。
$ libtool
 -bash: libtool: コマンドが見つかりません
$ libtoolize --version
 libtoolize (GNU libtool) 2.4.6
 Written by Gary V. Vaughan <gary@gnu.org>, 2003
 
 Copyright (C) 2015 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ apt-get install libtool-bin
$ libtool
 -bash: libtool: コマンドが見つかりません
$ # 別名を付けるだけでいいという噂も?
$ sudo ln -s /usr/bin/libtoolize /usr/local/bin/libtool
$ source z-turn/petalinux/settings.sh
 PetaLinux environment set to '/home/osamu/z-turn/petalinux'
 WARNING: /bin/sh is not bash!
 bash is PetaLinux recommended shell. Please set your default shell to bash.
 INFO: Checking free disk space
 INFO: Checking installed tools
 INFO: Checking installed development libraries
 INFO: Checking network and other services
 WARNING: No tftp server found - please refer to "PetaLinux SDK Installation Guide" 
 for its impact and solution
$ echo $PETALINUX
 /home/osamu/z-turn/petalinux
$ arm-linux-gnueabihf-gcc --version
 arm-linux-gnueabihf-gcc (Linaro GCC 5.2-2015.11-2) 5.2.1 20151005
 Copyright (C) 2015 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ arm-none-eabi-gcc --version
 arm-none-eabi-gcc (Linaro GCC 5.2-2015.11-2) 5.2.1 20151005
 Copyright (C) 2015 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ 

パッケージ使用状況のサーベイを off にする

LANG:console
$ z-turn/petalinux/tools/common/petalinux/bin/petalinux-util --webtalk off 
 INFO: Turn off webtalk feature!

新しいプロジェクトを作る

z-turn ボード用にビルドしたいのだけれど、公式にはサポートされていないので、 試しに zedboard 用のテンプレートを落としてみた。

LANG:console
$ file avnet-digilent-zedboard-v2016.4-final1.bsp
 avnet-digilent-zedboard-v2016.4-final1.bsp: gzip compressed data, last modified: Fri Dec 16 03:02:22 2016, from Unix
$ tar fxz avnet-digilent-zedboard-v2016.4-final1.bsp
$ cd avnet-digilent-zedboard-2016.4/
$ ls
 components  config.project  hardware  pre-built  project-spec

かなりいろいろ入ってる。。。

これを元にプロジェクトを作るのというのがチュートリアルだけれど、 ここではそんな便利なものはないので、zynq 用の汎用テンプレートを使って作る。

LANG:console
$ cd ~/z-turn
$ petalinux-create -t project --template zynq -n zturn-v2016.4
 INFO: Create project: zturn-v2016.4
 INFO: New project successfully created in /home/osamu/z-turn/zturn-v2016.4
$ cd zturn-v2016.4
$ git init
 Initialized empty Git repository in /home/osamu/z-turn/zturn-v2016.4/.git/
$ cat <<EOT > .gitignore
.petalinux
build
images
EOT
$ git add .
$ git commit -m "newly created"
$ ls project-spec/
 attributes  configs  hw-description  meta-user

どうやら project-spec/ というのが petalinux のプロジェクト本体のようだ。

vivado のハードウェア設定を出力する

z-turn についていた mys-xc7z020-trd.xpr から [File]-[Export]-[Export Hardware...]

file-export-hardware.png

[Include bitstream], [Local to Project] で OK

export-including-bitstream.png

この操作により、

(project dir)/(project-name).sdk/design_1_wrapper_hw_platform_0/*

に design_1_wrapper.bit, ps7_init.* や system.hdf が出力されます。

exported-hardware-configuration.png

vivado のハードウェア設定を取り込みつつ基本の設定

上記フォルダ(コピーしたもの)を指定して petalinux-config すると、 ハードウェア設定を取り込んだ後、いろいろ設定可能なメニューが現れます。

LANG:console
$ cd (petalinux-project-dir)
$ petalinux-config --get-hw-description=../design_1_wrapper_hw_platform_1
 INFO: Getting hardware description...
 [INFO] generating Kconfig for project
...

petalinux-system-configuration.png

とりあえず何も変更せずに Exit して設定を保存。

LANG:console
 [INFO] menuconfig project
 /home/osamu/z-turn/zturn-v2016.4/build/misc/config/Kconfig.syshw:30:warning: defaults for cho
 /home/osamu/z-turn/zturn-v2016.4/build/misc/config/Kconfig:546:warning: config symbol defined
 configuration written to /home/osamu/z-turn/zturn-v2016.4/project-spec/configs/config
 
 *** End of the configuration.
 *** Execute 'make' to start the build or try 'make help'.
 
 [INFO] sourcing bitbake
 [INFO] generating plnxtool conf
 [INFO] generating meta-plnx-generated layer
 ~/z-turn/zturn-v2016.4/build/misc/plnx-generated ~/z-turn/zturn-v2016.4
 ~/z-turn/zturn-v2016.4
 [INFO] generating machine configuration
 [INFO] generating bbappends for project . This may take time !
 ~/z-turn/zturn-v2016.4/build/misc/plnx-generated ~/z-turn/zturn-v2016.4
 # ここでものすごく時間がかかります
 ~/z-turn/zturn-v2016.4
 [INFO] generating u-boot configuration files
 
 [INFO] generating kernel configuration files
 [INFO] generating kconfig for Rootfs
 WARNING: Host distribution "Debian-9.0" has not been validated with this version of the 
 build system; you may possibly experience unexpected failures. It is recommended that you 
 use a tested distribution.
 Loading cache: 100% |########################################################| ETA:  00:00:00
 Loaded 2937 entries from dependency cache.
 Parsing recipes: 100% |######################################################| Time: 00:00:05
 Parsing of 2325 .bb files complete (2285 cached, 40 parsed). 2940 targets, 196 skipped, 0 masked, 0 errors.
 NOTE: Resolving any missing task queue dependencies
 NOTE: Preparing RunQueue
 NOTE: PN build list saved to 'pn-buildlist'
 NOTE: PN dependencies saved to 'pn-depends.dot'
 NOTE: Package dependencies saved to 'package-depends.dot'
 NOTE: Task dependencies saved to 'task-depends.dot'
 
 Summary: There was 1 WARNING message shown.
 Generate rootfs kconfig
 [INFO] oldconfig rootfs
 [INFO] generating petalinux-user-image.bb
$

Debian はサポートしないと言われたけれど、続行してみます。

カーネルをビルドしてみる

LANG:console
$ petalinux-build
 [INFO] building project
 [INFO] sourcing bitbake
 INFO: bitbake petalinux-user-image
 WARNING: Host distribution "Debian-9.0" has not been validated with this version of the build 
 system; you may possibly experience unexpected failures. It is recommended that you use a 
 tested distribution.
 Loading cache: 100% |########################################################| ETA:  00:00:00
 Loaded 2938 entries from dependency cache.
 Parsing recipes: 100% |######################################################| Time: 00:00:05
 Parsing of 2325 .bb files complete (2291 cached, 34 parsed). 2940 targets, 196 skipped, 0 masked, 0 errors.
 NOTE: Resolving any missing task queue dependencies
 NOTE: Preparing RunQueue
 NOTE: Checking sstate mirror object availability (for 597 objects)
 NOTE: Executing SetScene Tasks
 NOTE: Executing RunQueue Tasks
 No currently running tasks (803 of 1810)
 No real function for mknod: /home/osamu/z-turn/zturn-v2016.4/build/tmp/sysroots/x86_64-linux/usr/bin/../lib/pseudo/lib64/libpseudo.so: undefined symbol: mknod
 No real function for mknodat: /home/osamu/z-turn/zturn-v2016.4/build/tmp/sysroots/x86_64-linux/usr/bin/../lib/pseudo/lib64/libpseudo.so: undefined symbol: mknodat
 ...
 WARNING: petalinux-user-image-1.0-r0 do_rootfs: No not found in the base feeds (plnx_arm 
 cortexa9t2hf-neon cortexa9t2hf-vfp cortexa9hf-neon cortexa9hf-vfp armv7at2hf-neon armv7ahf-neon 
 armv7at2hf-vfp armv7ahf-vfp armv6thf-vfp armv6hf-vfp armv5tehf-vfp armv5ehf-vfp armv5thf-vfp 
 armv5hf-vfp noarch any all).
 
 WARNING: petalinux-user-image-1.0-r0 do_rootfs: real not found in the base feeds (plnx_arm 
 cortexa9t2hf-neon cortexa9t2hf-vfp cortexa9hf-neon cortexa9hf-vfp armv7at2hf-neon armv7ahf-neon 
 armv7at2hf-vfp armv7ahf-vfp armv6thf-vfp armv6hf-vfp armv5tehf-vfp armv5ehf-vfp armv5thf-vfp 
 armv5hf-vfp noarch any all).
 ...
 ERROR: petalinux-user-image-1.0-r0 do_rootfs: Unable to install packages. Command 
 '/home/osamu/z-turn/zturn-v2016.4/build/tmp/sysroots/x86_64-linux/usr/bin/smart --log-level=warning 
 --data-dir=/home/osamu/z-turn/zturn-v2016.4/build/tmp/work/plnx_arm-xilinx-linux-gnueabi/petalinux-
 user-image/1.0-r0/rootfs/var/lib/smart install --attempt -y ' returned 1:
 
 No real function for mknod: /home/osamu/z-turn/zturn-v2016.4/build/tmp/sysroots/x86_64-linux/usr
 /bin/../lib/pseudo/lib64/libpseudo.so: undefined symbol: mknod
 ...

 ERROR: petalinux-user-image-1.0-r0 do_rootfs: Function failed: do_rootfs
 ERROR: Logfile of failure stored in: /home/osamu/z-turn/zturn-v2016.4/build/tmp/work/plnx_arm-xilinx-linux-gnueabi/petalinux-user-image/1.0-r0/temp/log.do_rootfs.17314
 ERROR: Task 9 (/home/osamu/z-turn/zturn-v2016.4/project-spec/meta-plnx-generated/recipes-core/images/petalinux-user-image.bb, do_rootfs) failed with exit code '1'
 NOTE: Tasks Summary: Attempted 1690 tasks of which 1326 didn't need to be rerun and 1 failed.
 No currently running tasks (1690 of 1810)
 
 Summary: 1 task failed:
   /home/osamu/z-turn/zturn-v2016.4/project-spec/meta-plnx-generated/recipes-core/images/petalinux-user-image.bb, do_rootfs
 Summary: There were 19 WARNING messages shown.
 Summary: There were 2 ERROR messages shown, returning a non-zero exit code.
 ERROR: Failed to build project
$ apt show libc6
 Package: libc6
 Version: 2.24-9
 ...

No real function for mknod について:
https://forums.xilinx.com/t5/Embedded-Linux/Strange-messages-about-shared-libraries-in-Petalinux/td-p/729766
libc6 2.24 固有の問題で出るエラーで、メッセージは無視して良いと書いてある

確かに、インストールされているのはバージョン 2.24 だ。。。

petalinux が推奨する Ubuntu 16.04 では libc6 は 2.23 になっている。 たぶん、Ubuntu が 2.24 はやばいと思ってまだ上げていないんだと思う。

$ cd ~/z-turn/petalinux
$ find | grep pseudo-1
 ./components/yocto/downloads/pseudo-1.7.5.tar.bz2
$ cd components/yocto/source/arm/layers/poky/meta/recipes-devtools/pseudo
$ ls
 files/ pseudo.inc  pseudo_1.6.7.bb  pseudo_1.7.5.bb  pseudo_git.bb
$ ls files/
 0001-configure-Prune-PIE-flags.patch  fallback-group  fallback-passwd  handle-remove-xattr.patch  
 moreretries.patch

えーと、上記リンクで紹介されているパッチを当てる先が見つからない?

https://vendor2.nginfotpdx.net/gitlab/ypp/poky/commit/9df3cdf42d8c1216682f497f0b166a43ef9f4184
もあるけど、どうも見方がよくわからない。

LANG:console
$ cd ~/z-turn/petalinux/components/yocto
$ find . -type f -exec  grep -l "No real function for" {} \;
 ./source/microblaze_lite/buildtools/sysroots/x86_64-petalinux-linux/usr/lib/pseudo/lib64/libpseudo.so
 ./source/aarch64/buildtools/sysroots/x86_64-petalinux-linux/usr/lib/pseudo/lib64/libpseudo.so
 ./source/microblaze_full/buildtools/sysroots/x86_64-petalinux-linux/usr/lib/pseudo/lib64/libpseudo.so
 ./source/arm/buildtools/sysroots/x86_64-petalinux-linux/usr/lib/pseudo/lib64/libpseudo.so
$ cd ~/z-turn/petalinux
$ find | grep pseudo-1
 ./components/yocto/downloads/pseudo-1.7.5.tar.bz2
$ cd
$ cd pseudo-1.7.5/
$ grep -ls "No real function for" *
 pseudo_wrappers.c
$ cat pseudo_wrappers.c
 ...
 #ifdef PSEUDO_NO_REAL_AT_FUNCTIONS
                 char *s = func->name;
                 s += strlen(s) - 2;
                 /* *at() don't have to exist */
                 if (!strcmp(s, "at")) {
                         return;
                 }
 #else
                 if (e != NULL) {
                         pseudo_diag("No real function for %s: %s\n", func->name, e);
                 }
 #endif
 ...
$ cd ..

ここを潰せばいいのは、わかる。

雰囲気的には meta にパッチを置いておくと、.tar.bz2 を展開し、 そのパッチを当ててからコンパイルしてくれる感じ?

LANG:c
$ jed ~/z-turn/petalinux/components/yocto/source/arm/layers/poky/meta/recipes-devtools/pseudo/files/pseudo-glibc-rtld-next-workaround.patch
 We started seeing:
 
 No real function for mknod: /home/paul/poky_sdk/tmp/sysroots/x86_64-
 linux/usr/bin/../lib/pseudo/lib64/libpseudo.so: undefined symbol: mknod
 No real function for mknodat: /home/paul/poky_sdk/tmp/sysroots/x86_64-
 linux/usr/bin/../lib/pseudo/lib64/libpseudo.so: undefined symbol: mknodat
 ...
 Index: pseudo-1.7.5/pseudo_wrappers.c
 ===================================================================
 --- pseudo-1.7.5.orig/pseudo_wrappers.c
 +++ pseudo-1.7.5/pseudo_wrappers.c
 @@ -146,9 +146,9 @@ pseudo_init_one_wrapper(pseudo_function
  			return;
  		}
  #else
 -		if (e != NULL) {
 +		/*if (e != NULL) {
  			pseudo_diag("No real function for %s: %s\n", func->name, e);
 -		}
 +		}*/
  #endif
  	}
  }
$ jed ~/z-turn/petalinux/components/yocto/source/arm/layers/poky/meta/recipes-devtools/pseudo/pseudo_1.7.5.bb
 ...
          file://pseudo-glibc-rtld-next-workaround.patch \
 ...
$ rm -r build/tmp/work/x86_64-linux/pseudo-native/
$ petalinux-build
 ...
 | gcc  -isystem/home/osamu/z-turn/zturn-v2016.4/build/tmp/sysroots/x86_64-linux/usr/include \
 |    -O2 -pipe -pipe -std=gnu99 -Wall -W -Wextra -fPIC -D_LARGEFILE64_SOURCE -D_ATFILE_SOURCE \
 |    -isystem/home/osamu/z-turn/zturn-v2016.4/build/tmp/sysroots/x86_64-linux/usr/include -O2 -pipe \
 |   -DPSEUDO_PREFIX='"/home/osamu/z-turn/zturn-v2016.4/build/tmp/sysroots/x86_64-linux/usr"' \
 |   -DPSEUDO_SUFFIX='""' -DPSEUDO_BINDIR='"bin"' -DPSEUDO_LIBDIR='"lib/pseudo/lib64"' \
 |   -DPSEUDO_LOCALSTATEDIR='"var/pseudo"' -DPSEUDO_VERSION='"1.7.5"' -DUSE_MEMORY_DB \
 |   -DPSEUDO_FORCE_ASYNC -DPSEUDO_PASSWD_FALLBACK='NULL'   -DPSEUDO_XATTR_SUPPORT    \ 
 |   -O2 -g -L/home/osamu/z-turn/zturn-v2016.4/build/tmp/sysroots/x86_64-linux/usr/lib \
 |   -I/home/osamu/z-turn/zturn-v2016.4/build/tmp/sysroots/x86_64-linux/usr/include  -o bin/pseudo \
 |   pseudo.o pseudo_server.o pseudo_client.o pseudo_ipc.o pseudo_db.o pseudo_tables.o pseudo_util.o \
 |   /home/osamu/z-turn/zturn-v2016.4/build/tmp/sysroots/x86_64-linux/usr/lib/libsqlite3.a -lpthread \
 |   -ldl -lpthread
 | /usr/bin/ld: final link failed: Nonrepresentable section on output
 | collect2: error: ld returned 1 exit status
 | Makefile:110: recipe for target 'bin/pseudo' failed
 | make: *** [bin/pseudo] Error 1
 | WARNING: exit code 1 from a shell command.
 | ERROR: oe_runmake failed
 | ERROR: Function failed: do_compile (log file is located at /home/osamu/z-turn/zturn-v2016.4/build/tmp/work/x86_64-linux/pseudo-native/1.7.5-r0/temp/log.do_compile.25335)
 ERROR: Task 44 (virtual:native:/home/osamu/z-turn/petalinux/components/yocto/source/arm/layers/poky/meta/recipes-devtools/pseudo/pseudo_1.7.5.bb, do_compile) failed with exit code '1'
 NOTE: Tasks Summary: Attempted 126 tasks of which 120 didn't need to be rerun and 1 failed.
 Waiting for 0 running tasks to finish:
 
 Summary: 1 task failed:
 virtual:native:/home/osamu/z-turn/petalinux/components/yocto/source/arm/layers/poky/meta/recipes-devtools/pseudo/pseudo_1.7.5.bb, do_compile
 Summary: There was 1 WARNING message shown.
 Summary: There were 2 ERROR messages shown, returning a non-zero exit code.
 ERROR: Failed to build kernel
$ cd build/tmp/work/x86_64-linux/pseudo-native/1.7.5-r0/pseudo-1.7.5
$ grep -s mknod\( *
 pseudo_wrapfuncs.c:__xmknod(int ver, const char *path, mode_t mode, dev_t *dev) {
 pseudo_wrapfuncs.c:             rc = wrap___xmknod(ver, path, mode, dev);
 pseudo_wrapfuncs.c:wrap___xmknod(int ver, const char *path, mode_t mode, dev_t *dev) {
 pseudo_wrapfuncs.c:mknod(const char *path, mode_t mode, dev_t dev) {
 pseudo_wrapfuncs.c:             rc = wrap_mknod(path, mode, dev);
 pseudo_wrapfuncs.c:wrap_mknod(const char *path, mode_t mode, dev_t dev) {
 pseudo_wrapfuncs.h:/* int __xmknod(int ver, const char *path, mode_t mode, dev_t *dev) */
 pseudo_wrapfuncs.h:static int wrap___xmknod(int ver, const char *path, mode_t mode, dev_t *dev);
 pseudo_wrapfuncs.h:/* int mknod(const char *path, mode_t mode, dev_t dev) */
 pseudo_wrapfuncs.h:static int wrap_mknod(const char *path, mode_t mode, dev_t dev);
 pseudo_wrapper_table.c: { /* int __xmknod(int ver, const char *path, mode_t mode, dev_t *dev); */
 pseudo_wrapper_table.c: { /* int mknod(const char *path, mode_t mode, dev_t dev); */
$ 

のようにして https://patchwork.openembedded.org/patch/123001/ の内容を入れたところ、、、今度は リンクで失敗している?

むしろ、pseudo-1.7.5/ports/unix/wrapfuncs.in から mknod と mknodat をなくしちゃえばいいとか、 ないのかな?

すなおに Ubuntu にしろってことは、ある。

Linux ファイルシステムを準備

ここでは VirtualBox 内の Debian9 stretch に arm のエミュレータを入れて実行してみる。

まず 電気回路/z-turn/Linuxの設定 の流れで Linux ルートファイルシステムを作る。 カーネルが 4.6 なので jessie ではなく stretch を入れた。 (stretch では less や、ifconfig のための net-tools を別途インストールする必要がありました。)

LANG:console
$ sudo chroot ~/z-turn/rootfs

これで、qemu 上での root 権限での実行に切り替わります。


Counter: 20462 (from 2010/06/03), today: 1, yesterday: 0