Yocto: cp не может указать файл: нет такого файла или каталога - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь скопировать две папки (содержащие несколько скриптов) в моей целевой rootfs.Я создал собственный слой и собственный рецепт внутри него.Моя структура каталогов выглядит следующим образом:

../sources/meta-company/recipes-bla_2.06/
└── bla
    ├── bla
    │   ├── dir1
    │   │   ├── dir
    │   │   │   └── files.sh
    │   └── dir2
    │       ├── dir
    │       │   ├── files.sql
    │       ├── test.sh
    └── bla_2.06.bb

Мой файл .bb выглядит следующим образом:

DESCRIPTION = " bla "

LICENSE = "CLOSED"

SRC_URI = "file://dir1/ \
           file://dir2/ "

do_install() {
    install -d ${D}/root/dir1
    install -d ${D}/root/dir2
    cp -r --no-dereference --preserve=mode,links -v ${S}/dir1/ ${D}/root/dir1
    cp -r --no-dereference --preserve=mode,links -v ${S}/dir2/ ${D}/root/dir2/
}

FILE_$PN = "/root/"

Я получаю ошибку:

> Log data follows: | DEBUG: Executing shell function do_install | cp:
> cannot stat
> '/home/amol/test/fsl-arm-yocto-bsp/build-cl-som-imx7-fsl-imx-x11/tmp/work/cortexa7hf-neon-poky-linux-gnueabi/bla/1.0-r0/bla-1.0/dir1':
> No such file or directory | WARNING: exit code 1 from a shell command.
> | ERROR: Function failed: do_install (log file is located at
> /home/amol/test/fsl-arm-yocto-bsp/build-cl-som-imx7-fsl-imx-x11/tmp/work/cortexa7hf-neon-poky-linux-gnueabi/seriald/1.0-r0/temp/log.do_install.49808)
> NOTE: recipe bla-1.0-r0: task do_install: Failed NOTE: Tasks Summary:
> Attempted 334 tasks of which 333 didn't need to be rerun and 1 failed.

Яновый для yocto, мой файл .bb правильный? Заранее спасибо.

1 Ответ

0 голосов
/ 02 октября 2018

В вашем разделе do_install есть две проблемы,

  1. ${S} указывает на исходный каталог, но SRC_URI копирует ваш контент в ${WORKDIR}.Поэтому вы должны использовать ${WORKSIR} в разделе установки
  2. Вы пытаетесь скопировать ${S}/dir1/ в ${D}/root/dir1, это означает, что ваша окончательная структура - /root/dir1/dir1/.Вы можете этого не хотеть.

Таким образом, измененная версия будет выглядеть так:

do_install() {
    install -d ${D}/root/dir1
    install -d ${D}/root/dir2
    cp -r --no-dereference --preserve=mode,links -v ${WORKDIR}/dir1/* ${D}/root/dir1/
    cp -r --no-dereference --preserve=mode,links -v ${WORKDIR}/dir2/* ${D}/root/dir2/
}
...