《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