Compiling

建構 linux-menuconfig 導致:“*** 更新配置時出錯。”

  • May 1, 2019

我嘗試使用 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 或類似的)或文件系統寫入權限。我認為這可能是您的容器無法寫入設備的第三個原因。

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