如何让Yocto构建模块fcntl作为Python Build的一部分

时间:2017-08-15 17:39:18

标签: python linux python-2.7 twisted twisted.internet

我使用Yocto在Ubuntu x86,Raspberry Pi,BeagleBone Black和TI AM57XX EVM(开发​​套件)上构建和安装Python和python-twisted。除了AM57XX Dev Kit之外,Python-Twisted导入所有上述机器没有问题。它吐出以下错误:

Python 2.7.11 (default, Aug  7 2017, 12:07:27)
[GCC 5.3.1 20160113] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from txdbus import client,error
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/txdbus/client.py", line 11, in <module>
    from twisted.internet import defer, reactor
  File "/usr/lib/python2.7/site-packages/twisted/internet/reactor.py", line 39, in <module>
  File "/usr/lib/python2.7/site-packages/twisted/internet/epollreactor.py", line 405, in install
  File "/usr/lib/python2.7/site-packages/twisted/internet/epollreactor.py", line 235, in __init__
  File "/usr/lib/python2.7/site-packages/twisted/internet/base.py", line 498, in __init__
  File "/usr/lib/python2.7/site-packages/twisted/internet/posixbase.py", line 289, in installWaker
  File "/usr/lib/python2.7/site-packages/twisted/internet/posixbase.py", line 139, in __init__
  File "/usr/lib/python2.7/site-packages/twisted/internet/fdesc.py", line 25, in setNonBlocking
AttributeError: 'NoneType' object has no attribute 'fcntl'

如果我在主板上启动Python并尝试导入fcntl模块,那确实缺失了:

Python 2.7.11 (default, Aug  7 2017, 12:07:27)
[GCC 5.3.1 20160113] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import fcntl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named fcntl

每台计算机上的包列表都相同。我错过了什么?是否需要以不同的方式配置内核?

当我在谷歌上搜索时,我发现这篇文章: https://lists.yoctoproject.org/pipermail/yocto/2013-May/013953.html

它似乎表明来自Yocto的Python存在问题并且配置错误,因此它不包含fcntl模块:

>> ImportError: No module named fcntl
>> ========
>> 
>> So it looks like the Python included with the SDK is crippled or mis-configured:
> 
> Yeah, the Python we build is split up massively, so clearly the SDK is
> missing the packages that are needed to run bitbake.  But as I said,
> using our SDK to build is over-complicating things as Ubuntu should
> work fine.  What problems were you seeing?

当Yocto构建Python时,log.do_package脚本提到了python-fcntl所需的依赖关系 - 但它们看起来不像错误:

log.do_package:DEBUG: runstrip: 'arm-linux-gnueabihf-strip' --remove-section=.comment --remove-section=.note --strip-unneeded '/home/me/am57xx/build/tmp-external-linaro-toolchain/work/armv7ahf-neon-linux-gnueabi/python/2.7.11-r1/package/usr/lib/python2.7/lib-dynload/fcntl.so'
log.do_package:DEBUG: LIBNAMES: pkg python-fcntl libs 0 bins 0 sonames []
log.do_package:DEBUG: calculating shlib provides for python-fcntl
log.do_package:DEBUG: LIBNAMES: pkg python-fcntl sonames []
log.do_package:DEBUG: calculating shlib requirements for python-fcntl
log.do_package:DEBUG: python-fcntl: Dependency libpython2.7.so.1.0 requires package libpython2 (used by files: /home/me/am57xx/build/tmp-external-linaro-toolchain/work/armv7ahf-neon-linux-gnueabi/python/2.7.11-r1/packages-split/python-fcntl/usr/lib/python2.7/lib-dynload/fcntl.so)
log.do_package:DEBUG: python-fcntl: Dependency libc.so.6 requires package external-linaro-toolchain (used by files: /home/me/am57xx/build/tmp-external-linaro-toolchain/work/armv7ahf-neon-linux-gnueabi/python/2.7.11-r1/packages-split/python-fcntl/usr/lib/python2.7/lib-dynload/fcntl.so)
log.do_package.17147:DEBUG: runstrip: 'arm-linux-gnueabihf-strip' --remove-section=.comment --remove-section=.note --strip-unneeded '/home/me/am57xx/build/tmp-external-linaro-toolchain/work/armv7ahf-neon-linux-gnueabi/python/2.7.11-r1/package/usr/lib/python2.7/lib-dynload/fcntl.so'
log.do_package.17147:DEBUG: LIBNAMES: pkg python-fcntl libs 0 bins 0 sonames []
log.do_package.17147:DEBUG: calculating shlib provides for python-fcntl
log.do_package.17147:DEBUG: LIBNAMES: pkg python-fcntl sonames []
log.do_package.17147:DEBUG: calculating shlib requirements for python-fcntl
log.do_package.17147:DEBUG: python-fcntl: Dependency libpython2.7.so.1.0 requires package libpython2 (used by files: /home/me/am57xx/build/tmp-external-linaro-toolchain/work/armv7ahf-neon-linux-gnueabi/python/2.7.11-r1/packages-split/python-fcntl/usr/lib/python2.7/lib-dynload/fcntl.so)
log.do_package.17147:DEBUG: python-fcntl: Dependency libc.so.6 requires package external-linaro-toolchain (used by files: /home/me/am57xx/build/tmp-external-linaro-toolchain/work/armv7ahf-neon-linux-gnueabi/python/2.7.11-r1/packages-split/python-fcntl/usr/lib/python2.7/lib-dynload/fcntl.so)
log.do_populate_sysroot:DEBUG: runstrip: 'arm-linux-gnueabihf-strip' --remove-section=.comment --remove-section=.note --strip-unneeded '/home/me/am57xx/build/tmp-external-linaro-toolchain/work/armv7ahf-neon-linux-gnueabi/python/2.7.11-r1/sysroot-destdir/usr/lib/python2.7/lib-dynload/fcntl.so'
log.do_populate_sysroot.17148:DEBUG: runstrip: 'arm-linux-gnueabihf-strip' --remove-section=.comment --remove-section=.note --strip-unneeded '/home/me/am57xx/build/tmp-external-linaro-toolchain/work/armv7ahf-neon-linux-gnueabi/python/2.7.11-r1/sysroot-destdir/usr/lib/python2.7/lib-dynload/fcntl.so'

所以我认为它构建了模块,但无法将其打包到我的根文件系统中。

我下载了Python源代码并使用&#34; help&#34;运行configure并搜索了fcntl。

./configure --help | grep fcntl

然而,没有结果!

我可以对Yocto配置或Python Recipe执行哪些操作以将fcntl部署到根文件系统?

2 个答案:

答案 0 :(得分:0)

使用Yocto的最新Recipe构建最新的Python 2.7。

答案 1 :(得分:0)

这是一个旧主题,但是我不得不上下搜索该主题才能解决它。

在我的Yocto“ poky”版本中,fcntl位于目标设备上,

/usr/lib/python2.7/lib-dynload/fcntl.so

Yocto重新排列并删除了一些python模块,以节省我发行版中的空间,包括子进程和fcntl。

要添加它,找到任何创建图像的bb / inc文件,添加以下内容

IMAGE_INSTALL_append = " python-fcntl "

然后重建rootfs或最终映像。该文件应显示在

./build/tmp/.../rootfs/usr/lib/python2.7/lib-dynload/fcntl.so

您可以将此文件复制到目标计算机上进行测试。