qemu运行linux 4.9

本文详细介绍使用QEMU从源码构建ARM虚拟机的过程,包括克隆QEMU源码、配置与编译QEMU、构建内核及文件系统等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、git clone最新的Qemu代码到本地:

ubuntu@ubuntu-X556UB:~/Qemu$ git clone git://git.qemu-project.org/qemu.git
正克隆到 'qemu'...
remote: Counting objects: 302770, done.
remote: Compressing objects: 100% (56838/56838), done.
remote: Total 302770 (delta 245135), reused 302770 (delta 245135)
接收对象中: 100% (302770/302770), 98.29 MiB | 74.00 KiB/s, 完成.
处理 delta 中: 100% (245135/245135), 完成.
检查连接... 完成。
正在检出文件: 100% (5068/5068), 完成.

2、配置Qemu
ubuntu@ubuntu-X556UB:~/Qemu/qemu$ ./configure --target-list=arm-softmmu --audio-drv-list=

ERROR: DTC (libfdt) version >= 1.4.0 not present. Your options:
         (1) Preferred: Install the DTC (libfdt) devel package
         (2) Fetch the DTC submodule, using:
             git submodule update --init dtc
ubuntu@ubuntu-X556UB:~/Qemu/qemu$ git submodule update --init dtc
子模组 'dtc' (git://git.qemu-project.org/dtc.git) 未对路径 'dtc' 注册
正克隆到 'dtc'...
remote: Counting objects: 3521, done.
remote: Compressing objects: 100% (2076/2076), done.
remote: Total 3521 (delta 2600), reused 1937 (delta 1409)
接收对象中: 100% (3521/3521), 800.99 KiB | 495.00 KiB/s, 完成.
处理 delta 中: 100% (2600/2600), 完成.
检查连接... 完成。
子模组路径 'dtc':检出 '65cc4d2748a2c2e6f27f1cf39e07a5dbabd80ebf'

64位ARM配置

ubuntu@ubuntu-X556UB:~/Qemu/qemu$./configure --target-list=aarch64-softmmu --audio-drv-list=    

ubuntu@ubuntu-X556UB:~/Qemu/qemu$ ./configure --target-list=arm-softmmu --audio-drv-list=
Install prefix    /usr/local
BIOS directory    /usr/local/share/qemu
binary directory  /usr/local/bin
library directory /usr/local/lib
module directory  /usr/local/lib/qemu
libexec directory /usr/local/libexec
include directory /usr/local/include
config directory  /usr/local/etc
local state directory   /usr/local/var
Manual directory  /usr/local/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path       /home/ubuntu/Qemu/qemu
C compiler        cc
Host C compiler   cc
C++ compiler      c++
Objective-C compiler cc
ARFLAGS           rv
CFLAGS            -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g 
QEMU_CFLAGS       -I/usr/include/pixman-1 -I$(SRC_PATH)/dtc/libfdt -Werror -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv  -Wendif-labels -Wmissing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-strong  -I/usr/include/libpng12
LDFLAGS           -Wl,--warn-common -Wl,-z,relro -Wl,-z,now -pie -m64 -g 
make              make
install           install
python            python -B
smbd              /usr/sbin/smbd
module support    no
host CPU          x86_64
host big endian   no
target list       arm-softmmu
tcg debug enabled no
gprof enabled     no
sparse enabled    no
strip binaries    yes
profiler          no
static build      no
pixman            system
SDL support       no 
GTK support       yes (2.24.30)
GTK GL support    no
VTE support       no 
TLS priority      NORMAL
GNUTLS support    no
GNUTLS rnd        no
libgcrypt         no
libgcrypt kdf     no
nettle            no 
nettle kdf        no
libtasn1          no
curses support    no
virgl support     no
curl support      no
mingw32 support   no
Audio drivers     
Block whitelist (rw) 
Block whitelist (ro) 
VirtFS support    yes
VNC support       yes
VNC SASL support  no
VNC JPEG support  yes
VNC PNG support   yes
xen support       no
brlapi support    no
bluez  support    no
Documentation     yes
PIE               yes
vde support       no
netmap support    no
Linux AIO support no
ATTR/XATTR support yes
Install blobs     yes
KVM support       yes
COLO support      yes
RDMA support      no
TCG interpreter   no
fdt support       yes
preadv support    yes
fdatasync         yes
madvise           yes
posix_madvise     yes
libcap-ng support no
vhost-net support yes
vhost-scsi support yes
vhost-vsock support yes
Trace backends    log
spice support     no 
rbd support       no
xfsctl support    no
smartcard support no
libusb            no
usb net redir     no
OpenGL support    no
OpenGL dmabufs    no
libiscsi support  no
libnfs support    no
build guest agent yes
QGA VSS support   no
QGA w32 disk info no
QGA MSI support   no
seccomp support   no
coroutine backend ucontext
coroutine pool    yes
debug stack usage no
GlusterFS support no
Archipelago support no
gcov              gcov
gcov enabled      no
TPM support       yes
libssh2 support   no
TPM passthrough   yes
QOM debugging     yes
lzo support       no
snappy support    no
bzip2 support     no
NUMA host support no
tcmalloc support  no
jemalloc support  no
avx2 optimization yes
replication support yes

3、make

ubuntu@ubuntu-X556UB:~/qemu$ make

4、make install

ubuntu@ubuntu-X556UB:~/qemu$ sudo make install

5、查看支持的芯片:
ubuntu@ubuntu-X556UB:~/qemu$ qemu-system-arm -M ?
Supported machines are:
akita                Sharp SL-C1000 (Akita) PDA (PXA270)
ast2500-evb          Aspeed AST2500 EVB (ARM1176)
borzoi               Sharp SL-C3100 (Borzoi) PDA (PXA270)
canon-a1100          Canon PowerShot A1100 IS
cheetah              Palm Tungsten|E aka. Cheetah PDA (OMAP310)
collie               Sharp SL-5500 (Collie) PDA (SA-1110)
connex               Gumstix Connex (PXA255)
cubieboard           cubietech cubieboard
highbank             Calxeda Highbank (ECX-1000)
imx25-pdk            ARM i.MX25 PDK board (ARM926)
integratorcp         ARM Integrator/CP (ARM926EJ-S)
kzm                  ARM KZM Emulation Baseboard (ARM1136)
lm3s6965evb          Stellaris LM3S6965EVB
lm3s811evb           Stellaris LM3S811EVB
mainstone            Mainstone II (PXA27x)
midway               Calxeda Midway (ECX-2000)
musicpal             Marvell 88w8618 / MusicPal (ARM926EJ-S)
n800                 Nokia N800 tablet aka. RX-34 (OMAP2420)
n810                 Nokia N810 tablet aka. RX-44 (OMAP2420)
netduino2            Netduino 2 Machine
none                 empty machine
nuri                 Samsung NURI board (Exynos4210)
palmetto-bmc         OpenPOWER Palmetto BMC (ARM926EJ-S)
raspi2               Raspberry Pi 2
realview-eb          ARM RealView Emulation Baseboard (ARM926EJ-S)
realview-eb-mpcore   ARM RealView Emulation Baseboard (ARM11MPCore)
realview-pb-a8       ARM RealView Platform Baseboard for Cortex-A8
realview-pbx-a9      ARM RealView Platform Baseboard Explore for Cortex-A9
romulus-bmc          OpenPOWER Romulus BMC (ARM1176)
sabrelite            Freescale i.MX6 Quad SABRE Lite Board (Cortex A9)
smdkc210             Samsung SMDKC210 board (Exynos4210)
spitz                Sharp SL-C3000 (Spitz) PDA (PXA270)
sx1                  Siemens SX1 (OMAP310) V2
sx1-v1               Siemens SX1 (OMAP310) V1
terrier              Sharp SL-C3200 (Terrier) PDA (PXA270)
tosa                 Sharp SL-6000 (Tosa) PDA (PXA255)
verdex               Gumstix Verdex (PXA270)
versatileab          ARM Versatile/AB (ARM926EJ-S)
versatilepb          ARM Versatile/PB (ARM926EJ-S)
vexpress-a15         ARM Versatile Express for Cortex-A15
vexpress-a9          ARM Versatile Express for Cortex-A9
virt-2.6             QEMU 2.6 ARM Virtual Machine
virt-2.7             QEMU 2.7 ARM Virtual Machine
virt-2.8             QEMU 2.8 ARM Virtual Machine
virt                 QEMU 2.9 ARM Virtual Machine (alias of virt-2.9)
virt-2.9             QEMU 2.9 ARM Virtual Machine
xilinx-zynq-a9       Xilinx Zynq Platform Baseboard for Cortex-A9
z2                   Zipit Z2 (PXA27x)

6、下载内核4.9版本内核linux-4.9.tar.gz并解压到linux-4.9文件夹

https://www.kernel.org/pub/linux/kernel/v4.x/


7、 配置内核并编译 

ubuntu@ubuntu-X556UB:~/Qemu/linux-4.9$ make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/zconf.lex.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
ubuntu@ubuntu-X556UB:~/Qemu/linux-4.9$ make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm


8、下载busybox并编译安装

git clone https://github.com/mirror/busybox.git
make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make CROSS_COMPILE=arm-linux-gnueabi- install


9、制作文件系统

sudo mkdir rootfs
sudo cp /home/ubuntu/Qemu/busybox/_install/* -r rootfs/
sudo mkdir rootfs/lib/
sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/
sudo mkdir rootfs/dev
sudo mknod rootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2 c 4 2
sudo mknod rootfs/dev/tty3 c 4 3
sudo mknod rootfs/dev/tty4 c 4 4
dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32
mkfs.ext3 a9rootfs.ext3


10、启动系统

qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/ubuntu/Qemu/linux-4.9/arch/arm/boot/zImage -dtb /home/ubuntu/Qemu/linux-4.9/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd /home/ubuntu/Qemu/a9rootfs.ext3

### Zynq 裸机项目迁移至 Linux 的方法 #### 准备工作 为了成功将基于 Zynq 平台的裸金属应用程序迁移到 Linux 环境下运行,需完成一系列准备工作。这包括但不限于获取适合目标硬件架构的操作系统镜像文件以及必要的开发工具链。 对于 AMD Kria KV260 Vision Starter Kit 这样的设备而言,在启动过程中加载 Ubuntu 22.04 LTS 是可行的选择之一[^1]。该版本提供了稳定的支持和服务周期,有助于长期维护项目的兼容性和安全性。 #### 构建定制化内核 针对特定应用场景优化过的 Linux 内核能够显著提升性能表现并简化驱动程序集成过程。通过调整源码中的配置项来满足实际需求是非常重要的一步: ```bash cd linux-4.9 make defconfig make menuconfig ``` 在此期间可以修改诸如页面大小(Page Size)、虚拟地址空间尺寸(Virtual Address Space Size)等参数设置以适应底层硬件特性[^2]。之后利用多线程编译技术加速构建流程: ```bash make -j$(nproc) ls arch/arm64/boot/Image ``` 上述命令会生成适用于 ARM64 架构的目标二进制映像文件 `arch/arm64/boot/Image` ,这是后续引导加载所必需的关键组件。 #### 设置 QEMU 模拟器环境 当物理板卡不可用时,借助于强大的全系统仿真软件——QEMU 可以为开发者提供便利高效的测试平台。安装最新版 QEMU 后即可按照官方文档指导创建相应的启动盘镜像,并定义好网络接口及其他外设连接方式[^3]: ```bash wget https://download.qemu.org/qemu-7.1.0.tar.xz tar xf qemu-7.1.0.tar.xz && cd qemu-7.1.0/ ./configure --target-list=aarch64-linux-user,aarch64-softmmu make -j$(nproc) sudo make install ``` 此时已经具备了执行 AArch64 用户态程序的能力;而对于完整的操作系统实例,则还需要额外准备根文件系统(Root File System),比如 BusyBox 提供的基础 shell 工具集及其依赖库。 #### 自动化 Makefile 配置管理 考虑到大型工程项目往往涉及众多子模块间的协作关系,合理运用 GNU Make 工具可以帮助我们更好地组织整个构建链条。特别是当面对复杂交叉编译场景时,预先设定一些全局生效的行为准则显得尤为重要[^4]: ```makefile # Disable built-in rules and search paths. MAKEFLAGS += -rR \ --no-print-directory \ --warn-undefined-variables ``` 这些选项有效防止潜在冲突的同时也提高了调试效率,使得最终产物更加健壮可靠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值