Yocto
什麼是在我的 yocto 圖像中創建 ./var/lib ?
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 手冊條目