Building an ARM64 Environment Based on QEMU with Buildroot

Introduction:In the process of IoT penetration testing, it is often necessary to work with various CPU architectures. Tools like FirmAE, firmware-analysis-toolkit, firmadyne, and firmware-analysis-plus are commonly used for one-click firmware emulation. However, in many cases, firmware cannot be emulated, necessitating the collection of various environments or the installation of systems corresponding to the CPU architecture for extraction. Recently, I came across a public account where an expert introduced the Buildroot environment for building, and after some research, I found it quite useful, so I decided to document it in detail.

  1. Download and Install BuildrootOfficial Website: https://buildroot.org/Git Repository: https://gitlab.com/buildroot.org/buildrootClone the code or download the ReleaseIt is recommended to download theRelease

wget https://buildroot.org/downloads/buildroot-2025.02.tar.gz
tar -xzvf buildroot-2025.02.tar.gz
cd buildroot-2025.02
make list-defconfigs # View all default configuration files
lubuntu@lubuntu18:~/buildroot$ make list-defconfigs
Built-in configs:  aarch64_efi_defconfig               - Build for aarch64_efi  acmesystems_acqua_a5_256mb_defconfig - Build for acmesystems_acqua_a5_256mb  acmesystems_acqua_a5_512mb_defconfig - Build for acmesystems_acqua_a5_512mb  acmesystems_aria_g25_128mb_defconfig - Build for acmesystems_aria_g25_128mb  acmesystems_aria_g25_256mb_defconfig - Build for acmesystems_aria_g25_256mb  acmesystems_arietta_g25_128mb_defconfig - Build for acmesystems_arietta_g25_128mb  acmesystems_arietta_g25_256mb_defconfig - Build for acmesystems_arietta_g25_256mb  am574x_idk_defconfig                - Build for am574x_idk  amarula_vyasa_rk3288_defconfig      - Build for amarula_vyasa_rk3288  andes_ae350_45_defconfig            - Build for andes_ae350_45  arcturus_ucls1012a_defconfig        - Build for arcturus_ucls1012a  arcturus_ucp1020_defconfig          - Build for arcturus_ucp1020  armadeus_apf27_defconfig            - Build for armadeus_apf27  armadeus_apf28_defconfig            - Build for armadeus_apf28  armadeus_apf51_defconfig            - Build for armadeus_apf51  arm_foundationv8_defconfig          - Build for arm_foundationv8  arm_fvp_ebbr_defconfig              - Build for arm_fvp_ebbr  aspeed_ast2500evb_defconfig         - Build for aspeed_ast2500evb  aspeed_ast2600evb_defconfig         - Build for aspeed_ast2600evb  asus_tinker_rk3288_defconfig        - Build for asus_tinker_rk3288  asus_tinker-s_rk3288_defconfig      - Build for asus_tinker-s_rk3288  at91sam9260eknf_defconfig           - Build for at91sam9260eknf  at91sam9g20dfc_defconfig            - Build for at91sam9g20dfc  at91sam9g45m10ek_defconfig          - Build for at91sam9g45m10ek  at91sam9rlek_defconfig              - Build for at91sam9rlek  at91sam9x5ek_defconfig              - Build for at91sam9x5ek  at91sam9x5ek_dev_defconfig          - Build for at91sam9x5ek_dev  at91sam9x5ek_mmc_defconfig          - Build for at91sam9x5ek_mmc  at91sam9x5ek_mmc_dev_defconfig      - Build for at91sam9x5ek_mmc_dev  atmel_sama5d27_som1_ek_mmc_dev_defconfig - Build for atmel_sama5d27_som1_ek_mmc_dev  atmel_sama5d2_xplained_mmc_defconfig - Build for atmel_sama5d2_xplained_mmc  atmel_sama5d2_xplained_mmc_dev_defconfig - Build for atmel_sama5d2_xplained_mmc_dev  atmel_sama5d3xek_defconfig          - Build for atmel_sama5d3xek  atmel_sama5d3_xplained_defconfig    - Build for atmel_sama5d3_xplained  atmel_sama5d3_xplained_dev_defconfig - Build for atmel_sama5d3_xplained_dev  atmel_sama5d3_xplained_mmc_defconfig - Build for atmel_sama5d3_xplained_mmc  atmel_sama5d3_xplained_mmc_dev_defconfig - Build for atmel_sama5d3_xplained_mmc_dev  atmel_sama5d4_xplained_defconfig    - Build for atmel_sama5d4_xplained  atmel_sama5d4_xplained_dev_defconfig - Build for atmel_sama5d4_xplained_dev  atmel_sama5d4_xplained_mmc_defconfig - Build for atmel_sama5d4_xplained_mmc  atmel_sama5d4_xplained_mmc_dev_defconfig - Build for atmel_sama5d4_xplained_mmc_dev  avenger96_defconfig                 - Build for avenger96  avnet_rzboard_v2l_defconfig         - Build for avnet_rzboard_v2l  bananapi_m2_berry_defconfig         - Build for bananapi_m2_berry  bananapi_m2_ultra_defconfig         - Build for bananapi_m2_ultra  bananapi_m2_zero_defconfig          - Build for bananapi_m2_zero  bananapro_defconfig                 - Build for bananapro  beagleboneai64_defconfig            - Build for beagleboneai64  beagleboneai_defconfig              - Build for beagleboneai  beaglebone_defconfig                - Build for beaglebone  beaglebone_qt5_defconfig            - Build for beaglebone_qt5  beagleplay_defconfig                - Build for beagleplay  beaglev_fire_defconfig              - Build for beaglev_fire  beelink_gs1_defconfig               - Build for beelink_gs1  broadcom_northstar_defconfig        - Build for broadcom_northstar  canaan_kd233_defconfig              - Build for canaan_kd233  chromebook_elm_defconfig            - Build for chromebook_elm  chromebook_snow_defconfig           - Build for chromebook_snow  ci20_defconfig                      - Build for ci20  cubieboard1_defconfig               - Build for cubieboard1  cubieboard2_defconfig               - Build for cubieboard2  engicam_imx6qdl_icore_defconfig     - Build for engicam_imx6qdl_icore  engicam_imx6qdl_icore_qt5_defconfig - Build for engicam_imx6qdl_icore_qt5  engicam_imx6qdl_icore_rqs_defconfig - Build for engicam_imx6qdl_icore_rqs  engicam_imx6ul_geam_defconfig       - Build for engicam_imx6ul_geam  engicam_imx6ul_isiot_defconfig      - Build for engicam_imx6ul_isiot  freescale_imx28evk_defconfig        - Build for freescale_imx28evk  freescale_imx6dlsabreauto_defconfig - Build for freescale_imx6dlsabreauto  freescale_imx6dlsabresd_defconfig   - Build for freescale_imx6dlsabresd  freescale_imx6qsabreauto_defconfig  - Build for freescale_imx6qsabreauto  freescale_imx6qsabresd_defconfig    - Build for freescale_imx6qsabresd  freescale_imx6sxsabresd_defconfig   - Build for freescale_imx6sxsabresd  freescale_imx6ullevk_defconfig      - Build for freescale_imx6ullevk  freescale_imx7dsabresd_defconfig    - Build for freescale_imx7dsabresd  freescale_imx8dxlevk_defconfig      - Build for freescale_imx8dxlevk  freescale_imx8mmevk_defconfig       - Build for freescale_imx8mmevk  freescale_imx8mnevk_defconfig       - Build for freescale_imx8mnevk  freescale_imx8mpevk_defconfig       - Build for freescale_imx8mpevk  freescale_imx8mqevk_defconfig       - Build for freescale_imx8mqevk  freescale_imx8qmmek_defconfig       - Build for freescale_imx8qmmek  freescale_imx8qxpmek_defconfig      - Build for freescale_imx8qxpmek  freescale_imx93evk_defconfig        - Build for freescale_imx93evk  freescale_p1025twr_defconfig        - Build for freescale_p1025twr  freescale_t1040d4rdb_defconfig      - Build for freescale_t1040d4rdb  freescale_t2080_qds_rdb_defconfig   - Build for freescale_t2080_qds_rdb  friendlyarm_nanopi_neo_defconfig    - Build for friendlyarm_nanopi_neo  friendlyarm_nanopi_r2s_defconfig    - Build for friendlyarm_nanopi_r2s  friendlyarm_nanopi_r3s_defconfig    - Build for friendlyarm_nanopi_r3s  galileo_defconfig                   - Build for galileo  globalscale_espressobin_defconfig   - Build for globalscale_espressobin  grinn_chiliboard_defconfig          - Build for grinn_chiliboard  grinn_liteboard_defconfig           - Build for grinn_liteboard  hifive_unleashed_defconfig          - Build for hifive_unleashed  icnova-a20-adb4006_defconfig        - Build for icnova-a20-adb4006  imx23evk_defconfig                  - Build for imx23evk  imx6-sabreauto_defconfig            - Build for imx6-sabreauto  imx6-sabresd_defconfig              - Build for imx6-sabresd  imx6-sabresd_qt5_defconfig          - Build for imx6-sabresd_qt5  imx6slevk_defconfig                 - Build for imx6slevk  imx6sx-sdb_defconfig                - Build for imx6sx-sdb  imx6ulevk_defconfig                 - Build for imx6ulevk  imx6ullevk_defconfig                - Build for imx6ullevk  imx6ulpico_defconfig                - Build for imx6ulpico  imx6ulz_bsh_smm_m2_defconfig        - Build for imx6ulz_bsh_smm_m2  imx7dpico_defconfig                 - Build for imx7dpico  imx7d-sdb_defconfig                 - Build for imx7d-sdb  imx8mm-evk_defconfig                - Build for imx8mm-evk  imx8mmpico_defconfig                - Build for imx8mmpico  imx8mn_bsh_smm_s2_defconfig         - Build for imx8mn_bsh_smm_s2  imx8mn_bsh_smm_s2_pro_defconfig     - Build for imx8mn_bsh_smm_s2_pro  imx8mn-ddr4-evk_defconfig           - Build for imx8mn-ddr4-evk  imx8mp-evk_defconfig                - Build for imx8mp-evk  imx8mqevk_defconfig                 - Build for imx8mqevk  imx93-evk_defconfig                 - Build for imx93-evk  imxrt1050-evk_defconfig             - Build for imxrt1050-evk  khadas_vim3_defconfig               - Build for khadas_vim3  kontron_bl_imx8mm_defconfig         - Build for kontron_bl_imx8mm  kontron_pitx_imx8m_defconfig        - Build for kontron_pitx_imx8m  kontron_smarc_sal28_defconfig       - Build for kontron_smarc_sal28  lafrite_defconfig                   - Build for lafrite  lego_ev3_defconfig                  - Build for lego_ev3  linksprite_pcduino_defconfig        - Build for linksprite_pcduino  ls1028ardb_defconfig                - Build for ls1028ardb  ls1043a-rdb_defconfig               - Build for ls1043a-rdb  ls1046a-frwy_defconfig              - Build for ls1046a-frwy  ls1046a-rdb_defconfig               - Build for ls1046a-rdb  mangopi_mq1rdw2_defconfig           - Build for mangopi_mq1rdw2  mender_x86_64_efi_defconfig         - Build for mender_x86_64_efi  microchip_mpfs_icicle_defconfig     - Build for microchip_mpfs_icicle  microchip_sam9x60ek_mmc_defconfig   - Build for microchip_sam9x60ek_mmc  microchip_sam9x60ek_mmc_dev_defconfig - Build for microchip_sam9x60ek_mmc_dev  microchip_sama5d27_wlsom1_ek_mmc_defconfig - Build for microchip_sama5d27_wlsom1_ek_mmc  microchip_sama5d27_wlsom1_ek_mmc_dev_defconfig - Build for microchip_sama5d27_wlsom1_ek_mmc_dev  microchip_sama5d2_icp_mmc_defconfig - Build for microchip_sama5d2_icp_mmc  microchip_sama5d2_icp_mmc_dev_defconfig - Build for microchip_sama5d2_icp_mmc_dev  microchip_sama7g5ek_mmc_defconfig   - Build for microchip_sama7g5ek_mmc  microchip_sama7g5ek_mmc_dev_defconfig - Build for microchip_sama7g5ek_mmc_dev  minnowboard_max_defconfig           - Build for minnowboard_max  mx51evk_defconfig                   - Build for mx51evk  mx53loco_defconfig                  - Build for mx53loco  mx6cubox_defconfig                  - Build for mx6cubox  mx6sx_udoo_neo_defconfig            - Build for mx6sx_udoo_neo  mx6udoo_defconfig                   - Build for mx6udoo  nexbox_a95x_defconfig               - Build for nexbox_a95x  nezha_defconfig                     - Build for nezha  nitrogen6sx_defconfig               - Build for nitrogen6sx  nitrogen6x_defconfig                - Build for nitrogen6x  nitrogen7_defconfig                 - Build for nitrogen7  nitrogen8m_defconfig                - Build for nitrogen8m  nitrogen8mm_defconfig               - Build for nitrogen8mm  nitrogen8mn_defconfig               - Build for nitrogen8mn  nitrogen8mp_defconfig               - Build for nitrogen8mp  nvidia_bf3_defconfig                - Build for nvidia_bf3  octavo_osd32mp1_brk_defconfig       - Build for octavo_osd32mp1_brk  octavo_osd32mp1_red_defconfig       - Build for octavo_osd32mp1_red  odroidc2_defconfig                  - Build for odroidc2  odroidxu4_defconfig                 - Build for odroidxu4  olimex_a10_olinuxino_lime_defconfig - Build for olimex_a10_olinuxino_lime  olimex_a13_olinuxino_defconfig      - Build for olimex_a13_olinuxino  olimex_a20_olinuxino_lime2_defconfig - Build for olimex_a20_olinuxino_lime2  olimex_a20_olinuxino_lime_defconfig - Build for olimex_a20_olinuxino_lime  olimex_a20_olinuxino_micro_defconfig - Build for olimex_a20_olinuxino_micro  olimex_a33_olinuxino_defconfig      - Build for olimex_a33_olinuxino  olimex_a64_olinuxino_defconfig      - Build for olimex_a64_olinuxino  olimex_imx233_olinuxino_defconfig   - Build for olimex_imx233_olinuxino  olimex_stmp157_olinuxino_lime_defconfig - Build for olimex_stmp157_olinuxino_lime  olpc_xo175_defconfig                - Build for olpc_xo175  olpc_xo1_defconfig                  - Build for olpc_xo1  openblocks_a6_defconfig             - Build for openblocks_a6  orangepi_5_plus_defconfig           - Build for orangepi_5_plus  orangepi_lite2_defconfig            - Build for orangepi_lite2  orangepi_lite_defconfig             - Build for orangepi_lite  orangepi_one_defconfig              - Build for orangepi_one  orangepi_one_plus_defconfig         - Build for orangepi_one_plus  orangepi_pc2_defconfig              - Build for orangepi_pc2  orangepi_pc_defconfig               - Build for orangepi_pc  orangepi_pc_plus_defconfig          - Build for orangepi_pc_plus  orangepi_r1_defconfig               - Build for orangepi_r1  orangepi_zero2w_defconfig           - Build for orangepi_zero2w  orangepi_zero3_defconfig            - Build for orangepi_zero3  orangepi_zero_defconfig             - Build for orangepi_zero  orangepi_zero_plus2_defconfig       - Build for orangepi_zero_plus2  orangepi_zero_plus_defconfig        - Build for orangepi_zero_plus  pcengines_apu2_defconfig            - Build for pcengines_apu2  pc_x86_64_bios_defconfig            - Build for pc_x86_64_bios  pc_x86_64_efi_defconfig             - Build for pc_x86_64_efi  pine64_defconfig                    - Build for pine64  pine64_pinecube_defconfig           - Build for pine64_pinecube  pine64_sopine_defconfig             - Build for pine64_sopine  pine64_star64_defconfig             - Build for pine64_star64  polyhex_debix_model_a_defconfig     - Build for polyhex_debix_model_a  qemu_aarch64_ebbr_defconfig         - Build for qemu_aarch64_ebbr  qemu_aarch64_sbsa_defconfig         - Build for qemu_aarch64_sbsa  qemu_aarch64_virt_defconfig         - Build for qemu_aarch64_virt  qemu_arm_ebbr_defconfig             - Build for qemu_arm_ebbr  qemu_arm_versatile_defconfig        - Build for qemu_arm_versatile  qemu_arm_vexpress_defconfig         - Build for qemu_arm_vexpress  qemu_arm_vexpress_tz_defconfig      - Build for qemu_arm_vexpress_tz  qemu_m68k_mcf5208_defconfig         - Build for qemu_m68k_mcf5208  qemu_m68k_q800_defconfig            - Build for qemu_m68k_q800  qemu_microblazebe_mmu_defconfig     - Build for qemu_microblazebe_mmu  qemu_microblazeel_mmu_defconfig     - Build for qemu_microblazeel_mmu  qemu_mips32r2el_malta_defconfig     - Build for qemu_mips32r2el_malta  qemu_mips32r2_malta_defconfig       - Build for qemu_mips32r2_malta  qemu_mips32r6el_malta_defconfig     - Build for qemu_mips32r6el_malta  qemu_mips32r6_malta_defconfig       - Build for qemu_mips32r6_malta  qemu_mips64el_malta_defconfig       - Build for qemu_mips64el_malta  qemu_mips64_malta_defconfig         - Build for qemu_mips64_malta  qemu_mips64r6el_malta_defconfig     - Build for qemu_mips64r6el_malta  qemu_mips64r6_malta_defconfig       - Build for qemu_mips64r6_malta  qemu_or1k_defconfig                 - Build for qemu_or1k  qemu_ppc64_e5500_defconfig          - Build for qemu_ppc64_e5500  qemu_ppc64le_powernv8_defconfig     - Build for qemu_ppc64le_powernv8  qemu_ppc64le_pseries_defconfig      - Build for qemu_ppc64le_pseries  qemu_ppc64_pseries_defconfig        - Build for qemu_ppc64_pseries  qemu_ppc_bamboo_defconfig           - Build for qemu_ppc_bamboo  qemu_ppc_e500mc_defconfig           - Build for qemu_ppc_e500mc  qemu_ppc_g3beige_defconfig          - Build for qemu_ppc_g3beige  qemu_ppc_mac99_defconfig            - Build for qemu_ppc_mac99  qemu_ppc_mpc8544ds_defconfig        - Build for qemu_ppc_mpc8544ds  qemu_riscv32_nommu_virt_defconfig   - Build for qemu_riscv32_nommu_virt  qemu_riscv32_virt_defconfig         - Build for qemu_riscv32_virt  qemu_riscv64_nommu_virt_defconfig   - Build for qemu_riscv64_nommu_virt  qemu_riscv64_virt_defconfig         - Build for qemu_riscv64_virt  qemu_riscv64_virt_efi_defconfig     - Build for qemu_riscv64_virt_efi  qemu_s390x_defconfig                - Build for qemu_s390x  qemu_sh4eb_r2d_defconfig            - Build for qemu_sh4eb_r2d  qemu_sh4_r2d_defconfig              - Build for qemu_sh4_r2d  qemu_sparc64_sun4u_defconfig        - Build for qemu_sparc64_sun4u  qemu_sparc_ss10_defconfig           - Build for qemu_sparc_ss10  qemu_x86_64_defconfig               - Build for qemu_x86_64  qemu_x86_defconfig                  - Build for qemu_x86  qemu_xtensa_lx60_defconfig          - Build for qemu_xtensa_lx60  qemu_xtensa_lx60_nommu_defconfig    - Build for qemu_xtensa_lx60_nommu  raspberrypi0_defconfig              - Build for raspberrypi0  raspberrypi0w_defconfig             - Build for raspberrypi0w  raspberrypi2_defconfig              - Build for raspberrypi2  raspberrypi3_64_defconfig           - Build for raspberrypi3_64  raspberrypi3_defconfig              - Build for raspberrypi3  raspberrypi3_qt5we_defconfig        - Build for raspberrypi3_qt5we  raspberrypi4_64_defconfig           - Build for raspberrypi4_64  raspberrypi4_defconfig              - Build for raspberrypi4  raspberrypi5_defconfig              - Build for raspberrypi5  raspberrypicm4io_64_defconfig       - Build for raspberrypicm4io_64  raspberrypicm4io_defconfig          - Build for raspberrypicm4io  raspberrypi_defconfig               - Build for raspberrypi  raspberrypizero2w_64_defconfig      - Build for raspberrypizero2w_64  raspberrypizero2w_defconfig         - Build for raspberrypizero2w  riotboard_defconfig                 - Build for riotboard  rock4se_defconfig                   - Build for rock4se  rock5b_defconfig                    - Build for rock5b  rock64_defconfig                    - Build for rock64  rock_pi_n8_defconfig                - Build for rock_pi_n8  rockpro64_defconfig                 - Build for rockpro64  roc_pc_rk3399_defconfig             - Build for roc_pc_rk3399  roseapplepi_defconfig               - Build for roseapplepi  s6lx9_microboard_defconfig          - Build for s6lx9_microboard  sheevaplug_defconfig                - Build for sheevaplug  sipeed_licheepi_nano_defconfig      - Build for sipeed_licheepi_nano  sipeed_licheepi_zero_defconfig      - Build for sipeed_licheepi_zero  sipeed_lichee_rv_defconfig          - Build for sipeed_lichee_rv  sipeed_lichee_rv_dock_defconfig     - Build for sipeed_lichee_rv_dock  sipeed_maix_bit_defconfig           - Build for sipeed_maix_bit  sipeed_maix_bit_sdcard_defconfig    - Build for sipeed_maix_bit_sdcard  sipeed_maix_dock_defconfig          - Build for sipeed_maix_dock  sipeed_maix_dock_sdcard_defconfig   - Build for sipeed_maix_dock_sdcard  sipeed_maixduino_defconfig          - Build for sipeed_maixduino  sipeed_maixduino_sdcard_defconfig   - Build for sipeed_maixduino_sdcard  sipeed_maix_go_defconfig            - Build for sipeed_maix_go  sipeed_maix_go_sdcard_defconfig     - Build for sipeed_maix_go_sdcard  snps_arc700_axs101_defconfig        - Build for snps_arc700_axs101  snps_arc700_nsim_defconfig          - Build for snps_arc700_nsim  snps_archs38_axs103_defconfig       - Build for snps_archs38_axs103  snps_archs38_haps_defconfig         - Build for snps_archs38_haps  snps_archs38_hsdk_defconfig         - Build for snps_archs38_hsdk  socrates_cyclone5_defconfig         - Build for socrates_cyclone5  solidrun_clearfog_defconfig         - Build for solidrun_clearfog  solidrun_clearfog_gt_8k_defconfig   - Build for solidrun_clearfog_gt_8k  solidrun_macchiatobin_defconfig     - Build for solidrun_macchiatobin  spike_riscv32_defconfig             - Build for spike_riscv32  spike_riscv64_defconfig             - Build for spike_riscv64  stm32f429_disco_xip_defconfig       - Build for stm32f429_disco_xip  stm32f469_disco_sd_defconfig        - Build for stm32f469_disco_sd  stm32f469_disco_xip_defconfig       - Build for stm32f469_disco_xip  stm32f746_disco_sd_defconfig        - Build for stm32f746_disco_sd  stm32f769_disco_sd_defconfig        - Build for stm32f769_disco_sd  stm32mp135f_dk_defconfig            - Build for stm32mp135f_dk  stm32mp157a_dk1_defconfig           - Build for stm32mp157a_dk1  stm32mp157c_dk2_defconfig           - Build for stm32mp157c_dk2  stm32mp157c_odyssey_defconfig       - Build for stm32mp157c_odyssey  terasic_de10nano_cyclone5_defconfig - Build for terasic_de10nano_cyclone5  ti_am62ax_sk_defconfig              - Build for ti_am62ax_sk  ti_am62px_sk_defconfig              - Build for ti_am62px_sk  ti_am62x_sk_defconfig               - Build for ti_am62x_sk  ti_am64x_sk_defconfig               - Build for ti_am64x_sk  toradex_apalis_imx6_defconfig       - Build for toradex_apalis_imx6  ts4900_defconfig                    - Build for ts4900  ts5500_defconfig                    - Build for ts5500  ts7680_defconfig                    - Build for ts7680  uevm5432_defconfig                  - Build for uevm5432  versal_vck190_defconfig             - Build for versal_vck190  versal_vek280_defconfig             - Build for versal_vek280  versal_vpk180_defconfig             - Build for versal_vpk180  visionfive2_defconfig               - Build for visionfive2  visionfive_defconfig                - Build for visionfive  wandboard_defconfig                 - Build for wandboard  warp7_defconfig                     - Build for warp7  zynq_microzed_defconfig             - Build for zynq_microzed  zynqmp_kria_kd240_defconfig         - Build for zynqmp_kria_kd240  zynqmp_kria_kr260_defconfig         - Build for zynqmp_kria_kr260  zynqmp_kria_kv260_defconfig         - Build for zynqmp_kria_kv260  zynqmp_zcu102_defconfig             - Build for zynqmp_zcu102  zynqmp_zcu104_defconfig             - Build for zynqmp_zcu104  zynqmp_zcu106_defconfig             - Build for zynqmp_zcu106  zynq_zc702_defconfig                - Build for zynq_zc702  zynq_zc706_defconfig                - Build for zynq_zc706  zynq_zed_defconfig                  - Build for zynq_zed

There is extensive CPU support, including three for ARM64, which is AArch64:

qemu_aarch64_ebbr_defconfig         - Build for qemu_aarch64_ebbr
qemu_aarch64_sbsa_defconfig         - Build for qemu_aarch64_sbsa
qemu_aarch64_virt_defconfig         - Build for qemu_aarch64_virt
  • EBBR (Embedded Base Boot Requirements) is a boot specification established by ARM for embedded systems, aimed at providing a standardized boot process for embedded devices. It is based on UEFI (Unified Extensible Firmware Interface) and Device Tree, ensuring consistency in hardware initialization during system boot, similar to the SBBR (Server Base Boot Requirements) on the server side.

  • SBSA (Server Base System Architecture) is a standardized architecture designed by ARM for servers, aimed at providing consistent hardware interfaces (such as UART, storage controllers, PCIe, etc.) to enhance software portability across different ARM server hardware.

  • Virt (Virtual Machine Platform) is a general virtualization platform provided by QEMU, specifically designed for virtual machines and does not correspond to any real hardware.

Among these, Virt offers the lowest complexity, fast boot times, and low resource usage, making it suitable for general scenarios. Using Virt should be quite appropriate.

make qemu_aarch64_virt_defconfig # Select a default configuration
make menuconfig # Detailed configuration for building the environment

This step may prompt for missing dependencies; install them and then proceed.

Building an ARM64 Environment Based on QEMU with BuildrootIn the Target options, select the CPU architecture for these ARM little-endian options.Building an ARM64 Environment Based on QEMU with BuildrootTarget packages configure the software packages needed.Building an ARM64 Environment Based on QEMU with BuildrootHere, mainly install the network and management packages needed.

bridge-utils
openssh

Building an ARM64 Environment Based on QEMU with BuildrootBuilding an ARM64 Environment Based on QEMU with Buildroot

Finally, save and run make. Note: If you have generated once and want to generate for another architecture, it is best to run make clean first to clear out previous files; otherwise, some files may be missing. Cleaning will also remove files previously generated in output/images..

Note that this process may take a while depending on your network and configuration. My network and computer configuration are not very good, so it took one to two hours.

Upon completion, four files will be generated in output/images:

Image  rootfs.ext2  rootfs.ext4  start-qemu.sh

Building an ARM64 Environment Based on QEMU with Buildroot

Among them, start-qemu.sh is the startup script.

It can be further improved.

#!/bin/sh
set -e
BINARIES_DIR="${0%/*}/"
cd "${BINARIES_DIR}"
# Default enable TAP and serial mode
mode_serial=true
mode_sys_qemu=false
use_tap=true
tap_interface="tap0"
tap_ip_host="192.168.100.1" # Host IP
tap_ip_guest="192.168.100.2" # VM IP
while [ "$1" ]; do
    case "$1" in
    --serial-only|serial-only) mode_serial=true; shift;;
    --no-serial) mode_serial=false; shift;;
    --use-system-qemu) mode_sys_qemu=true; shift;;
    --use-tap) use_tap=true; shift;;
    --no-tap) use_tap=false; shift;;
    --tap-interface)        if [ -z "$2" ]; then
            echo "Error: --tap-interface requires an argument" >&2
            exit 1
        fi
        tap_interface="$2"; shift 2;;
    --) shift; break;;
    *) echo "unknown option: $1" >&2; exit 1;;
    esac
done
if ${mode_serial}; then
    EXTRA_ARGS='-nographic'
else
    EXTRA_ARGS=''
fi
if ! ${mode_sys_qemu}; then
    export PATH="/home/lubuntu/buildroot/output/host/bin:${PATH}"
fi
if ${use_tap}; then
    if ! command -v ip >/dev/null 2>&1; then
        echo "Error: 'ip' command not found. Please install iproute2." >&2
        exit 1
    fi
    if ! sudo -v; then
        echo "Error: sudo required for TAP interface setup" >&2
        exit 1
    fi
    sudo ip link delete "${tap_interface}" 2>/dev/null || true
    sudo ip tuntap add dev "${tap_interface}" mode tap || { echo "Failed to create TAP interface"; exit 1; }
    sudo ip addr add "${tap_ip_host}/24" dev "${tap_interface}" || true
    sudo ip link set "${tap_interface}" up
    NET_CONFIG="-netdev tap,id=eth0,ifname=${tap_interface},script=no,downscript=no -device virtio-net-device,netdev=eth0"
    KERNEL_IP="ip=${tap_ip_guest}::${tap_ip_host}:255.255.255.0::eth0:off"
else
    NET_CONFIG="-netdev user,id=eth0 -device virtio-net-device,netdev=eth0"
    KERNEL_IP=""
fi
exec qemu-system-aarch64 -M virt -cpu cortex-a53 -smp 1 -kernel Image \
    -append "rootwait root=/dev/vda console=ttyAMA0 ${KERNEL_IP}" \
    ${NET_CONFIG} \
    -drive file=rootfs.ext4,if=none,format=raw,id=hd0 \
    -device virtio-blk-device,drive=hd0 \
    ${EXTRA_ARGS} "$@" 

After the virtual machine starts, use the command to set a temporaryIP

ip addr add 192.168.100.2/24 dev eth0 # Simulated environment IP 192.168.100.2
ip link set eth0 up

Or directly modify the configuration file to set a static IP. The original /etc/network/interfaces is as follows:

# cat /etc/network/interfaces
# interface file auto-generated by buildroot
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp  pre-up /etc/network/nfs_check  wait-delay 15  hostname $(hostname)

Change it to:

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static    address 192.168.100.2    netmask 255.255.255.0    gateway 192.168.100.1    dns-nameservers 8.8.8.8

Then modify the SSH configuration /etc/ssh/sshd_config, mainly changing these three places:

PermitRootLogin yes
PasswordAuthentication yes
PermitEmptyPasswords yes

You can modify according to your situation; by default, the virtual machine root password is empty. With these settings, the virtual machine can communicate with the host and can also be managed via SSH, which should be sufficient.

Leave a Comment