參考資訊:
https://cdn.kernel.org/pub/linux/kernel/
https://www.cnblogs.com/polariszg/p/18615278
https://github.com/byte4RR4Y/aarch64-kernel-for-qemu
https://www.qemu.org/docs/master/system/riscv/virt.html
https://jasonblog.github.io/note/arm_emulation/compiling_linux_kernel_for_qemu_arm_emulator.html
$ cd
$ wget https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.1.57.tar.gz
$ tar xvf linux-6.1.57.tar.gz
$ cd linux-6.1.57
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make defconfig
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make zImage -j4
$ cd
$ wget https://busybox.net/downloads/busybox-1.37.0.tar.bz2
$ tar xvf busybox-1.37.0.tar.bz2
$ cd busybox-1.37.0
$ mkdir out
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make O=out defconfig
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make O=out menuconfig
Settings --> [V] Build static binary (no shared libs)
Settings --> [ ] SHA1: Use hardware accelerated instructions if possible
Settings --> [ ] SHA256: Use hardware accelerated instructions if possible
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make O=out -j4
$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make O=out install
$ cd out/_install/
$ vim init
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
echo -e "\nBoot took $(cut -d' ' -f1 /proc/uptime) seconds\n"
exec /bin/sh
$ chmod +x init
$ mkdir -pv {bin,sbin,etc,proc,sys,usr/{bin,sbin}}
$ find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../initramfs-busybox.cpio.gz
$ cd ..
$ cp ~/linux-6.1.57/arch/arm/boot/zImage .
$ qemu-system-arm -M virt -cpu cortex-a7 -m 1024M -nographic -kernel zImage -append "console=ttyAMA0" --initrd initramfs-busybox.cpio.gz
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 6.1.57 (steward@debian) (arm-linux-gnueabihf-gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP Wed Jun 11 21:00:18 CST 2025
[ 0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d
[ 0.000000] CPU: div instructions available: patching division code
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] OF: fdt: Machine model: linux,dummy-virt
[ 0.000000] random: crng init done
[ 0.000000] Memory policy: Data cache writealloc
[ 0.000000] efi: UEFI not found.
[ 0.000000] cma: Failed to reserve 64 MiB
[ 0.000000] Zone ranges:
[ 0.000000] DMA [mem 0x0000000040000000-0x0000000047ffffff]
[ 0.000000] Normal empty
[ 0.000000] HighMem empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000040000000-0x0000000047ffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x0000000047ffffff]
[ 0.000000] psci: probing for conduit method from DT.
[ 0.000000] psci: PSCIv1.1 detected in firmware.
[ 0.000000] psci: Using standard PSCI v0.2 function IDs
[ 0.000000] psci: Trusted OS migration not required
[ 0.000000] psci: SMC Calling Convention v1.0
[ 0.000000] percpu: Embedded 16 pages/cpu s34580 r8192 d22764 u65536
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 32512
[ 0.000000] Kernel command line: console=ttyAMA0
[ 0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
[ 0.000000] mem auto-init: stack:all(zero), heap alloc:off, heap free:off
[ 0.000000] Memory: 100288K/131072K available (15360K kernel code, 2468K rwdata, 6256K rodata, 2048K init, 428K bss, 30784K reserved, 0K cma-reserved, 0K highmem)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] trace event string verifier disabled
[ 0.000000] rcu: Hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is enabled.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=16 to nr_cpu_ids=1.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[ 0.000000] GICv2m: range[mem 0x08020000-0x08020fff], SPI[80:143]
[ 0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[ 0.000000] arch_timer: cp15 timer(s) running at 62.50MHz (virt).
[ 0.000000] clocksource: arch_sys_counter: mask: 0x1ffffffffffffff max_cycles: 0x1cd42e208c, max_idle_ns: 881590405314 ns
[ 0.000172] sched_clock: 57 bits at 63MHz, resolution 16ns, wraps every 4398046511096ns
[ 0.000399] Switching to timer-based delay loop, resolution 16ns
[ 0.005871] Console: colour dummy device 80x30
[ 0.007602] Calibrating delay loop (skipped), value calculated using timer frequency.. 125.00 BogoMIPS (lpj=625000)
[ 0.007741] CPU: Testing write buffer coherency: ok
[ 0.013719] pid_max: default: 32768 minimum: 301
[ 0.016382] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.016438] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.040096] /cpus/cpu@0 missing clock-frequency property
[ 0.040525] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[ 0.047312] Setting up static identity map for 0x40300000 - 0x403000ac
[ 0.049352] rcu: Hierarchical SRCU implementation.
[ 0.049398] rcu: Max phase no-delay instances is 1000.
[ 0.053485] EFI services will not be available.
[ 0.054535] smp: Bringing up secondary CPUs ...
[ 0.054636] smp: Brought up 1 node, 1 CPU
[ 0.054720] SMP: Total of 1 processors activated (125.00 BogoMIPS).
[ 0.054798] CPU: All CPU(s) started in SVC mode.
[ 0.065132] devtmpfs: initialized
[ 0.076605] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5
[ 0.098155] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[ 0.099013] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
[ 0.103090] pinctrl core: initialized pinctrl subsystem
[ 0.122923] DMI not present or invalid.
[ 0.134042] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[ 0.138776] DMA: preallocated 256 KiB pool for atomic coherent allocations
[ 0.146178] thermal_sys: Registered thermal governor 'step_wise'
[ 0.157500] cpuidle: using governor menu
[ 0.158510] No ATAGs?
[ 0.160054] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.
[ 0.160149] hw-breakpoint: maximum watchpoint size is 8 bytes.
[ 0.166005] Serial: AMBA PL011 UART driver
[ 0.212926] 9000000.pl011: ttyAMA0 at MMIO 0x9000000 (irq = 28, base_baud = 0) is a PL011 rev1
[ 0.227980] printk: console [ttyAMA0] enabled
[ 1.473234] iommu: Default domain type: Translated
[ 1.473496] iommu: DMA domain TLB invalidation policy: strict mode
[ 1.476904] SCSI subsystem initialized
[ 1.479715] usbcore: registered new interface driver usbfs
[ 1.480179] usbcore: registered new interface driver hub
[ 1.480540] usbcore: registered new device driver usb
[ 1.483513] pps_core: LinuxPPS API ver. 1 registered
[ 1.483683] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 1.484031] PTP clock support registered
[ 1.484743] EDAC MC: Ver: 3.0.0
[ 1.503177] vgaarb: loaded
[ 1.510504] clocksource: Switched to clocksource arch_sys_counter
[ 1.614179] NET: Registered PF_INET protocol family
[ 1.615636] IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear)
[ 1.621519] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
[ 1.621913] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[ 1.622240] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 1.622650] TCP bind hash table entries: 1024 (order: 2, 16384 bytes, linear)
[ 1.623020] TCP: Hash tables configured (established 1024 bind 1024)
[ 1.624851] UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
[ 1.625316] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
[ 1.627300] NET: Registered PF_UNIX/PF_LOCAL protocol family
[ 1.631643] RPC: Registered named UNIX socket transport module.
[ 1.631920] RPC: Registered udp transport module.
[ 1.632068] RPC: Registered tcp transport module.
[ 1.632213] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 1.632514] PCI: CLS 0 bytes, default 64
[ 1.636420] Initialise system trusted keyrings
[ 1.643121] Trying to unpack rootfs image as initramfs...
[ 1.649568] workingset: timestamp_bits=30 max_order=15 bucket_order=0
[ 1.665107] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[ 1.690737] NFS: Registering the id_resolver key type
[ 1.691309] Key type id_resolver registered
[ 1.691518] Key type id_legacy registered
[ 1.692088] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[ 1.692395] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[ 1.692999] ntfs: driver 2.1.32 [Flags: R/O].
[ 1.694753] Key type asymmetric registered
[ 1.694958] Asymmetric key parser 'x509' registered
[ 1.695577] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)
[ 1.695926] io scheduler mq-deadline registered
[ 1.696146] io scheduler kyber registered
[ 1.759698] pl061_gpio 9030000.pl061: PL061 GPIO chip registered
[ 1.767751] pci-host-generic 4010000000.pcie: host bridge /pcie@10000000 ranges:
[ 1.769120] pci-host-generic 4010000000.pcie: IO 0x003eff0000..0x003effffff -> 0x0000000000
[ 1.770049] pci-host-generic 4010000000.pcie: MEM 0x0010000000..0x003efeffff -> 0x0010000000
[ 1.770362] pci-host-generic 4010000000.pcie: MEM 0x8000000000..0xffffffffff -> 0x8000000000
[ 1.771804] pci-host-generic 4010000000.pcie: can't claim ECAM area [mem 0x10000000-0x1fffffff]: address conflict with pcie@10000000 [mem 0x10000000-0x3efeffff]
[ 1.772571] pci-host-generic: probe of 4010000000.pcie failed with error -16
[ 1.847688] Freeing initrd memory: 1032K
[ 1.942552] Serial: 8250/16550 driver, 5 ports, IRQ sharing enabled
[ 1.950322] SuperH (H)SCI(F) driver initialized
[ 1.951965] msm_serial: driver initialized
[ 1.952134] STMicroelectronics ASC driver initialized
[ 1.953764] STM32 USART driver initialized
[ 1.995280] brd: module loaded
[ 2.013216] loop: module loaded
[ 2.023250] physmap-flash 0.flash: physmap platform flash device: [mem 0x00000000-0x03ffffff]
[ 2.025129] 0.flash: Found 2 x16 devices at 0x0 in 32-bit bank. Manufacturer ID 0x000000 Chip ID 0x000000
[ 2.025898] Intel/Sharp Extended Query Table at 0x0031
[ 2.026861] Using buffer write method
[ 2.029146] physmap-flash 0.flash: physmap platform flash device: [mem 0x04000000-0x07ffffff]
[ 2.029928] 0.flash: Found 2 x16 devices at 0x0 in 32-bit bank. Manufacturer ID 0x000000 Chip ID 0x000000
[ 2.030228] Intel/Sharp Extended Query Table at 0x0031
[ 2.030868] Using buffer write method
[ 2.031125] Concatenating MTD devices:
[ 2.031277] (0): "0.flash"
[ 2.031377] (1): "0.flash"
[ 2.031476] into device "0.flash"
[ 2.136892] CAN device driver interface
[ 2.138783] bgmac_bcma: Broadcom 47xx GBit MAC driver loaded
[ 2.140479] e1000e: Intel(R) PRO/1000 Network Driver
[ 2.140643] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[ 2.140972] igb: Intel(R) Gigabit Ethernet Network Driver
[ 2.141141] igb: Copyright (c) 2007-2014 Intel Corporation.
[ 2.147170] pegasus: Pegasus/Pegasus II USB Ethernet driver
[ 2.147485] usbcore: registered new interface driver pegasus
[ 2.147769] usbcore: registered new interface driver asix
[ 2.148022] usbcore: registered new interface driver ax88179_178a
[ 2.148273] usbcore: registered new interface driver cdc_ether
[ 2.149299] usbcore: registered new interface driver smsc75xx
[ 2.149645] usbcore: registered new interface driver smsc95xx
[ 2.149922] usbcore: registered new interface driver net1080
[ 2.150166] usbcore: registered new interface driver cdc_subset
[ 2.150431] usbcore: registered new interface driver zaurus
[ 2.150824] usbcore: registered new interface driver cdc_ncm
[ 2.158459] usbcore: registered new interface driver usb-storage
[ 2.170368] rtc-pl031 9010000.pl031: registered as rtc0
[ 2.171508] rtc-pl031 9010000.pl031: setting system clock to 2025-06-11T13:01:18 UTC (1749646878)
[ 2.175551] i2c_dev: i2c /dev entries driver
[ 2.197831] sdhci: Secure Digital Host Controller Interface driver
[ 2.198106] sdhci: Copyright(c) Pierre Ossman
[ 2.201048] Synopsys Designware Multimedia Card Interface Driver
[ 2.203477] sdhci-pltfm: SDHCI platform and OF driver helper
[ 2.208102] ledtrig-cpu: registered to indicate activity on CPUs
[ 2.211544] usbcore: registered new interface driver usbhid
[ 2.211777] usbhid: USB HID core driver
[ 2.222369] NET: Registered PF_INET6 protocol family
[ 2.230804] Segment Routing with IPv6
[ 2.231193] In-situ OAM (IOAM) with IPv6
[ 2.231824] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[ 2.235738] NET: Registered PF_PACKET protocol family
[ 2.235983] can: controller area network core
[ 2.236661] NET: Registered PF_CAN protocol family
[ 2.236874] can: raw protocol
[ 2.237155] can: broadcast manager protocol
[ 2.237438] can: netlink gateway - max_hops=1
[ 2.238927] Key type dns_resolver registered
[ 2.239511] ThumbEE CPU extension supported.
[ 2.239747] Registering SWP/SWPB emulation handler
[ 2.242478] Loading compiled-in X.509 certificates
[ 2.265081] input: gpio-keys as /devices/platform/gpio-keys/input/input0
[ 2.279102] uart-pl011 9000000.pl011: no DMA platform data
[ 2.386713] Freeing unused kernel image (initmem) memory: 2048K
[ 2.408378] Run /init as init process
Boot took 2.49 seconds
~ #