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,…