bitbake没有调用我的do_install

时间:2017-05-23 15:18:27

标签: yocto bitbake

我有一个配方,应该将运行级别脚本复制到/etc/init.d并从/ etc / rc5创建一个符号链接但是do_install函数似乎没有被调用。

在我的图层的结构下面。问题bb文件是树底部的init-wifi.bb。 bbappends的其他配方工作正常。

/**
 * Where to redirect users after resetting their password.
 *
 * @var string
 */
protected $redirectTo = '/home';

以下是init-wifi.bb配方:

.
├── conf
│   └── layer.conf
├── recipes-connectivity
│   ├── alsa
│   │   ├── alsa-lib
│   │   └── alsa-lib_1.0.29.bbappend
│   └── wpa-supplicant
│       ├── wpa-supplicant
│       │   ├── wpa_supplicant.conf
│       │   └── wpa_supplicant.conf-sane
│       └── wpa-supplicant_2.4.bbappend
├── recipes-core
│   ├── base-files
│   │   ├── base-files
│   │   │   └── profile
│   │   └── base-files_%.bbappend
│   └── init-ifupdown
│       ├── init-ifupdown-1.0
│       │   └── interfaces
│       └── init-ifupdown_1.0.bbappend
└── recipes-my
    └── init-wifi
        ├── files
        │   └── wifi_start.sh
        └── init-wifi.bb

如果我在do_install函数之外的bb文件中引入错误,我会在调用bitbake时遇到错误,所以我知道我的配方文件正在被查找和解析。但是,如果我在do_install函数中引入错误,则不会调用它。另外,我没有看到脚本被安装到工作或图像目录中(在删除有意的调试错误之后)。

如果我强制bitbake使用'bitbake -c install init-wifi'运行配方,它将安装文件“work / image”目录:

SUMMARY = "x"
LICENSE = "CLOSED"
#PR = "r0"
SRC_URI += "file://wifi_start.sh"

#INITSCRIPT_NAME = "wifi_start.sh"
#INITSCRIPT_PARAMS = "defaults 90"

do_install() {
    install -d ${D}${sysconfdir}/init.d
    install -d ${D}${sysconfdir}/rcS.d
    install -d ${D}${sysconfdir}/rc1.d
    install -d ${D}${sysconfdir}/rc2.d
    install -d ${D}${sysconfdir}/rc3.d
    install -d ${D}${sysconfdir}/rc4.d
    install -d ${D}${sysconfdir}/rc5.d


    install -m 0755 ${WORKDIR}/wifi_start.sh  ${D}${sysconfdir}/init.d/

    ln -sf ${D}${syscondir}/init.d/wifi_start.sh {D}${sysconfdir}/rc5.d/S90wifi_start.sh

}

但是,当我的图像构建并安装在我的模块上时,脚本和链接就不存在了。

这几天一直在努力争取,搜索也没有产生太多帮助。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您没有将新配方添加到图像配方中。

IMAGE_INSTALL_append = " init-wifi " 

修改

我曾经这样做,效果很好。 我能看到的差异是:

SRC_URI += "file://wifi_start.sh"

应该是

SRC_URI = "file://wifi_start.sh"

因为您正在创建SRC_URI,而不是添加到现有的。{/ p>

我曾经为我使用的每个文件添加md5校验和。

你应该添加

FILES_${PN} += "${sysconfdir}/profile.d"
FILES_${PN} += "${sysconfdir}/rcS.d"
FILES_${PN} += "${sysconfdir}/rc1.d"
FILES_${PN} += "${sysconfdir}/rc2.d"
FILES_${PN} += "${sysconfdir}/rc3.d"
FILES_${PN} += "${sysconfdir}/rc4.d"
FILES_${PN} += "${sysconfdir}/rc5.d"

来自Yocto man

  

<强>文件

     

放在包中的目录或文件列表。

     

要使用 FILES 变量,请提供标识生成的包的包名称覆盖。然后,提供以空格分隔的文件或路径列表,以标识要作为结果包的一部分包含的文件。这是一个例子:

FILES_${PN} += "${bindir}/mydir1/ ${bindir}/mydir2/myfile"

答案 1 :(得分:1)

LPS,

感谢您的帮助和建议。通过它们,我能够安装文件并创建链接。

我对init-wifi.bb文件进行了建议更改:

SUMMARY = "x"
LICENSE = "CLOSED"
#PR = "r0"
SRC_URI = "file://wifi_start.sh"


FILES_${PN} += "${sysconfdir}/init.d"
FILES_${PN} += "${sysconfdir}/rcS.d"
FILES_${PN} += "${sysconfdir}/rc1.d"
FILES_${PN} += "${sysconfdir}/rc2.d"
FILES_${PN} += "${sysconfdir}/rc3.d"
FILES_${PN} += "${sysconfdir}/rc4.d"
FILES_${PN} += "${sysconfdir}/rc5.d"


do_install() {

install -d ${D}${sysconfdir}/init.d
install -d ${D}${sysconfdir}/rcS.d
install -d ${D}${sysconfdir}/rc1.d
install -d ${D}${sysconfdir}/rc2.d
install -d ${D}${sysconfdir}/rc3.d
install -d ${D}${sysconfdir}/rc4.d
install -d ${D}${sysconfdir}/rc5.d   

install -m 0755 ${WORKDIR}/wifi_start.sh  ${D}${sysconfdir}/init.d/   

ln -sf ${D}${syscondir}/init.d/wifi_start.sh      ${D}${sysconfdir}/rc5.d/S90wifi_start.sh

}

此外,我必须将下面的建议行添加到meta-mylayer / conf / layer.conf

IMAGE_INSTALL_append = " init-wifi "

我收到警告:

警告:QA问题:init-wifi中的符号链接/etc/rc5.d/S90wifi_start.sh指向TMPDIR [symlink-to-sysroot]

所以我想我会重新审视我是如何做这些链接的,但是我已经脱离了死亡中心的位置。再往前走

谢谢!

-Steve