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