Yocto

什麼是在我的 yocto 圖像中創建 ./var/lib ?

  • October 23, 2017

tl; Dr Yocto 在我的圖像中創建了一個空目錄var/lib,即使它已被ROOTFS_POSTPROCESS_COMMAND. 為什麼,我怎樣才能擺脫它?


我正在嘗試使用一組精確的預定義文件和目錄創建一個 yocto 映像,而沒有通常的 rootfs 文件。首先,我正在嘗試創建一個完全空的圖像。

MACHINE ??= "qemux86"出於測試目的,我正在使用帶有in的干淨 yocto jethro 複製conf/local.conf。讓我們從這個食譜開始

meta-selftest/recipes-test/images/test-empty-image.bb

yocto 複製附帶。這很簡單:

SUMMARY = "An empty image."
IMAGE_INSTALL = ""
IMAGE_LINGUAS = ""
PACKAGE_INSTALL = ""

inherit image

建構bitbake test-empty-image在圖像中為我提供了以下文件:

$ tar tf tmp/deploy/images/qemux86/test-empty-image-qemux86.tar.bz2 
./
./etc/
./etc/version
./etc/default/
./etc/default/postinst
./etc/ld.so.cache
./etc/rpm/
./etc/rpm/platform
./etc/rpm/sysinfo/
./etc/rpm/sysinfo/Dirnames
./etc/timestamp
./var/
./var/lib/

讓我們嘗試通過將其附加到配方中來刪除剩餘的文件和文件夾:

remove_dirs () {
       rm -rf ${IMAGE_ROOTFS}/etc
       rm -rf ${IMAGE_ROOTFS}/var 
}
ROOTFS_POSTPROCESS_COMMAND += "remove_dirs ; "

這適用於etc,但不適用於var

$ tar tf tmp/deploy/images/qemux86/test-empty-image-qemux86.tar.bz2
./
./var/
./var/lib/

為了進行更多調試,我將日誌語句添加到清理函式中:

remove_dirs () {
       echo "################# Listing before rm -rf:" >> ${IMAGE_ROOTFS}/listing.txt
       ls ${IMAGE_ROOTFS} >> ${IMAGE_ROOTFS}/listing.txt
       rm -rf ${IMAGE_ROOTFS}/etc
       rm -rf ${IMAGE_ROOTFS}/var 
       echo "################# Listing after rm -rf:" >> ${IMAGE_ROOTFS}/listing.txt
       ls ${IMAGE_ROOTFS} >> ${IMAGE_ROOTFS}/listing.txt
}

這導致文件listing.txt

################# Listing before rm -rf:
etc
listing.txt
oe_install
var
################# Listing after rm -rf:
listing.txt
oe_install

因此,該目錄var/lib肯定會被 刪除ROOTFS_POSTPROCESS_COMMAND,但顯然稍後會重新創建。我怎樣才能擺脫這個目錄?

這很煩人,過去我也遇到過同樣的問題。在您的圖像配方中執行以下操作:

IMAGE_PREPROCESS_COMMAND += “remove_dirs”

這應該在 ROOTFS 部分之後執行。

有關 IMAGE_PREPROCESS_COMMAND,請參閱Yocto 手冊條目

引用自:https://unix.stackexchange.com/questions/291361