建構 linux-menuconfig 導致:“*** 更新配置時出錯。”
我嘗試使用 Docker 使用 Buildroot 建構 Linux 核心。我創建了一個簡單的 Docker 映像:
FROM debian:7 MAINTAINER OrangeTux RUN apt-get update && \ apt-get install -y \ build-essential \ bash \ bc \ binutils \ build-essential \ bzip2 \ cpio \ g++ \ gcc \ git \ gzip \ make \ libncurses5-dev \ patch \ perl \ python \ rsync \ sed \ tar \ unzip \ wget WORKDIR /root RUN git clone git://git.buildroot.net/buildroot WORKDIR /root/buildroot CMD ["/bin/bash"]
我想在容器停止時保留
dl/
,output/build/
所以我不必每次都下載和編譯所有依賴項。我還希望在我的主機上建構產品。因此我像這樣啟動容器:
$ docker run -ti -v $(pwd)/dl:/root/buildroot/dl -v \ $(pwd)/output/build:/root/buildroot/output/build -v \ $(pwd)/output/images:/root/buildroot/output/images orangetux/buildroot
我能夠執行
make menuconfig
為 Buildroot 建構配置的程序。我對預設設置做了一些修改。這是輸出make savedefconfig
:BR2_arm=y BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_DEFCONFIG="at91_dt"
下一步是建構
linux-menuconfig
. 此操作失敗,我不知道出了什麼問題:$ make linux-menuconfig /usr/bin/make -j1 HOSTCC="/usr/bin/gcc" HOSTCXX="/usr/bin/g++" silentoldconfig make[1]: Entering directory `/root/buildroot' BR2_DEFCONFIG='' KCONFIG_AUTOCONFIG=/root/buildroot/output/build/buildroot-config/auto.conf KCONFIG_AUTOHEADER=/root/buildroot/output/build/buildroot-config/autoconf.h KCONFIG_TRISTATE=/root/buildroot/output/build/buildroot-config/tristate.config BR2_CONFIG=/root/buildroot/.config BR2_EXTERNAL=support/dummy-external SKIP_LEGACY= /root/buildroot/output/build/buildroot-config/conf --silentoldconfig Config.in *** Error during update of the configuration. make[1]: *** [silentoldconfig] Error 1 make[1]: Leaving directory `/root/buildroot' make: *** [/root/buildroot/output/build/buildroot-config/auto.conf] Error 2
該文件
/root/buildroot/output/build/buildroot-config/auto.conf
不存在。為什麼文件不存在,我該如何建構
linux-menuconfig
?
經過大量調試後,我發現在我的主機系統上安裝一個文件夾
/root/buildroot/output/
會導致問題。刪除此安裝,make linux-menuconfig
是可能的。進一步調試顯示,
/root/buildroot/output/build
在容器中安裝主機文件夾是問題所在。我不知道為什麼。
這聽起來像是權限問題。使用者權限(chmod 或 acl)、MAC(強制訪問控制,通常是 selinux 或類似的)或文件系統寫入權限。我認為這可能是您的容器無法寫入設備的第三個原因。