電気回路/zynq/Petalinux のビルド の履歴(No.1)
更新概要†
Petalinux はオープンソースの Xilinx Linux とは別物。Xilinx が開発している。
登録は必要だが無料で使える。
ダウンロード†
ここから 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...]
&ref(): File not found: "file-export-hardware.png" at page "電気回路/zynq/Petalinux のビルド";
[Include bitstream], [Local to Project] で OK
&ref(): File not found: "export-including-bitstream.png" at page "電気回路/zynq/Petalinux のビルド";
この操作により、
(project dir)/(project-name).sdk/design_1_wrapper_hw_platform_0/*
に design_1_wrapper.bit, ps7_init.* や system.hdf が出力されます。
&ref(): File not found: "exported-hardware-configuration.png" at page "電気回路/zynq/Petalinux のビルド";
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 ...
&ref(): File not found: "petalinux-system-configuration.png" at page "電気回路/zynq/Petalinux のビルド";
とりあえず何も変更せずに 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 をなくしちゃえばいいとか、 ないのかな?
$ cd ~/pseudo-1.7.5 $ cp ports/unix/wrapfuncs.in ports/unix/wrapfuncs.in_orig $ jed ports/unix/wrapfuncs.in - int mknod(const char *path, mode_t mode, dev_t dev); /* flags=AT_SYMLINK_NOFOLLOW */ - int mknodat(int dirfd, const char *path, mode_t mode, dev_t dev); /* flags=AT_SYMLINK_NOFOLLOW */ + #int mknod(const char *path, mode_t mode, dev_t dev); /* flags=AT_SYMLINK_NOFOLLOW */ + #int mknodat(int dirfd, const char *path, mode_t mode, dev_t dev); /* flags=AT_SYMLINK_NOFOLLOW */ $ diff -u ports/unix/wrapfuncs.in_orig ports/unix/wrapfuncs.in ... $ jed ~/z-turn/petalinux/components/yocto/source/arm/layers/poky/meta/recipes-devtools/pseudo/files/pseudo-glibc-rtld-next-workaround.patch Does this work? Index: pseudo-1.7.5/ports/unix/wrapfuncs.in =================================================================== --- pseudo-1.7.5.orig/ports/unix/wrapfuncs.in +++ pseudo-1.7.5/ports/unix/wrapfuncs.in @@ -43,8 +43,8 @@ int mkdirat(int dirfd, const char *path, mode_t mode); /* flags=AT_SYMLINK_NOFOLLOW */ int mkfifo(const char *path, mode_t mode); /* flags=AT_SYMLINK_NOFOLLOW */ int mkfifoat(int dirfd, const char *path, mode_t mode); /* flags=AT_SYMLINK_NOFOLLOW */ -int mknod(const char *path, mode_t mode, dev_t dev); /* flags=AT_SYMLINK_NOFOLLOW */ -int mknodat(int dirfd, const char *path, mode_t mode, dev_t dev); /* flags=AT_SYMLINK_NOFOLLOW */ +#int mknod(const char *path, mode_t mode, dev_t dev); /* flags=AT_SYMLINK_NOFOLLOW */ +#int mknodat(int dirfd, const char *path, mode_t mode, dev_t dev); /* flags=AT_SYMLINK_NOFOLLOW */ int mkstemp(char *template); /* flags=AT_SYMLINK_NOFOLLOW */ int rename(const char *oldpath, const char *newpath); /* flags=AT_SYMLINK_NOFOLLOW */ int renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath); /* flags=AT_SYMLINK_NOFOLLOW */ $ petalinux-build -c kernel ... # やはりエラー $ less build/tmp/work/x86_64-linux/pseudo-native/1.7.5-r0/pseudo-1.7.5/ports/unix/wrapfuncs.in ... int mkfifo(const char *path, mode_t mode); /* flags=AT_SYMLINK_NOFOLLOW */ int mkfifoat(int dirfd, const char *path, mode_t mode); /* flags=AT_SYMLINK_NOFOLLOW */ #int mknod(const char *path, mode_t mode, dev_t dev); /* flags=AT_SYMLINK_NOFOLLOW */ #int mknodat(int dirfd, const char *path, mode_t mode, dev_t dev); /* flags=AT_SYMLINK_NOFOLLOW */ int mkstemp(char *template); /* flags=AT_SYMLINK_NOFOLLOW */ int rename(const char *oldpath, const char *newpath); /* flags=AT_SYMLINK_NOFOLLOW */ ... # 正しくパッチはあったっていた $
すなおに 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 権限での実行に切り替わります。