如何在嵌入式系统上安装缺少的perl模块?

muf*_*fle 3 perl embedded-linux

我在嵌入式系统上运行Linux,特别是在Cyclone V FPGA上使用Yocto Linux.我能够以最基本的形式使用Perl,但我无法加载任何Perl模块.例如,在尝试使用该GetOpt::Long模块时,我收到以下错误

root@socfpga_cyclone5:/mnt/sdcard# ./test.pl
Can't locate Getopt/Long.pm in @INC (@INC contains:
  /etc/perl
  /usr/lib/perl/site_perl/5.14.2/
  /usr/lib/perl/site_perl/5.14.2
  /usr/lib/perl/vendor_perl/5.14.2/
  /usr/lib/perl/vendor_perl/5.14.2
  /usr/lib/perl/5.14.2/
  /usr/lib/perl/5.14.2
  /usr/local/lib/site_perl
  /usr/lib/perl/5.14.2
  .) at ./test.pl line 3.
BEGIN failed--compilation aborted at ./test.pl line 3.
Run Code Online (Sandbox Code Playgroud)

有谁知道如何安装这些模块?模块是否完全依赖于硬件架构?.pm从某些来源复制并粘贴文件是否合理(我可以在哪里找到并下载这些.pm文件)?

Rob*_*oun 8

我知道你的问题已经超过两年了,但这是一个很好的问题,我很难过没有人回答.

perl生态系统非常庞大,全功能perl安装的磁盘占用空间是嵌入式系统的一个问题.因此,添加perl到图像时仅安装最小系统.其他perl模块可用作bitbake包.

大多数情况下,您可以从配方中找出配方提供的包装,但perl配方非常复杂.查找perl配方构建的包的最简单方法是构建它(bitbake perl)然后查看packages-split目录,您可以在bitbake工作目录中找到它.对于我的系统(cortex A8)看起来像这样:

$ ls -1 /poky/build/tmp/work/cortexa8hf-vfp-neon-poky-linux-gnueabi/perl/5.20.0-r1/packages-split
perl
perl-dbg
perl-dev
perl-doc
perl-lib
perl-lib.shlibdeps
perl-misc
perl-misc.shlibdeps
perl-module-anydbm-file
perl-module-app-cpan
perl-module-app-prove
perl-module-app-prove-state
(...)
Run Code Online (Sandbox Code Playgroud)

如果列出了您想要的模块,只需将其添加到IMAGE_INSTALL这样:

IMAGE_INSTALL += "\
    perl \
    perl-module-base \
    perl-module-bytes \
    perl-module-data-dumper \
    perl-module-digest-md5 \
    perl-module-file-spec \
    perl-module-file-spec-functions \
    perl-module-findbin \
    perl-module-getopt-long \
    (...)"
Run Code Online (Sandbox Code Playgroud)

如果您想要一个尚未构建的模块,您需要使用cpan该类为其创建自己的配方.参见范例poky/meta/recipes-extended/perl/poky/meta/recipes-lsb4/perl.

编辑,我对在嵌入式系统上使用perl感到非常满意.最大的问题是延迟依赖解析直到运行时.太容易混淆并最终导致Can't locate foobar.pm in @INC错误.


yst*_*sth 0

看看这个帖子:https://lists.yoctoproject.org/pipermail/yocto/2013-July/015198.html

听起来 perl 模块已经被首先需要的任何其他东西打包了,但有人正在努力使它们单独可用。

有些模块只需复制即可安装;其他人首先需要编译器或其他构建步骤。您最好使用 yocto 项目提供的任何工具。