《Linux內存管理:實驗驅動的深度探索》【附錄】【實驗環境搭建 7】【使用buildroot方式構建文件系統】

1. 使用Buildroot 構建的優勢

使用 Buildroot 構建 rootfs 的優點在于 快速、簡潔、可裁剪、可重復,特別適合 中小型嵌入式 Linux 項目(如車機、路由器、工業控制設備、IoT 網關)。它幫助開發者避免繁瑣的手動編譯和集成工作,專注于實際產品功能開發。

1. 一體化構建工具鏈

  • 交叉工具鏈自動構建:Buildroot 可以自動下載、編譯并配置交叉編譯工具鏈(gcc、glibc/musl/uClibc、binutils 等),避免開發者手動配置。

  • 環境一致性:開發環境和目標 rootfs 保持強一致性,減少 “在我機器上能編譯,但在板子上跑不通” 的問題。


2. 簡化 RootFS 構建流程

  • 自動拉取和編譯軟件包:Buildroot 內置大量軟件包的 recipe,開發者只需選擇需要的包,它會自動下載源碼、編譯并打包進 rootfs。

  • 根文件系統自動生成:支持多種文件系統格式(ext2/3/4、squashfs、jffs2、cpio.gz 等),直接生成可燒錄或用于 initramfs 的 rootfs。

  • Kconfig 配置系統:通過 menuconfig 界面,直觀地選擇需要的功能和包,類似內核配置。


3. 可裁剪性與定制化

  • 最小化系統:只包含需要的軟件包,rootfs 可以非常小,幾 MB 甚至更小,適合資源受限的嵌入式設備。

  • 靈活裁剪:開發者可以精確控制哪些庫和工具被編譯進去,避免冗余。

  • 多 C 庫選擇:支持 glibc、musl、uClibc-ng,不同場景可權衡功能與體積。


4. 高度自動化和可重復性

  • 一鍵全自動構建:從工具鏈到內核到 rootfs 到 bootloader,整個系統可一次性構建。

  • 可重復性強:所有源代碼和補丁統一管理,版本固定,確保不同人/機器構建結果一致。

  • 快速清理與重建:通過 make clean, make distclean 等命令快速恢復和重新構建。


5. 與 Yocto 相比的優勢

  • 學習曲線更低:Buildroot 比 Yocto 簡單直觀,適合中小型嵌入式項目。

  • 構建速度快:由于不使用復雜的依賴緩存機制(如 Yocto 的 sstate-cache),Buildroot 的構建通常更快。

  • 更輕量:適合單板、單產品項目,而不是大型多產品線。


6. 社區與生態支持

  • 活躍社區:持續維護和更新,兼容大量主流開源包。

  • 良好文檔:官方手冊和 wiki 完善,便于入門和排錯。

2. 制作rootfs

1. 下載 buildroot

可通過 官網地址為 https://buildroot.org/ 來下載 對應的 buildroot 版本。

或者:

git clone https://gitlab.com/buildroot.org/buildroot.gitgit pull

2. 配置 buildroot

使用make menuconfig配置選項時,如果退格鍵無法刪除內容,可以加按Ctrl鍵,即使用Ctrl+backspace組合鍵。

1. Target options

arm64 的配置

Target optionsTarget Architecture (AArch64 (little endian))Target Architecture Variant (cortex-A57) //CPU架構Floating point strategy (FP-ARMv8)MMU Page Size (4KB)Target Binary Format (ELF)

arm32 的配置

Target optionsTarget Architecture (ARM (little endian)) Target Architecture Variant (cortex-A9) //CPU架構Target ABI (EABI)Floating point strategy (Soft float) //沒有FPU的選擇軟浮點ARM instruction set (ARM)Target Binary Format (ELF)

2. Toolchain

arm64 的配置

 ToolchainToolchain type (Buildroot toolchain)(buildroot) custom toolchain vendor nameC library (glibc)Kernel Headers (Linux 5.4.x kernel headers) GCC compiler Version (gcc 12.x)Enable C++ supportBuild cross gdb for the host

arm32 配置

ToolchainToolchain type (Buildroot toolchain) //使用內置編譯器C library (glibc)Kernel Headers (Linux 6.6.x kernel headers)GCC compiler Version (gcc 12.x)Enable C++ supportBuild cross gdb for the host

3. System configuration

System configuration(leo-test) System hostname(Welcome to leo-test pc.) System banner //歡迎語Init system (systemd) //使用systemd作為init進程(1) Root password //設置密碼/bin/sh (bash) //選擇shell進程(eth0) Network interface to configure through DHCP(C en_US) Locales to keep

4. Target packages

Target packages→ Compressors and decompressors[*] gzip[*] unzip→ Debugging, profiling and benchmark[*] gdb→ Text editors and viewers[*] vim→ Networking applications[*] iproute2 [*] net-tools[*] netstat-nat[*] openssh[*] socat[*] tftpd[*] wget

5.Kernel

如果編譯其他 包,需要 內核參與可以配置

Kernel[*] Linux KernelKernel version (Custom version)  // 這里選擇用戶自定義版本(5.4.291) Kernel version // 指定要編譯的內核版本Kernel configuration (Use the architecture default configuration) // 使用當前 arm64 默認的 defconfig[*]   Needs host libelf // 選中 libelf

6. 特殊備注

Bootloaders不選中

下面是我對于 arm64 的配置

~/data_4t/github/buildroot$ vim .config

BR2_HAVE_DOT_CONFIG=y
BR2_HOST_GCC_AT_LEAST_4_9=y
BR2_HOST_GCC_AT_LEAST_5=y
BR2_HOST_GCC_AT_LEAST_6=y
BR2_HOST_GCC_AT_LEAST_7=y
BR2_HOST_GCC_AT_LEAST_8=y
BR2_HOST_GCC_AT_LEAST_9=y
BR2_NEEDS_HOST_UTF8_LOCALE=yBR2_ARCH_IS_64=y
BR2_USE_MMU=y
BR2_aarch64=y
BR2_ARCH_HAS_TOOLCHAIN_BUILDROOT=y
BR2_ARCH="aarch64"
BR2_NORMALIZED_ARCH="arm64"
BR2_ENDIAN="LITTLE"
BR2_GCC_TARGET_ABI="lp64"
BR2_GCC_TARGET_CPU="cortex-a57"
BR2_BINFMT_SUPPORTS_SHARED=y
BR2_READELF_ARCH_NAME="AArch64"
BR2_ARM_CPU_HAS_FPU=y
BR2_ARM_CPU_HAS_VFPV2=y
BR2_ARM_CPU_HAS_VFPV3=y
BR2_ARM_CPU_HAS_VFPV4=y
BR2_ARM_CPU_HAS_FP_ARMV8=y
BR2_ARM_CPU_ARMV8A=yBR2_cortex_a57=yBR2_ARM_FPU_FP_ARMV8=y
BR2_ARM64_PAGE_SIZE_4K=y
BR2_ARM64_PAGE_SIZE="4K"
BR2_BINFMT_ELF=yBR2_TOOLCHAIN=y
BR2_TOOLCHAIN_USES_GLIBC=y
BR2_TOOLCHAIN_BUILDROOT=yBR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot"
BR2_TOOLCHAIN_BUILDROOT_GLIBC=y
BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc"BR2_KERNEL_HEADERS_5_4=y
BR2_DEFAULT_KERNEL_HEADERS="5.4.291"
BR2_PACKAGE_LINUX_HEADERS=y
BR2_PACKAGE_MUSL_ARCH_SUPPORTS=y
BR2_PACKAGE_MUSL_SUPPORTS=y
BR2_PACKAGE_UCLIBC_ARCH_SUPPORTS=y
BR2_PACKAGE_UCLIBC_SUPPORTS=y
BR2_PACKAGE_GLIBC_ARCH_SUPPORTS=y
BR2_PACKAGE_GLIBC_SUPPORTS=yBR2_PACKAGE_GLIBC=yBR2_PACKAGE_HOST_BINUTILS_SUPPORTS_CFI=y
BR2_BINUTILS_VERSION_2_43_X=y
BR2_BINUTILS_VERSION="2.43.1"
BR2_BINUTILS_EXTRA_CONFIG_OPTIONS=""BR2_GCC_VERSION_12_X=y
BR2_GCC_VERSION="12.4.0"
BR2_EXTRA_GCC_CONFIG_OPTIONS=""
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_PACKAGE_GCC_FINAL=y
BR2_PACKAGE_HOST_GDB_ARCH_SUPPORTS=yBR2_PACKAGE_HOST_GDB=y
BR2_GDB_VERSION_15=y
BR2_GDB_VERSION="15.1"BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS=y
BR2_TOOLCHAIN_SUPPORTS_VARIADIC_MI_THUNK=y
BR2_USE_WCHAR=y
BR2_ENABLE_LOCALE=y
BR2_INSTALL_LIBSTDCPP=y
BR2_TOOLCHAIN_HAS_THREADS=y
BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y
BR2_TOOLCHAIN_HAS_THREADS_NPTL=y
BR2_TOOLCHAIN_HAS_SSP=y
BR2_TOOLCHAIN_HAS_SSP_STRONG=y
BR2_TOOLCHAIN_HAS_UCONTEXT=y
BR2_TOOLCHAIN_SUPPORTS_PIE=y
BR2_TOOLCHAIN_EXTRA_LIBS=""
BR2_TOOLCHAIN_HAS_FULL_GETTEXT=y
BR2_TARGET_OPTIMIZATION=""
BR2_TARGET_LDFLAGS=""
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_9=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_11=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_13=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_14=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_16=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_1=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_2=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_3=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4=y
BR2_TOOLCHAIN_HEADERS_AT_LEAST="5.4"
BR2_TOOLCHAIN_GCC_AT_LEAST_4_3=y
BR2_TOOLCHAIN_GCC_AT_LEAST_4_4=y
BR2_TOOLCHAIN_GCC_AT_LEAST_4_5=y
BR2_TOOLCHAIN_GCC_AT_LEAST_4_6=y
BR2_TOOLCHAIN_GCC_AT_LEAST_4_7=y
BR2_TOOLCHAIN_GCC_AT_LEAST_4_8=y
BR2_TOOLCHAIN_GCC_AT_LEAST_4_9=y
BR2_TOOLCHAIN_GCC_AT_LEAST_5=y
BR2_TOOLCHAIN_GCC_AT_LEAST_6=y
BR2_TOOLCHAIN_GCC_AT_LEAST_7=y
BR2_TOOLCHAIN_GCC_AT_LEAST_8=y
BR2_TOOLCHAIN_GCC_AT_LEAST_9=y
BR2_TOOLCHAIN_GCC_AT_LEAST_10=y
BR2_TOOLCHAIN_GCC_AT_LEAST_11=y
BR2_TOOLCHAIN_GCC_AT_LEAST_12=y
BR2_TOOLCHAIN_GCC_AT_LEAST="12"
BR2_TOOLCHAIN_HAS_MNAN_OPTION=y
BR2_TOOLCHAIN_HAS_SYNC_1=y
BR2_TOOLCHAIN_HAS_SYNC_2=y
BR2_TOOLCHAIN_HAS_SYNC_4=y
BR2_TOOLCHAIN_HAS_SYNC_8=y
BR2_TOOLCHAIN_HAS_LIBATOMIC=y
BR2_TOOLCHAIN_HAS_ATOMIC=yBR2_CURL="curl -q --ftp-pasv --retry 3 --connect-timeout 10"
BR2_WGET="wget -nd -t 3 --connect-timeout=10"
BR2_SVN="svn --non-interactive --config-option servers:global:http-timeout=10"
BR2_BZR="bzr"
BR2_GIT="git"
BR2_CVS="cvs"
BR2_LOCALFILES="cp"
BR2_SCP="scp -o ConnectTimeout=10"
BR2_SFTP="sftp -o ConnectTimeout=10"
BR2_HG="hg"
BR2_ZCAT="gzip -d -c"
BR2_BZCAT="bzcat"
BR2_XZCAT="xzcat"
BR2_LZCAT="lzip -d -c"
BR2_ZSTDCAT="zstdcat"
BR2_TAR_OPTIONS=""
BR2_DEFCONFIG="/home/leo/data_4t/github/buildroot/configs/qemu_aarch64_virt_defconfig"
BR2_DL_DIR="$(TOPDIR)/dl"
BR2_HOST_DIR="$(BASE_DIR)/host"BR2_PRIMARY_SITE=""
BR2_BACKUP_SITE="https://sources.buildroot.net"
BR2_KERNEL_MIRROR="https://cdn.kernel.org/pub"
BR2_GNU_MIRROR="https://ftpmirror.gnu.org"
BR2_LUAROCKS_MIRROR="http://rocks.moonscript.org"
BR2_CPAN_MIRROR="https://cpan.metacpan.org"
BR2_JLEVEL=0
BR2_STRIP_strip=y
BR2_STRIP_EXCLUDE_FILES=""
BR2_STRIP_EXCLUDE_DIRS=""
BR2_OPTIMIZE_2=yBR2_SHARED_LIBS=y
BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk"
BR2_GLOBAL_PATCH_DIR="board/qemu/patches"BR2_DOWNLOAD_FORCE_CHECK_HASHES=yBR2_PIC_PIE_ARCH_SUPPORTS=y
BR2_PIC_PIE=y
BR2_SSP_STRONG=y
BR2_SSP_OPTION="-fstack-protector-strong"
BR2_RELRO_FULL=y
BR2_FORTIFY_SOURCE_ARCH_SUPPORTS=y
BR2_FORTIFY_SOURCE_1=yBR2_ROOTFS_SKELETON_DEFAULT=y
BR2_TARGET_GENERIC_HOSTNAME="leo-debug-linux"
BR2_TARGET_GENERIC_ISSUE="Welcome to leo debug linux pc."
BR2_TARGET_GENERIC_PASSWD_SHA256=y
BR2_TARGET_GENERIC_PASSWD_METHOD="sha-256"BR2_INIT_SYSTEMD=yBR2_INIT_SYSTEMD_POPULATE_TMPFILES=y
BR2_PACKAGE_SYSTEMD_DEFAULT_TARGET="multi-user.target"BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt"
BR2_ROOTFS_MERGED_USR=y
BR2_TARGET_ENABLE_ROOT_LOGIN=y
BR2_TARGET_GENERIC_ROOT_PASSWD="1"
BR2_SYSTEM_BIN_SH_BASH=y
BR2_SYSTEM_BIN_SH="bash"
BR2_TARGET_GENERIC_GETTY=y
BR2_TARGET_GENERIC_GETTY_PORT="console"
BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP=y
BR2_TARGET_GENERIC_GETTY_BAUDRATE="0"
BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y
BR2_SYSTEM_DHCP="eth0"
BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin"
BR2_ENABLE_LOCALE_PURGE=y
BR2_ENABLE_LOCALE_WHITELIST="C en_US"
BR2_GENERATE_LOCALE=""
BR2_TARGET_TZ_INFO=y
BR2_TARGET_TZ_ZONELIST="default"
BR2_TARGET_LOCALTIME="Etc/UTC"
BR2_ROOTFS_USERS_TABLES=""
BR2_ROOTFS_OVERLAY=""
BR2_ROOTFS_PRE_BUILD_SCRIPT=""
BR2_ROOTFS_POST_BUILD_SCRIPT=""
BR2_ROOTFS_POST_FAKEROOT_SCRIPT=""
BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh"
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)"
BR2_ROOTFS_POST_IMAGE_SCRIPT_ARGS=""BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.4.291"
BR2_LINUX_KERNEL_VERSION="5.4.291"
BR2_LINUX_KERNEL_PATCH=""
BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES=""
BR2_LINUX_KERNEL_CUSTOM_LOGO_PATH=""
BR2_LINUX_KERNEL_IMAGE=y
BR2_LINUX_KERNEL_GZIP=y
BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=yBR2_PACKAGE_BUSYBOX=y
BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config"
BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES=""
BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
BR2_PACKAGE_SKELETON=y
BR2_PACKAGE_HAS_SKELETON=y
BR2_PACKAGE_PROVIDES_SKELETON="skeleton-init-systemd"
BR2_PACKAGE_SKELETON_INIT_COMMON=y
BR2_PACKAGE_SKELETON_INIT_SYSTEMD=yBR2_PACKAGE_FFMPEG_ARCH_SUPPORTS=y
BR2_PACKAGE_KODI_ARCH_SUPPORTS=yBR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC=yBR2_PACKAGE_BZIP2=y
BR2_PACKAGE_GZIP=y
BR2_PACKAGE_UNZIP=y
BR2_PACKAGE_XZ=yBR2_PACKAGE_BCC=y
BR2_PACKAGE_BLKTRACE=y
BR2_PACKAGE_BPFTOOL_ARCH_SUPPORTS=y
BR2_PACKAGE_BPFTRACE_ARCH_SUPPORTS=y
BR2_PACKAGE_BPFTRACE=yBR2_PACKAGE_DELVE_ARCH_SUPPORTS=y
BR2_PACKAGE_FWTS_ARCH_SUPPORTS=y
BR2_PACKAGE_GDB_ARCH_SUPPORTS=y
BR2_PACKAGE_GDB=y
BR2_PACKAGE_GDB_SERVER=y
BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y
BR2_PACKAGE_KEXEC_ARCH_SUPPORTS=y
BR2_PACKAGE_LIBBPF=y
BR2_PACKAGE_LIBTRACEEVENT=y
BR2_PACKAGE_LIBTRACEFS=y
BR2_PACKAGE_LSOF=y
BR2_PACKAGE_LTP_TESTSUITE_ARCH_SUPPORTS=y
BR2_PACKAGE_LTRACE_ARCH_SUPPORTS=y
BR2_PACKAGE_LTRACE=y
BR2_PACKAGE_MEMSTAT=y
BR2_PACKAGE_NETPERF=y
BR2_PACKAGE_OPROFILE_ARCH_SUPPORTS=y
BR2_PACKAGE_PERFTEST_ARCH_SUPPORTS=y
BR2_PACKAGE_PLY_ARCH_SUPPORTS=yBR2_PACKAGE_PTM2HUMAN_ARCH_SUPPORTS=y
BR2_PACKAGE_STRACE=yBR2_PACKAGE_TCF_AGENT_ARCH="a64"
BR2_PACKAGE_TCF_AGENT_ARCH_SUPPORTS=y
BR2_PACKAGE_TRACE_CMD=y
BR2_PACKAGE_TRINITY_ARCH_SUPPORTS=y
BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS=y
BR2_PACKAGE_UFTRACE=y
BR2_PACKAGE_VALGRIND_ARCH_SUPPORTS=yBR2_PACKAGE_BINUTILS=y
BR2_PACKAGE_CMAKE_ARCH_SUPPORTS=y
BR2_PACKAGE_FLEX=y
BR2_PACKAGE_PROVIDES_HOST_GETTEXT="host-gettext-tiny"
BR2_PACKAGE_GREP=y
BR2_PACKAGE_LIBTOOL=y
BR2_PACKAGE_MAKE=y
BR2_PACKAGE_SED=y
BR2_PACKAGE_TREE=yBR2_PACKAGE_NFS_UTILS=y
BR2_PACKAGE_NFS_UTILS_RPC_NFSD=y
BR2_PACKAGE_SSHFS=yBR2_PACKAGE_NETSURF_ARCH_SUPPORTS=yBR2_PACKAGE_FB_TEST_APP=y
BR2_PACKAGE_FBDUMP=yBR2_PACKAGE_QT5_JSCORE_AVAILABLE=y
BR2_PACKAGE_QT6_ARCH_SUPPORTS=yBR2_PACKAGE_DBUS=y
BR2_PACKAGE_PROVIDES_UDEV="systemd"BR2_PACKAGE_FLASHROM_ARCH_SUPPORTS=y
BR2_PACKAGE_KBD=y
BR2_PACKAGE_PCIUTILS=y
BR2_PACKAGE_SEDUTIL_ARCH_SUPPORTS=yBR2_PACKAGE_HAS_UDEV=yBR2_PACKAGE_HOST_ERLANG_ARCH_SUPPORTS=y
BR2_PACKAGE_ERLANG_ARCH_SUPPORTS=y
BR2_PACKAGE_PROVIDES_HOST_LUAINTERPRETER="host-lua"
BR2_PACKAGE_LUAJIT_ARCH_SUPPORTS=y
BR2_PACKAGE_HOST_MONO_ARCH_SUPPORTS=y
BR2_PACKAGE_MONO_ARCH_SUPPORTS=y
BR2_PACKAGE_NODEJS_ARCH_SUPPORTS=yBR2_PACKAGE_HOST_OPENJDK_BIN_ARCH_SUPPORTS=y
BR2_PACKAGE_OPENJDK_ARCH_SUPPORTS=yBR2_PACKAGE_PHP_ARCH_SUPPORTS=y
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON3_PYC_ONLY=yBR2_PACKAGE_PYTHON3_CURSES=y
BR2_PACKAGE_PYTHON3_UNICODEDATA=yBR2_PACKAGE_PYTHON_GREENLET_ARCH_SUPPORTS=y
BR2_PACKAGE_PYTHON_GRPCIO_ARCH_SUPPORTS=y
BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS=yBR2_PACKAGE_SWIPL_ARCH_SUPPORTS=yBR2_PACKAGE_ALSA_LIB=y
BR2_PACKAGE_ALSA_LIB_DEVDIR="/dev/snd"
BR2_PACKAGE_ALSA_LIB_PCM_PLUGINS="all"
BR2_PACKAGE_ALSA_LIB_CTL_PLUGINS="all"
BR2_PACKAGE_ALSA_LIB_ALOAD=y
BR2_PACKAGE_ALSA_LIB_MIXER=y
BR2_PACKAGE_ALSA_LIB_PCM=y
BR2_PACKAGE_ALSA_LIB_RAWMIDI=y
BR2_PACKAGE_ALSA_LIB_HWDEP=y
BR2_PACKAGE_ALSA_LIB_SEQ=y
BR2_PACKAGE_ALSA_LIB_UCM=y
BR2_PACKAGE_ALSA_LIB_ALISP=y
BR2_PACKAGE_ALSA_LIB_OLD_SYMBOLS=y
BR2_PACKAGE_ALSA_LIB_TOPOLOGY=y
BR2_PACKAGE_FDK_AAC_ARCH_SUPPORTS=y
BR2_PACKAGE_GTKIOSTREAM_ARCH_SUPPORTS=y
BR2_PACKAGE_OPENAL_ARCH_SUPPORTS=y
BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING_ARCH_SUPPORTS=yBR2_PACKAGE_ZLIB_NG_ARCH_SUPPORTS=y
BR2_PACKAGE_ZLIB=y
BR2_PACKAGE_LIBZLIB=y
BR2_PACKAGE_HAS_ZLIB=y
BR2_PACKAGE_PROVIDES_ZLIB="libzlib"
BR2_PACKAGE_PROVIDES_HOST_ZLIB="host-libzlib"BR2_PACKAGE_BOTAN_ARCH_SUPPORTS=y
BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS=y
BR2_PACKAGE_LIBGPG_ERROR_SYSCFG="aarch64-unknown-linux-gnu"
BR2_PACKAGE_LIBSPDM_CPU_FAMILY="aarch64"
BR2_PACKAGE_LIBSPDM_ARCH_SUPPORTS=y
BR2_PACKAGE_LIBXCRYPT=y
BR2_PACKAGE_LIBRESSL_ARCH_SUPPORTS=y
BR2_PACKAGE_OPENSSL=y
BR2_PACKAGE_LIBOPENSSL=y
BR2_PACKAGE_LIBOPENSSL_TARGET_ARCH="linux-aarch64"
BR2_PACKAGE_LIBOPENSSL_ENABLE_CHACHA=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_RC2=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_RC4=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_MD2=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_MD4=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_MDC2=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_BLAKE2=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_IDEA=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_SEED=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_DES=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_RMD160=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_WHIRLPOOL=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_BLOWFISH=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_SSL=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_SSL3=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_WEAK_SSL=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_PSK=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_CAST=y
BR2_PACKAGE_LIBOPENSSL_UNSECURE=y
BR2_PACKAGE_LIBOPENSSL_DYNAMIC_ENGINE=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_COMP=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_ARGON2=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_CACHED_FETCH=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_CMP=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_THREAD_POOL=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_ECX=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_LOADER_ENGINE=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_PADLOCK_ENGINE=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_MODULE=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_QUIC=y
BR2_PACKAGE_LIBOPENSSL_SECURE_MEMORY=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_SIV=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_SM2_PRECOMP_TABLE=y
BR2_PACKAGE_LIBOPENSSL_ENABLE_SSL_TRACE=y
BR2_PACKAGE_HAS_OPENSSL=y
BR2_PACKAGE_PROVIDES_OPENSSL="libopenssl"
BR2_PACKAGE_PROVIDES_HOST_OPENSSL="host-libopenssl"
BR2_PACKAGE_WOLFSSL_ASM_SUPPORTS=yBR2_PACKAGE_ROCKSDB_ARCH_SUPPORTS=yBR2_PACKAGE_SQLITE=yBR2_PACKAGE_LIBCONFIG=y
BR2_PACKAGE_LIBCONFUSE=y
BR2_PACKAGE_LIBFUSE=y
BR2_PACKAGE_LIBFUSE3=y
BR2_PACKAGE_LIBLOCKFILE=y
BR2_PACKAGE_LIBNFS=y
BR2_PACKAGE_LIBSYSFS=y
BR2_PACKAGE_LOCKDEV=yBR2_PACKAGE_BAYER2RGB_NEON_ARCH_SUPPORTS=yBR2_PACKAGE_FLUTTER_ENGINE_ARCH_SUPPORTS=yBR2_PACKAGE_FONTCONFIG=y
BR2_PACKAGE_FREETYPE=yBR2_PACKAGE_JPEG_SIMD_SUPPORT=y
BR2_PACKAGE_JPEG=y
BR2_PACKAGE_JPEG_TURBO=y
BR2_PACKAGE_HAS_JPEG=y
BR2_PACKAGE_PROVIDES_JPEG="jpeg-turbo"
BR2_PACKAGE_LCMS2=yBR2_PACKAGE_LIBVPL_ARCH_SUPPORTS=yBR2_PACKAGE_WEBKITGTK_ARCH_SUPPORTS=yBR2_PACKAGE_WPEWEBKIT_ARCH_SUPPORTS=yBR2_PACKAGE_CPUINFO_ARCH_SUPPORTS=y
BR2_PACKAGE_GNU_EFI_ARCH_SUPPORTS=y
BR2_PACKAGE_LIBAIO=yBR2_PACKAGE_MRAA_ARCH_SUPPORTS=y
BR2_PACKAGE_NE10_ARCH_SUPPORTS=y
BR2_PACKAGE_OPENCSD_ARCH_SUPPORTS=yBR2_PACKAGE_BOOTSTRAP=y
BR2_PACKAGE_DUKTAPE=yBR2_PACKAGE_EXPAT=yBR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS=yBR2_PACKAGE_LIBOPENH264_ARCH_SUPPORTS=yBR2_PACKAGE_DPDK_ARCH_SUPPORTS=y
BR2_PACKAGE_DPDK=y
BR2_PACKAGE_DPDK_EXAMPLES=y
BR2_PACKAGE_DPDK_TESTS=y
BR2_PACKAGE_LIBCURL=y
BR2_PACKAGE_LIBCURL_CURL=y
BR2_PACKAGE_LIBCURL_VERBOSE=y
BR2_PACKAGE_LIBCURL_PROXY_SUPPORT=y
BR2_PACKAGE_LIBCURL_COOKIES_SUPPORT=y
BR2_PACKAGE_LIBCURL_EXTRA_PROTOCOLS_FEATURES=y
BR2_PACKAGE_LIBCURL_OPENSSL=y
BR2_PACKAGE_LIBDNET=y
BR2_PACKAGE_LIBMNL=y
BR2_PACKAGE_LIBNFTNL=y
BR2_PACKAGE_LIBPCAP=y
BR2_PACKAGE_LIBTIRPC=y
BR2_PACKAGE_LIBZENOH_C_ARCH_SUPPORTS=yBR2_PACKAGE_CEREAL=y
BR2_PACKAGE_CLANG=y
BR2_PACKAGE_ELFUTILS=y
BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS=y
BR2_PACKAGE_JEMALLOC_ARCH_SUPPORTS=y
BR2_PACKAGE_LAPACK_ARCH_SUPPORTS=yBR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS=y
BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS=y
BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS=y
BR2_PACKAGE_LIBCAP=y
BR2_PACKAGE_LIBEASTL_ARCH_SUPPORTS=y
BR2_PACKAGE_LIBEVENT=yBR2_PACKAGE_LIBFFI=y
BR2_PACKAGE_LIBGLIB2=y
BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y
BR2_PACKAGE_LIBSECCOMP_ARCH_SUPPORTS=y
BR2_PACKAGE_LIBSIGSEGV_ARCH_SUPPORTS=y
BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS=y
BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS=y
BR2_PACKAGE_LLVM_ARCH_SUPPORTS=y
BR2_PACKAGE_LLVM_TARGET_ARCH="AArch64"
BR2_PACKAGE_LLVM=y
BR2_PACKAGE_LLVM_RTTI=y
BR2_PACKAGE_LLVM_BPF=y
BR2_PACKAGE_OPENBLAS_DEFAULT_TARGET="ARMV8"
BR2_PACKAGE_OPENBLAS_ARCH_SUPPORTS=y
BR2_PACKAGE_POCO_ARCH_SUPPORTS=y
BR2_PACKAGE_HOST_PROTOBUF_ARCH_SUPPORTS=y
BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS=y
BR2_PACKAGE_RUY_ARCH_SUPPORTS=y
BR2_PACKAGE_TENSORFLOW_LITE_ARCH_SUPPORTS=y
BR2_PACKAGE_TZDATA=yBR2_PACKAGE_NCURSES=y
BR2_PACKAGE_NCURSES_ADDITIONAL_TERMINFO=""
BR2_PACKAGE_PCRE2=y
BR2_PACKAGE_PCRE2_JIT_ARCH_SUPPORTS=y
BR2_PACKAGE_READLINE=yBR2_PACKAGE_BITCOIN_ARCH_SUPPORTS=yBR2_PACKAGE_QEMU_ARCH_SUPPORTS_TARGET=y
BR2_PACKAGE_QPDF=y
BR2_PACKAGE_XMRIG_ARCH_SUPPORTS=y
BR2_PACKAGE_Z3_ARCH_SUPPORTS=yBR2_PACKAGE_CUPS=y
BR2_PACKAGE_CUPS_FILTERS=y
BR2_PACKAGE_CUPS_PK_HELPER=yBR2_PACKAGE_ETHTOOL=y
BR2_PACKAGE_ETHTOOL_PRETTY_PRINT=yBR2_PACKAGE_HAPROXY_ARCH_SUPPORTS=y
BR2_PACKAGE_IFTOP=y
BR2_PACKAGE_IPROUTE2=y
BR2_PACKAGE_IPTABLES=y
BR2_PACKAGE_IPTABLES_BPF_NFSYNPROXY=y
BR2_PACKAGE_IPTABLES_NFTABLES=y
BR2_PACKAGE_IPTABLES_NFTABLES_DEFAULT=y
BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS=y
BR2_PACKAGE_NET_TOOLS=y
BR2_PACKAGE_NETSTAT_NAT=y
BR2_PACKAGE_OPENSSH=y
BR2_PACKAGE_OPENSSH_CLIENT=y
BR2_PACKAGE_OPENSSH_SERVER=y
BR2_PACKAGE_OPENSSH_KEY_UTILS=y
BR2_PACKAGE_OPENSSH_SANDBOX=yBR2_PACKAGE_RPCBIND=y
BR2_PACKAGE_SOCAT=y
BR2_PACKAGE_TCPDUMP=y
BR2_PACKAGE_TCPDUMP_SMB=y
BR2_PACKAGE_TFTPD=y
BR2_PACKAGE_WGET=y
BR2_PACKAGE_WHOIS=yBR2_PACKAGE_BASH=y
BR2_PACKAGE_ZSH=yBR2_PACKAGE_GNUPG2_DEPENDS=yBR2_PACKAGE_WHICH=yBR2_PACKAGE_AUDIT_ARCH_SUPPORTS=y
BR2_PACKAGE_CPULIMIT=y
BR2_PACKAGE_CPULOAD=y
BR2_PACKAGE_CRIU_ARCH_SUPPORTS=y
BR2_PACKAGE_DAEMON=yBR2_PACKAGE_EFIVAR_ARCH_SUPPORTS=y
BR2_PACKAGE_FTOP=y
BR2_PACKAGE_HTOP=y
BR2_PACKAGE_IOTOP=y
BR2_PACKAGE_IPRUTILS=y
BR2_PACKAGE_IRQBALANCE=y
BR2_PACKAGE_KMOD=y
BR2_PACKAGE_KMOD_TOOLS=yBR2_PACKAGE_LIBVIRT_ARCH_SUPPORTS=y
BR2_PACKAGE_MAKEDUMPFILE_ARCH_SUPPORTS=yBR2_PACKAGE_OPENVMTOOLS_ARCH_SUPPORTS=yBR2_PACKAGE_POLKIT=y
BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y
BR2_PACKAGE_SYSTEMD=y
BR2_PACKAGE_SYSTEMD_PSTORE=y
BR2_PACKAGE_SYSTEMD_HOSTNAMED=y
BR2_PACKAGE_SYSTEMD_HWDB=y
BR2_PACKAGE_SYSTEMD_MYHOSTNAME=y
BR2_PACKAGE_SYSTEMD_NETWORKD=y
BR2_PACKAGE_SYSTEMD_RESOLVED=y
BR2_PACKAGE_SYSTEMD_TIMEDATED=y
BR2_PACKAGE_SYSTEMD_TIMESYNCD=y
BR2_PACKAGE_SYSTEMD_VCONSOLE=y
BR2_PACKAGE_SYSTEMD_VCONSOLE_DEFAULT_KEYMAP="us"
BR2_PACKAGE_SYSTEMD_VMSPAWN_ARCH_SUPPORTS=y
BR2_PACKAGE_SYSTEMD_BOOTCHART_ARCH_SUPPORTS=y
BR2_PACKAGE_UTIL_LINUX=y
BR2_PACKAGE_UTIL_LINUX_LIBS=y
BR2_PACKAGE_UTIL_LINUX_LIBBLKID=y
BR2_PACKAGE_UTIL_LINUX_LIBMOUNT=y
BR2_PACKAGE_UTIL_LINUX_LIBUUID=y
BR2_PACKAGE_UTIL_LINUX_AGETTY=y
BR2_PACKAGE_UTIL_LINUX_FSCK=y
BR2_PACKAGE_UTIL_LINUX_MOUNT=y
BR2_PACKAGE_UTIL_LINUX_SULOGIN=y
BR2_PACKAGE_XVISOR_ARCH_SUPPORTS=yBR2_PACKAGE_VIM=y
BR2_PACKAGE_VIM_RUNTIME=yBR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_ROOTFS_EXT2_GEN=4
BR2_TARGET_ROOTFS_EXT2_LABEL="rootfs"
BR2_TARGET_ROOTFS_EXT2_SIZE="512M"
BR2_TARGET_ROOTFS_EXT2_INODES=0
BR2_TARGET_ROOTFS_EXT2_INODE_SIZE=256
BR2_TARGET_ROOTFS_EXT2_RESBLKS=5
BR2_TARGET_ROOTFS_EXT2_MKFS_OPTIONS="-O ^64bit"
BR2_TARGET_ROOTFS_EXT2_NONE=yBR2_TARGET_EDK2_ARCH_SUPPORTS=y
BR2_TARGET_GRUB2_ARCH_SUPPORTS=y
BR2_PACKAGE_SHIM_ARCH_SUPPORTS=yBR2_PACKAGE_HOST_ARM_GNU_TOOLCHAIN_SUPPORTS=y
BR2_HOST_CMAKE_AT_LEAST="3.18"
BR2_PACKAGE_HOST_E2FSPROGS=y
BR2_PACKAGE_HOST_FLUTTER_SDK_BIN_ARCH_SUPPORTS=y
BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS=y
BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS=y
BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS=y
BR2_PACKAGE_HOST_GO_HOST_CGO_LINKING_SUPPORTS=y
BR2_PACKAGE_PROVIDES_HOST_GO="host-go-bin"
BR2_PACKAGE_HOST_GO_BIN_HOST_ARCH="amd64"
BR2_PACKAGE_HOST_GO_BIN_HOST_ARCH_SUPPORTS=y
BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE1_ARCH_SUPPORTS=y
BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE2_ARCH_SUPPORTS=y
BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE3_ARCH_SUPPORTS=y
BR2_PACKAGE_HOST_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y
BR2_PACKAGE_HOST_KMOD=y
BR2_PACKAGE_HOST_MKPASSWD=y
BR2_PACKAGE_HOST_NODEJS_BIN_ARCH_SUPPORTS=y
BR2_PACKAGE_PROVIDES_HOST_NODEJS="host-nodejs-bin"
BR2_PACKAGE_HOST_PATCHELF=y
BR2_PACKAGE_HOST_PYTHON3=y
BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS=y
BR2_PACKAGE_HOST_QEMU_SYSTEM_ARCH_SUPPORTS=y
BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS=y
BR2_PACKAGE_HOST_QEMU=yBR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y
BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS=y
BR2_PACKAGE_HOST_RUSTC_TARGET_TIER1_PLATFORMS=y
BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS=y
BR2_PACKAGE_HOST_RUSTC_ARCH="aarch64"
BR2_PACKAGE_PROVIDES_HOST_RUSTC="host-rust-bin"
BR2_PACKAGE_HOST_SYSTEMD=y
BR2_PACKAGE_HOST_UTIL_LINUX=y
BR2_PACKAGE_HOST_ZIP=yBR2_PACKAGE_IPMITOOL_PEN_REG_URI=""BR2_PACKAGE_WATCHDOGD_GENERIC_POLL=0
BR2_PACKAGE_WATCHDOGD_LOADAVG_POLL=0
BR2_PACKAGE_WATCHDOGD_FILENR_POLL=0
BR2_PACKAGE_WATCHDOGD_MEMINFO_POLL=0BR2_PACKAGE_QEMU_CUSTOM_TARGETS=""BR2_TARGET_ROOTFS_OCI_ENTRYPOINT_ARGS=""BR2_TARGET_GRUB2_BUILTIN_MODULES=""
BR2_TARGET_GRUB2_BUILTIN_CONFIG=""BR2_PACKAGE_REFPOLICY_POLICY_VERSION=""BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS=""BR2_XTENSA_OVERLAY_DIR=""
BR2_XTENSA_CUSTOM_NAME=""
BR2_TARGET_ROOTFS_EXT2_BLOCKS=0
BR2_TARGET_ROOTFS_EXT2_EXTRA_INODES=0BR2_TARGET_ROOTFS_EXT2_EXTRA_BLOCKS=0BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR=""

3. 編譯

安裝依賴

sudo apt-get install cmake

如果我們在 buildroot 中的 toolchain 指定外部編譯工具為之前在 Ubuntu 上面 apt-get 安裝 的交叉編譯器,那么編譯的時候則會出現錯誤信息:

Distribution toolchains are unsuitable for use by Buildroot,
as they were configured in a way that makes them non-relocatable,
and contain a lot of pre-built libraries that would conflict with
the ones Buildroot wants to build.

這是因為 Ubuntu 得到的交叉編譯器被配置成不可重定位的,而且包含了一些與 buildroot 相沖突的庫

所以我們要自己下載交叉編譯工具或者讓 buildroot 自動下載。為了方便讓buildroot 自動下載,當然也可以自己行下載然后選擇使用外部交叉編譯器。

buildroot的交叉工具鏈位置 output/host 文件下,后續編譯應用程序可以使用此工具鏈。

leo@leo ~/data_4t/github/buildroot
$ make

運行make,等待編譯完成。后面修改了配置直接編譯,就會快很多。

4. 運行

結束后,目標文件在output/images/rootfs.ext2,將其掛載在 nfs_rootfs 目錄

cp /home/leo/data_4t/github/buildroot/output/images/rootfs.ext2 /home/leo/data_4t/github/kernel_version/new_build_root.rootfs.ext2sudo mount -o loop /home/leo/data_4t/github/kernel_version/new_build_root.rootfs.ext2 /home/leo/data_4t/github/kernel_version/nfs_rootfs/

使用 nfs 啟動即可

#!/usr/bin/shsudo /home/leo/data_4t/github/kernel_version/qemu-7.2.0-rc1/build/aarch64-softmmu/qemu-system-aarch64 \-nographic \-M virt,gic-version=3,virtualization=on,type=virt \-cpu cortex-a57 -nographic -m 4G \-smp cores=4,threads=1,sockets=2 \-object memory-backend-ram,id=mem0,size=2G  \-object memory-backend-ram,id=mem1,size=2G  \-numa node,memdev=mem0,cpus=0-3,nodeid=0 \-numa node,memdev=mem1,cpus=4-7,nodeid=1 \-kernel /home/leo/data_4t/github/kernel_version/linux-5.4/build/arch/arm64/boot/Image \-netdev bridge,id=net0,br=br0,helper=/usr/lib/qemu/qemu-bridge-helper \-device virtio-net-pci,netdev=net0 \-append "nokaslr root=/dev/nfs nfsroot=192.168.0.10:/home/leo/data_4t/github/kernel_version/nfs_rootfs,proto=tcp,nfsvers=3,nolock  ip=192.168.0.100::192.168.0.1:255.255.255.0::eth0:off"
Welcome to leo-test pc.
leo-test login: root
Password: 
leo-test#

1. 優化命令行顯示

優化命令行,打開/etc/profile 文件 ,修改為如下:

多行提示符(更清爽)

export PATH="/bin:/sbin:/usr/bin:/usr/sbin"#if [ "$PS1" ]; then
#       if [ "`id -u`" -eq 0 ]; then
#               export PS1='# '
#       else
#               export PS1='$ '
#       fi
#fi
#
#export EDITOR='/bin/vi'
#
## Source configuration files from /etc/profile.d
#for i in /etc/profile.d/*.sh ; do
#       if [ -r "$i" ]; then
#               . $i
#       fi
#done
#unset iPS1="\n\[\e[1;32m\]\u@\h \[\e[1;34m\]\w\n\[\e[0;33m\]\$ \[\e[0m\]"

效果如下:

Welcome to leo-test pc.
leo-test login: root
Password: root@leo-test ~
$

3. 編譯dpdk 遇到的問題

leo@leo ~/data_4t/github/buildroot
$ git status .
位于分支 master
您的分支落后 'origin/master'1504 個提交,并且可以快進。(使用 "git pull" 來更新您的本地分支)未跟蹤的文件:(使用 "git add <文件>..." 以包含要提交的內容)package/dpdk/0002-dpdk-tap-bpf-use-sysroot-includes-instead-of-host.patchpackage/dpdk/0003-dpdk-bpf-disable-stack-protector.patch

package/dpdk/0002-dpdk-tap-bpf-use-sysroot-includes-instead-of-host.patch

From 1111111111111111111111111111111111111111 Mon Sep 17 00:00:00 2001
From: Your Name <you@example.com>
Date: Tue, 27 Aug 2024 18:00:00 +0800
Subject: [PATCH] net/tap: use cross sysroot includes instead of host /usr/includeWhen cross compiling in Buildroot, clang BPF compilation fails with:clang: ERROR: unsafe header/library path used in cross-compilation:'-idirafter' '/usr/include/x86_64-linux-gnu'This happens because meson.build hardcodes `/usr/include/<arch>-linux-gnu`.
Replace it with sysroot-based include path from cross file.Signed-off-by: Your Name <you@example.com>
---drivers/net/tap/bpf/meson.build | 10 +++++++---1 file changed, 7 insertions(+), 3 deletions(-)diff --git a/drivers/net/tap/bpf/meson.build b/drivers/net/tap/bpf/meson.build
index 1234567890..abcdef1234 100644
--- a/drivers/net/tap/bpf/meson.build
+++ b/drivers/net/tap/bpf/meson.build
@@ -37,8 +37,12 @@ libbpf_include_dir = libbpf.get_variable(pkgconfig : 'includedir')# The include files <linux/bpf.h> and others include <asm/types.h># but <asm/types.h> is not defined for multi-lib environment target.# Workaround by using include directoriy from the host build environment.
-machine_name = run_command('uname', '-m', check: true).stdout().strip()
-march_include_dir = '/usr/include/' + machine_name + '-linux-gnu'
+
+# Use sysroot headers instead of host headers when cross compiling
+sysroot_dir = meson.get_cross_property('sys_root', '')
+if sysroot_dir != ''
+    march_include_dir = sysroot_dir + '/usr/include'
+endifclang_flags = [# these are flags used to build the BPF code

package/dpdk/0003-dpdk-bpf-disable-stack-protector.patch

From 2222222222222222222222222222222222222222 Mon Sep 17 00:00:00 2001
From: Your Name <you@example.com>
Date: Tue, 27 Aug 2024 20:00:00 +0800
Subject: [PATCH] net/tap: disable stack protector for BPF buildBPF programs cannot use stack protector (__stack_chk_fail),
but Buildroot/clang may inject it by default (via -fstack-protector).
Explicitly disable it when compiling BPF sources.Fixes build error:error: A call to built-in function '__stack_chk_fail' is not supported.Signed-off-by: Your Name <you@example.com>
---drivers/net/tap/bpf/meson.build | 1 +1 file changed, 1 insertion(+)diff --git a/drivers/net/tap/bpf/meson.build b/drivers/net/tap/bpf/meson.build
index 1234567890..abcdef1234 100644
--- a/drivers/net/tap/bpf/meson.build
+++ b/drivers/net/tap/bpf/meson.build
@@ -49,6 +49,7 @@ clang_flags = ['-target','bpf','-g',
+        '-fno-stack-protector','-c',]-- 
2.39.2

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96999.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96999.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96999.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一洽客服系統:網頁咨詢入口設置

一洽客服系統提供了靈活的網頁咨詢入口設置&#xff0c;旨在為用戶提供多樣化的咨詢類別選擇&#xff0c;并根據用戶的需求接入指定的路由線路。以下是該功能的詳細說明&#xff1a;一、網頁咨詢入口設置針對用戶的不同業務提供不同的咨詢類別選擇&#xff0c;用戶選擇業務后接…

Apache Flink錯誤處理實戰手冊:2年生產環境調試經驗總結

作者&#xff1a;_Naci Simsek 前言 在流處理領域&#xff0c;Apache Flink 已經成為企業級實時數據處理的首選框架。然而&#xff0c;在生產環境中&#xff0c;開發者和運維人員經常會遇到各種看似神秘的問題。基于過去兩年中大量客戶在真實場景中的使用案例&#xff0c;可以觀…

嵌入式開發學習 C++:day01

C概述 C誕生 1972年前后&#xff0c;計算機先驅丹尼斯里奇開始設計C語言并用它來重寫Unix系統&#xff0c;里奇的這個決定催生了計算機領域最石破天驚的兩門重炮:Unix和C&#xff0c;這兩者都是IT產業中鼻祖級的存在&#xff0c;Unix是現代蘋果系統和Linux系統的最初來源&#…

LeaferJS創建支持縮放、平移的畫布,并繪制簡單圖形

文章目錄介紹原生JS使用LeaferJS的簡單示例原生JS使用LeaferJS并支持縮放平移畫布Vue中使用LeaferJS并支持縮放平移介紹 LeaferJS官網&#xff1a;https://www.leaferjs.com/ 官方快速上手的教程地址&#xff1a;https://www.leaferjs.com/ui/guide/install/ui/start.html 原…

JumpServer 堡壘機部署與 SSH 公鑰接入服務器教程

前言&#xff1a;在企業運維場景中&#xff0c;服務器的安全訪問與操作管控至關重要。JumpServer 作為開源堡壘機的典型代表&#xff0c;憑借集中管控、權限精細分配、操作全鏈路審計等核心能力&#xff0c;成為保障運維安全合規的關鍵工具。 無論是中小企業簡化運維權限管理&a…

TensorFlow 面試題及詳細答案 120道(21-30)-- 模型構建與神經網絡

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。 前后端面試題-專欄總目錄 文章目錄 一、本文面試題目錄 21. TensorFlow中構建神經…

Qt圖片上傳系統的設計與實現:從客戶端到服務器的完整方案

文章目錄系統架構概覽核心組件解析1. ImageUploadWorker&#xff1a;上傳任務的執行者關鍵方法解析2. ImageUploadManager&#xff1a;線程的"指揮官"3. ImageUploader&#xff1a;網絡通信的"信使"4. 服務器端&#xff1a;圖片的"收納箱"關鍵技…

MySQL InnoDB vs MyISAM

MySQL 兩種引擎&#xff08;InnoDB vs MyISAM&#xff09;核心區別事務與鎖機制??特性??InnoDB??MyISAM??事務支持?支持 ACID 事務&#xff08;原子性、一致性、隔離性、持久性&#xff09;&#xff0c;適用于需強數據一致性的場景&#xff08;如金融交易&#xff09;…

軟件定義汽車(SDV)調試——如何做到 適配軟件定義汽車(SDV)?(上)

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

windows下 docker desktop 清理ext4.vhdx文件 并縮小ext4.vhdx文件

1、路徑C:\Users\Administrator\AppData\Local\Docker\wsl\dataext4.vhdx 清理之前30多G&#xff0c;現在只有不到2個G2、清理命令# 1、清?清理懸空鏡像和緩存? docker image prune -f # 刪除未被引用的鏡像層 docker builder prune -f # 清理構建緩存# 2、壓縮虛擬磁盤&a…

超越ChatBI!深度解析衡石HENGSHI SENSE 6.0如何實現全流程AI賦能

在數據智能領域風起云涌的2025年&#xff0c;“ChatBI”已成為一個炙手可熱卻又令人疲憊的概念。市場上充斥著各式各樣的問答式BI工具&#xff0c;它們雖然帶來了交互的新穎體驗&#xff0c;卻往往局限于“問答”這一單一環節&#xff0c;無法解決數據從整合到洞察的全鏈路痛點…

Apple Silicon Mac 上解決 Docker 平臺不匹配和 QEMU 段錯誤問題

問題概述 許多用戶在 Apple Silicon (M1/M2) Mac 上嘗試運行 W3AF Docker 鏡像時遇到了以下錯誤: WARNING: The requested images platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested qemu: uncau…

如何借助文檔控件 TX Text Control 輕松優化 PDF 文件大小?

在數字文檔的日常使用中&#xff0c;PDF 文件的體積大小直接影響存儲空間、傳輸速度和打開體驗。尤其是在包含大量圖片、圖表或字體資源的文檔中&#xff0c;文件往往會變得非常龐大。 文檔處理控件TX Text Control 為開發者提供了多種可配置的工具與策略&#xff0c;幫助在不同…

[身份驗證腳手架] 前端認證與個人資料界面

第2章&#xff1a;前端認證與個人資料界面 歡迎回來&#xff0c;未來的Web開發者&#xff01;在前一章中&#xff0c;我們學習了breeze:install命令如何為您的Laravel應用設置用戶認證基礎。您選擇了一個"前端技術棧"(如Blade、React、Vue或Livewire)并運行了一些命…

RabbitMQ、RocketMQ 和 ActiveMQ 三種主流消息隊列的詳細部署安裝指南

RabbitMQ、RocketMQ 和 ActiveMQ 三種主流消息隊列的詳細部署安裝指南 RabbitMQ、RocketMQ 和 ActiveMQ 三種主流消息隊列的詳細部署安裝指南。 一、RabbitMQ 部署安裝 RabbitMQ 用 Erlang 語言編寫,推薦使用官方提供的 Docker 鏡像或包管理器安裝。 方法一:使用 Docker (…

vue新增用戶密碼框自動將當前用戶的密碼自動填充的問題

1.問題 新增店鋪的時候&#xff0c;設置管理員賬號&#xff0c;輸入框已將當前登錄用戶的密碼填充上了解決方式 在el-input輸入框類型為password的上增加參數autocomplete“new-password”<el-form-item :label"$t(storeList.password)" prop"shopUserPasswo…

設計模式:工廠模式(Factory Pattern)

文章目錄一、工廠模式簡介二、簡單工廠模式的概念三、工廠方法模式的概念四、抽象工廠模式的概念一、工廠模式簡介 工廠模式是一種創建型設計模式&#xff0c;主要解決對象創建 的問題。它的核心思想是&#xff1a;把對象的創建和使用分離&#xff0c;讓使用者不直接依賴具體類…

【Qt調試】斷點時,Expressions不能查看變量

環境Qt版本&#xff1a;6.9.1問題Qt creator進入斷點&#xff0c;Expressions不能查看變量&#xff08;類型&#xff1a;int&#xff09;的值&#xff0c;而局部變量可以查看。解決方法調試器/CDB&#xff0c;勾選【Use Python dumper】

C++ 函數:從基礎到現代特性的全面解析

《C++ 函數:從基礎到現代特性的全面解析》 目錄 函數基礎 1.1 函數定義與聲明 1.2 參數傳遞機制(值傳遞、引用傳遞、指針傳遞) 1.3 返回值與void函數 1.4 函數聲明與定義的分離 函數進階 2.1 函數重載的多態性 2.2 遞歸函數的設計與優化 2.3 Lambda表達式與匿名函數 2.4 函…

【AMBA總線互聯IP】

1 常見AMBA互聯總線IP 1.1 常見的IP工具 1.ARM: NIC-4xx 2.Synopsys: Designwave IP for AMBA interconnect 3.Sonicsinc: Non-conherent NoC only, no coherent noc. 4.Netspeed: Gemini Origin–Congiurable cache coherent. 5.Arterix(FlexNoc, Ncore):Ncore–support CHI,…