在Yocto ext4映像中设置Linux功能

时间:2018-05-16 17:20:02

标签: linux embedded-linux yocto ext4 linux-capabilities

我打算使用“setcap”为Yocto图像中包含的二进制文件设置一些功能。出于某种原因,这里提到的解决方案对我不起作用: Linux capabilities with yocto 。我已经通过在rootfs创建目录中的二进制文件上运行“getcap”来检查它:

<div class="switch switch-1" align="center">
    <label>
        1 OFF
        <input id="Switch1" type="checkbox">
        <span class="lever"></span>
        1 ON
    </label>
</div>

<div class="switch switch-2" align="center">
    <label>
        2 OFF
        <input id="Switch2" type="checkbox">
        <span class="lever"></span>
        2 ON
    </label>
</div>

不会返回任何内容。我也没有在最终运行的SD卡图像中找到这些功能。

接下来,我尝试使用IMAGE_PREPROCESS_COMMAND方法。我在小shell函数中包装了setcap命令,例如:

getcap ${IMAGE_ROOTFS}/usr/bin/mybinary

并将函数名称附加到IMAGE_PREPROCESS_COMMAND。这在某种程度上起作用,现在在{IMAGE_ROOTFS}目录中运行我的二进制文件上的getcap确实显示了正确的上限集。但是我仍然没有在最终运行的SD卡图像中获得这些功能。

另外如果我使用-o loop在目录上挂载rootfs ext4(用于创建最终的sdcard图像),我看不到我的二进制文件的功能。 在我看来,当使用mkfs.ext4创建ext4时,能力会以某种方式丢失。

我不得不将sudo附加到setcap,否则它会抱怨“无法设置CAP_SETFCAP有效功能:不允许操作”。虽然我的理解是IMAGE_PREPROCESS_COMMAND命令是使用fakeroot运行的,所以不应该要求这个sudo。

所以,总结一下我的问题:

  1. 如何获得使用ext4 rootfs image制作的SD卡图像的功能?
  2. 我想使用不需要使用“sudo”的方式。
  3. 我正在使用Yocto Krogoth,目前无法升级。

1 个答案:

答案 0 :(得分:0)

您真的在yocto版本的最终映像或rootfs文件夹中对其进行了测试吗?

我在rootfs文件夹中的文件上运行getcap,那里没有任何设置。

因为yocto使用伪lib来拦截chown,chmod调用,并在sqlite db中跟踪它们(使用LD_PRELOAD进行拦截)。<​​/ p>

因此,没有为“ rootfs”文件夹中的文件设置此属性,而是在创建image / rootfs时添加了该属性。

您可以在配方中使用setcap,必须添加

DEPENDS = "libcap-native"

在您的食谱中。