如何使用 Xilinx Petalinux SDK 解决 "Failed To Source Bitbake"

How Can I Solve "Failed To Source Bitbake" With Xilinx Petalinux SDK

我是 运行 Ubuntu 16.04,使用 Xilinx Petalinux 2018.03 SDK。经过多次成功编译后,我现在面临这个错误

$ petalinux-build
[INFO] building project
[INFO] sourcing bitbake
ERROR: Failed to source bitbake
ERROR: Failed to build project

我该如何解决这个问题?

首先您需要进一步调查错误,执行以下操作:

source /opt/pkg/petalinux/2018.3/settings.sh

它将return类似于下面的内容:

PetaLinux environment set to '/opt/pkg/petalinux/2018.3'
INFO: Checking free disk space
INFO: Checking installed tools
INFO: Checking installed development libraries
INFO: Checking network and other services

获取环境设置:

source /opt/pkg/petalinux/2018.3/components/yocto/source/aarch64/environment-setup-aarch64-xilinx-linux

其次是:

devtool --help

在我的例子中,我可以看到更多关于实际错误的信息:

NOTE: Starting bitbake server...
ERROR: Unable to start bitbake server
ERROR: Last 10 lines of server log for this session (/opt/pkg/petalinux/2018.3/components/yocto/source/aarch64/bitbake-cookerdaemon.log):
Traceback (most recent call last):
  File "/opt/pkg/petalinux/2018.3/components/yocto/source/aarch64/layers/core/bitbake/lib/bb/daemonize.py", line 77, in createDaemon
    function()
  File "/opt/pkg/petalinux/2018.3/components/yocto/source/aarch64/layers/core/bitbake/lib/bb/server/process.py", line 433, in _startServer
    self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset)
  File "/opt/pkg/petalinux/2018.3/components/yocto/source/aarch64/layers/core/bitbake/lib/bb/cooker.py", line 178, in __init__
    self.configwatcher = pyinotify.WatchManager()
  File "/opt/pkg/petalinux/2018.3/components/yocto/source/aarch64/layers/core/bitbake/lib/pyinotify.py", line 1764, in __init__
    raise OSError(err % self._inotify_wrapper.str_errno())
OSError: Cannot initialize new instance of inotify, Errno=Too many open files (EMFILE)

ERROR: Unable to start bitbake server
ERROR: Last 10 lines of server log for this session (/opt/pkg/petalinux/2018.3/components/yocto/source/aarch64/bitbake-cookerdaemon.log):
Traceback (most recent call last):
  File "/opt/pkg/petalinux/2018.3/components/yocto/source/aarch64/layers/core/bitbake/lib/bb/daemonize.py", line 77, in createDaemon
    function()
  File "/opt/pkg/petalinux/2018.3/components/yocto/source/aarch64/layers/core/bitbake/lib/bb/server/process.py", line 433, in _startServer
    self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset)
  File "/opt/pkg/petalinux/2018.3/components/yocto/source/aarch64/layers/core/bitbake/lib/bb/cooker.py", line 178, in __init__
    self.configwatcher = pyinotify.WatchManager()
  File "/opt/pkg/petalinux/2018.3/components/yocto/source/aarch64/layers/core/bitbake/lib/pyinotify.py", line 1764, in __init__
    raise OSError(err % self._inotify_wrapper.str_errno())
OSError: Cannot initialize new instance of inotify, **Errno=Too many open files (EMFILE)**

这是指向需要增加的/proc/sys/fs/inotify/max_user_instances。在我的例子中,我通过这样做从 128 增加到 256:

sudo su 
echo 256 > /proc/sys/fs/inotify/max_user_instances

您需要使用“su”成为 root 并更改 mac_user_instances。

出现错误“错误:无法获取 bitbake”以及“错误:无法构建项目”的另一个原因是构建机器上 Python 的可能升级。 Petalinux SDK 要求 python v2 (>= 2.7.3) 用于 2018.3 版本。

您可以在 [YOUR_PROJECT]/build/build.log 下查看,您可能会看到类似于下面的日志:

[INFO] building project
[INFO] sourcing bitbake
SDK environment now set up; additionally you may now run devtool to perform development tasks.
Run devtool --help for further details.
OpenEmbedded requires 'python' to be python v2 (>= 2.7.3), not python v3.
Please set up python v2 as your default 'python' interpreter.
ERROR: Failed to source bitbake
ERROR: Failed to build project

要解决此问题,请删除 /usr/bin 下的符号 link 并确保创建一个指向 Python 2.7:

的新符号
sudo rm /usr/bin/python
sudo ln -s /usr/bin/python2.7 /usr/bin/python