环境搭建 交叉编译工具链下载 toolchains-bootlin musl-cc 裸机编译工具链可以自行寻找。
大家可以使用ubuntu 24.04
或者windows+wsl2
,Mac
的配置和Linux
大同小异。qemu
有windwos
的安装包,也可以使用windows
的qemu
,即WSL2+WINDOWS
。这一部分内容可以参考我之前写的Pwn_kernel
的内核模块开发部分。需要注意的是Windwos
的qemu
和Linux
的qemu
在启动命令上是有些不同的,linux
的一些指令和功能特性是Windows
不支持的。也可以选择在wsl2
中编译qemu
。建议使用Linux
的qemu
,功能更为完善强大。
1 2 3 sudo apt update sudo apt install build-essential -y sudo apt install gdb gdb-multiarch -y
zsh-omz 安装 1 2 3 4 5 6 7 8 9 10 11 12 13 sudo apt-get install zsh -y chsh -s $(which zsh) sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh) " git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom} /plugins/zsh-syntax-highlighting git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom} /plugins/zsh-autosuggestions vim ~/.zshrc plugins=(git z zsh-syntax-highlighting zsh-autosuggestions) source ~/.zshrc
Linux内核编译所需的库 1 2 3 4 5 6 7 8 9 10 11 sudo apt install gcc make bc bison flex libssl-dev libelf-dev sudo apt install libncurses5-dev libncursesw5-dev sudo apt install zlib1g-dev liblz4-dev liblzma-dev libzstd-dev sudo apt install dwarves rsync kmod cpio initramfs-tools-core
Busybox编译所需的库 1 2 3 4 5 sudo apt install libc6-dev sudo apt install libc6-dev-i386 lib32gcc-s1 lib32stdc++6
Qemu编译所需的库 QEMU编译核心依赖
1 2 3 4 5 6 7 8 sudo apt install gcc make cmake ninja-build pkg-config sudo apt install python3 python3-pip python3-dev python3-venv sudo apt install zlib1g-dev libglib2.0-dev libpixman-1-dev libslirp-dev
图形和显示支持
1 2 3 4 5 6 7 8 9 10 11 sudo apt install libsdl2-dev libsdl2-image-dev sudo apt install libgtk-3-dev sudo apt install libvncserver-dev sudo apt install libspice-server-dev libspice-protocol-dev
网络和存储支持
1 2 3 4 5 6 7 8 9 10 11 sudo apt install libcap-ng-dev libattr1-dev sudo apt install libaio-dev libcap-dev libiscsi-dev sudo apt install liblzo2-dev libsnappy-dev libbz2-dev liblzma-dev libzstd-dev sudo apt install libgcrypt20-dev libgnutls28-dev
音频支持
1 sudo apt install libasound2-dev libpulse-dev
虚拟化和硬件加速
1 2 3 4 5 6 7 8 sudo apt install libvirt-dev sudo apt install libusb-1.0-0-dev libusbredirparser-dev sudo apt install libcacard-dev
可选高级功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 sudo apt install valgrind sudo apt install texinfo sudo apt install libcurl4-gnutls-dev libssh-dev sudo apt install librdmacm-dev libibverbs-dev sudo apt install libseccomp-dev
Buildroot编译需要的库 1 2 3 sudo apt install -y git make gcc g++ unzip patch bc libncurses5-dev \ libssl-dev libelf-dev bison flex rsync cpio python3 python3-pip \ file wget
交叉编译工具链安装 ARM EABI 交叉编译工具链
ARM EABI(Embedded Application Binary Interface)主要用于较老的ARM处理器:
1 2 3 4 sudo apt update sudo apt install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi sudo apt install libc6-dev-armel-cross
ARM EABIHF 交叉编译工具链
ARM EABIHF(Hard Float)支持硬件浮点运算,适用于ARMv7架构:
1 2 3 sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf sudo apt install libc6-dev-armhf-cross
AArch64 交叉编译工具链
AArch64是ARM的64位架构:
1 2 3 sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu sudo apt install libc6-dev-arm64-cross
RISC-V 交叉编译工具链
ubuntu缺乏riscv-32位相关的包,我们需要从官网进行下载编译。
1 2 3 sudo apt install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu sudo apt install libc6-dev-riscv64-cross
其他工具链安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 sudo apt install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi -y sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu -y sudo apt install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu -y sudo apt install gcc-x86-64-linux-gnu g++-x86-64-linux-gnu -y sudo apt install gcc-i686-linux-gnu g++-i686-linux-gnu -y sudo apt install gcc-mipsel-linux-gnu g++-mipsel-linux-gnu -y sudo apt install gcc-mips64el-linux-gnuabi64 g++-mips64el-linux-gnuabi64 -y sudo apt install gcc-mips-linux-gnu g++-mips-linux-gnu -y sudo apt install gcc-mips64-linux-gnuabi64 g++-mips64-linux-gnuabi64 -y sudo apt install gcc-powerpc-linux-gnu g++-powerpc-linux-gnu -y sudo apt install gcc-powerpc64-linux-gnu g++-powerpc64-linux-gnu -y sudo apt install gcc-alpha-linux-gnu g++-alpha-linux-gnu -y sudo apt install gcc-s390x-linux-gnu g++-s390x-linux-gnu -y sudo apt install gcc-sparc64-linux-gnu g++-sparc64-linux-gnu -y sudo apt install gcc-arc-linux-gnu g++-arc-linux-gnu -y sudo apt install gcc-m68k-linux-gnu g++-m68k-linux-gnu -y
由于是做相关项目,我们将相关的交叉编译工具链单独放在了项目文件夹里。大家可以通过绝对路径来引用,当然你也可以将其添加到你的环境变量上。我们使用的是glibc
和elf
,也就是使用glibc
库和裸机编译。
我们现在暂时用不到裸机编译工具链none, unknow-elf
版本,所以可以不下载。
toolchains-bootlin 下面是aarch64工具链的区别对比,其他架构也大同小异。
主要区别对比
特性
aarch64-none-linux-gnu
aarch64-none-elf-gnu
aarch64-linux-gnu
目标环境
Linux用户空间
裸机/固件
Linux用户空间
系统调用
支持Linux系统调用
无系统调用
支持Linux系统调用
标准库
glibc
newlib或无
glibc
内存管理
虚拟内存
物理内存
虚拟内存
启动方式
操作系统加载
直接启动
操作系统加载
我们学习Linux内核用到的架构只有常用的 RISCV-64,ARM64,x86_64三种64位架构。
完整的一键安装命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 sudo apt update && sudo apt install -y \ build-essential \ gcc make bc bison flex \ libssl-dev libelf-dev \ libncurses5-dev libncursesw5-dev \ zlib1g-dev liblz4-dev liblzma-dev libzstd-dev \ dwarves rsync kmod cpio initramfs-tools-core \ libc6-dev sudo apt update && sudo apt install -y \ build-essential \ gcc make cmake ninja-build pkg-config \ python3 python3-pip python3-dev python3-venv \ zlib1g-dev libglib2.0-dev libpixman-1-dev \ libsdl2-dev libsdl2-image-dev \ libgtk-3-dev libvncserver-dev \ libspice-server-dev libspice-protocol-dev \ libcap-ng-dev libattr1-dev \ libaio-dev libcap-dev libiscsi-dev \ liblzo2-dev libsnappy-dev libbz2-dev liblzma-dev libzstd-dev \ libgcrypt20-dev libgnutls28-dev \ libasound2-dev libpulse-dev \ libvirt-dev \ libusb-1.0-0-dev libusbredirparser-dev \ libcacard-dev \ texinfo \ libcurl4-gnutls-dev libssh-dev \ libseccomp-dev sudo apt install -y git make gcc g++ clang unzip patch bc libncurses5-dev \ libssl-dev libelf-dev bison flex rsync cpio python3 python3-pip \ file wget bear sudo apt install gcc make cmake ninja-build pkg-config -y sudo apt install python3 python3-pip python3-dev python3-venv -y sudo apt install zlib1g-dev libglib2.0-dev libpixman-1-dev libslirp-dev -y sudo apt install libsdl2-dev libsdl2-image-dev -y sudo apt install libgtk-3-dev -y sudo apt install libvncserver-dev -y sudo apt install libspice-server-dev libspice-protocol-dev -y sudo apt install libcap-ng-dev libattr1-dev -y sudo apt install libaio-dev libcap-dev libiscsi-dev -y sudo apt install liblzo2-dev libsnappy-dev libbz2-dev liblzma-dev libzstd-dev -y sudo apt install libgcrypt20-dev libgnutls28-dev -y sudo apt install libasound2-dev libpulse-dev -y sudo apt install libvirt-dev -y sudo apt install libusb-1.0-0-dev libusbredirparser-dev -y sudo apt install libcacard-dev -y sudo apt install valgrind -y sudo apt install texinfo -y sudo apt install libcurl4-gnutls-dev libssh-dev -y sudo apt install librdmacm-dev libibverbs-dev -y sudo apt install libseccomp-dev -y sudo apt update && sudo apt install -y linux-headers-generic linux-libc-dev sudo apt install libguestfs-tools sudo apt install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi -y sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu -y sudo apt install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu -y sudo apt install gcc-x86-64-linux-gnu g++-x86-64-linux-gnu -y sudo apt install gcc-i686-linux-gnu g++-i686-linux-gnu -y sudo apt install gcc-mipsel-linux-gnu g++-mipsel-linux-gnu -y sudo apt install gcc-mips64el-linux-gnuabi64 g++-mips64el-linux-gnuabi64 -y sudo apt install gcc-mips-linux-gnu g++-mips-linux-gnu -y sudo apt install gcc-mips64-linux-gnuabi64 g++-mips64-linux-gnuabi64 -y sudo apt install gcc-powerpc-linux-gnu g++-powerpc-linux-gnu -y sudo apt install gcc-powerpc64-linux-gnu g++-powerpc64-linux-gnu -y sudo apt install gcc-alpha-linux-gnu g++-alpha-linux-gnu -y sudo apt install gcc-s390x-linux-gnu g++-s390x-linux-gnu -y sudo apt install gcc-sparc64-linux-gnu g++-sparc64-linux-gnu -y sudo apt install gcc-arc-linux-gnu g++-arc-linux-gnu -y sudo apt install gcc-m68k-linux-gnu g++-m68k-linux-gnu -y sudo apt update && sudo apt autoremove && sudo apt full-upgrade -y
编译步骤提示 Linux内核编译: Linux内核下载:
1 2 3 4 wget https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.15.188.tar.gz tar -xvf linux-5.15.188.tar.gz wget https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.12.38.tar.gz tar -xvf linux-5.15.188.tar.gz
1 2 3 4 5 6 7 8 9 10 11 make menuconfig make bzImage -j$(nproc ) sudo make modules_install sudo make install
清华源
make menuconfig
这里我们主要关注调试方面的选项,依次进入到 Kernel hacking -> Compile-time checks and compiler options
,然后勾选如下选项Compile the kernel with debug info
,以便于调试。不过似乎现在是默认开启的。如果要使用 kgdb
调试内核,则需要选中 KGDB: kernel debugger
,并选中 KGDB
下的所有选项。
报错处理:
【1】
问题概述:
make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'. Stop.
解决方法:
编辑 .config
文件,搜索debian/canonical-certs.pem
并把这个字符串删掉。
删除前:
CONFIG_SYSTEM_TRUSTED_KEYS=”debian/canonical-certs.pem”
删除后
CONFIG_SYSTEM_TRUSTED_KEYS=””
【2】
问题概述:
make[2]: *** No rule to make target 'net/netfilter/xt_TCPMSS.o', needed by 'net/netfilter/built-in.a'. Stop.
解决方法:
Makefile 中的 xt_TCPMSS.c 是大写的,而源文件名 (xt_tcpmss.c) 是小写的。这是一个大小写不匹配的问题。
验证源文件名
你可以先检查一下实际的源文件名:
1 ls net/netfilter/xt_*tcpmss*
这应该会显示实际的文件名是 xt_tcpmss.c
(小写)。
1. 找到并编辑 Makefile
1 vim net/netfilter/Makefile
2. 找到第157行左右的内容
寻找类似这样的行:
1 obj-$(CONFIG_NETFILTER_XT_TARGET_TCPMSS) += xt_TCPMSS.o
3. 将大写的 TCPMSS 改为小写的 tcpmss
修改为:
1 obj-$(CONFIG_NETFILTER_XT_TARGET_TCPMSS) += xt_tcpmss.o
4. 保存并重新编译
make bzImage -j4
注意事项:
注意 gcc 版本问题,4.*
一般用 gcc-5
,5.*
一般用 gcc-7
。
gcc多版本共存请参考这里
编译成功后
我们一般主要关注于如下的文件
RISC-V64
镜像名 : Image
路径 : arch/riscv/boot/Image
说明 : 与ARM64一样,RISC-V也使用未压缩的Image格式
x86_64
镜像名 : bzImage
路径 : arch/x86/boot/bzImage
说明 : “big zImage”的缩写,实际上是压缩的内核镜像
ARM64
镜像名 : Image
路径 : arch/arm64/boot/Image
说明 : 未压缩的内核镜像
MIPS
镜像名 : vmlinux.bin
或 vmlinux
路径 : arch/mips/boot/vmlinux.bin
说明 : MIPS架构通常使用vmlinux.bin,某些情况下也会有压缩版本
PowerPC
镜像名 : zImage
或 uImage
路径 : arch/powerpc/boot/zImage
说明 : PowerPC使用zImage(压缩镜像)或uImage(U-Boot格式)
ARM32
镜像名 : zImage
或 uImage
路径 : arch/arm/boot/zImage
说明 : 32位ARM使用压缩的zImage格式
SPARC
镜像名 : zImage
或 vmlinux
路径 : arch/sparc/boot/zImage
Alpha
查看所有可用的镜像目标
你可以通过以下命令查看特定架构支持的所有镜像格式:
1 2 3 4 5 make help | grep -A 10 "Architecture specific targets" make help
镜像格式说明
Image : 未压缩的内核镜像,主要用于ARM64和RISC-V
zImage : 压缩的内核镜像,自解压,常用于ARM32、PowerPC等
bzImage : “big zImage”,x86架构的压缩内核镜像
uImage : U-Boot格式的内核镜像,包含加载地址等信息
vmlinux : 未压缩的ELF格式内核镜像,主要用于调试
实际编译示例
对于不同架构,你可以明确指定要编译的镜像类型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- menuconfig make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- Image make ARCH=x86_64 CROSS_COMPILE=x86_64-linux-gnu- menuconfig make ARCH=x86_64 CROSS_COMPILE=x86_64-linux-gnu- bzImage make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image make ARCH=mips CROSS_COMPILE=mips-linux-gnu- menuconfig make ARCH=mips CROSS_COMPILE=mips-linux-gnu- vmlinux.bin
Busybox编译: Busybox下载:
1 2 wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2 tar -jxvf busybox-1.36.1.tar.bz2
1 2 3 4 5 6 7 8 9 10 11 12 ➜ busybox-1.36.1 mkdir -p ./build/x86_64 ➜ busybox-1.36.1 make menuconfig ➜ busybox-1.36.1 make -j$(nproc ) ➜ busybox-1.36.1 make install
如果你的内核版本大于6.8.0编译可能会报错:https://lists.busybox.net/pipermail/busybox-cvs/2024-January/041752.html
只需要把tc.c移除或者禁用即可。
交叉编译只需要修改Cross complier prefix
的值即可,比如aarch64-linux-gnu-
。
Qemu 编译: QEMU编译步骤
1 2 3 4 5 6 7 8 9 10 11 12 13 wget https://download.qemu.org/qemu-10.0.2.tar.xz tar -xvf qemu-10.0.2.tar.xz cd qemu-10.0.2./configure --enable-kvm --enable-gtk --enable-spice --enable-usb-redir --enable-slirp make -j$(nproc ) sudo make install
注意事项
不同版本的QEMU可能对依赖库的要求略有不同
可以通过 ./configure --help
查看具体的编译选项
如果只需要特定架构支持,可以使用 --target-list
参数减少编译时间
某些功能需要相应的内核模块支持(如KVM需要加载kvm模块)
这些库足以支持QEMU的完整功能编译,包括各种虚拟化特性、图形界面、网络和存储支持等。
Buildroot 编译: 1 2 wget https://buildroot.org/downloads/buildroot-2025.02.4.tar.gz tar -xvf buildroot-2025.02.4.tar.gz
ARM64 Linux编译
查看可用的ARM64相关配置
1 2 3 4 5 6 7 ➜ buildroot-2025.02.4 make list-defconfigs | grep aarch64 make: Warning: File '/mnt/d/DM/linux_kernel_research/buildroot-2025.02.4/output/.br2-external.mk' has modification time 0.47 s in the future aarch64_efi_defconfig - Build for aarch64_efi 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 make: warning: Clock skew detected. Your build may be incomplete.
使用QEMU ARM64配置作为基础
1 ➜ buildroot-2025.02.4 make qemu_aarch64_virt_defconfig
运行配置界面进行定制
1 2 3 4 5 6 ➜ buildroot-2025.02.4 make menuconfig kernel-> filesystem->
make 即可,输出目录在output/images/
错误处理:
【1】
报错:
➜ buildroot-2025.02.4 make -j$(nproc) ERROR: No hash found for linux-5.15.18.tar.xz make: *** [package/pkg-generic.mk:179: /mnt/d/DM/linux_kernel_research/buildroot-2025.02.4/output/build/linux-headers-5.15.18/.stamp_downloaded] Error 1
成因:
没有对应sha256值用来校验。
解决方案:
第一种方法:添加对应值上去。
第二种方法:使用官方有的版本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ➜ buildroot-2025.02.4 cat ./linux/linux.hash sha256 c0a575630f2603a20bb0641f8df8f955e46c9d7ac1fae8b54b21316e6b52a254 linux-6.12.33.tar.xz sha256 0d79ff359635e9f009f1e330deed5f3aefd8c452b80660bffdc504b877797719 linux-6.6.93.tar.xz sha256 bc3c45faf6f5f0450666c75fa9dad9bc7c0cf7c7cba0dbd94e5cfdc58229c116 linux-6.1.141.tar.xz sha256 3d03eb798910f32929f7fda5a56e4bb1a121f10bde320d6f3063639c009313dc linux-5.15.185.tar.xz sha256 07c852940dc2dc03fe84f7fcf697648d7cba11c62d20504380492ba07aa46bb6 linux-5.10.238.tar.xz sha256 c879d0ba817aaa0fde318d58d7e1f141d9c29bd8569a96b73159ebc448077b99 linux-5.4.294.tar.xz sha256 fb0edc3c18e47d2b6974cb0880a0afb5c3fa08f50ee87dfdf24349405ea5f8ae linux-cip-5.10.162-cip24.tar.gz sha256 b5539243f187e3d478d76d44ae13aab83952c94b885ad889df6fa9997e16a441 linux-cip-5.10.162-cip24-rt10.tar.gz sha256 fb5a425bd3b3cd6071a3a9aff9909a859e7c1158d54d32e07658398cd67eb6a0 COPYING sha256 f6b78c087c3ebdf0f3c13415070dd480a3f35d8fc76f3d02180a407c1c812f79 LICENSES/preferred/GPL-2.0 sha256 8e378ab93586eb55135d3bc119cce787f7324f48394777d00c34fa3d0be3303f LICENSES/exceptions/Linux-syscall-note
RISC-V64 Linux编译
Qemu 调试 Linux Kernel 我们使用 Linux 上的 Qemu。如果你使用 Windwos 的 Qemu 注意修改启动参数。
x86_64
首先在busybox文件夹创建一些系统文件:
1 mkdir -p lib tmp proc sys dev etc/init.d
(可选)然后编写一个内核模块(感兴趣看内核开发部分,或者可以从Pwn_kernel
的内核模块开发部分简单了解),将其放在/lib/
目录中。
编写一个init脚本,放在根目录即可。
1 2 3 4 5 6 7 8 9 10 11 #!/bin/sh echo "INIT SCRIPT" mount -t proc none /proc mount -t sysfs none /sys mount -t devtmpfs none /dev mount -t debugfs none /sys/kernel/debug mount -t tmpfs none /tmp insmod /lib/ko_test.ko echo -e "Boot took $(cut -d' ' -f1 /proc/uptime) seconds" setsid /bin/cttyhack setuidgid 0 /bin/sh poweroff -f
打包文件系统:
1 find . | cpio -o -H newc > ../rootfs.cpio
将编译好的/kernel/arch/x86/boot/bzImage
复制到rootfs.img 同级目录。之后便可以启动Qemu。
Linux启动脚本:
1 2 3 4 5 6 7 8 9 10 #!/bin/sh qemu-system-x86_64 \ -m 64M \ -nographic \ -kernel ./bzImage \ -initrd ./rootfs.cpio \ -append "init=/init root=/dev/ram rw console=ttyS0 oops=panic panic=1 kaslr" \ -smp cores=2,threads=2 \ -cpu kvm64 \ -s
windwos pwsh 启动脚本。
1 2 3 4 5 6 7 8 9 qemu-system-x86_64 .exe ` -m 64 M ` -nographic ` -kernel .\bzImage ` -initrd .\rootfs.cpio ` -append "init=/init root=/dev/ram rw console=ttyS0 oops=panic panic=1 kaslr" ` -smp cores=2 ,threads=2 ` -cpu kvm64 ` -s
可以使用-append "init=/init"
参数指定启动脚本,不指定则默认使用根目录下的init
。我们这里养成良好习惯显示指定init
脚本。
如果要调试用户态程序可以使用qemu的端口转发功能。假如我们在qemu内使用gdbserver监听了1337端口。
1 2 3 qemu-system-x86_64 \ -netdev user,id =net0,hostfwd=tcp::10001-:1337 \ -device virtio-net-pci,netdev=net0
这样我们可以从宿主机10001端口访问qemu内部的1337调试端口。
基本命令格式
1 2 3 qemu-system-x86_64 \ -netdev user,id =<网络标识>,hostfwd=<协议>:<宿主机IP>:<宿主机端口>-<虚拟机IP>:<虚拟机端口> \ -device <网卡驱动>,netdev=<网络标识>
关键参数说明
-netdev user
启用用户模式网络栈(无需 root 权限),支持端口转发。
id=<网络标识>
自定义网络设备标识(如 net0
),用于关联后续 -device
。
hostfwd=<规则>
端口转发规则,格式:
1 协议:宿主机IP:宿主机端口-虚拟机IP:虚拟机端口
协议:tcp
或 udp
IP 省略时默认绑定 0.0.0.0
(any)
-device <网卡驱动>
指定虚拟网卡类型(如 virtio-net-pci
)。
调试工具
multiarch-gdbserver-static :调试内部程序用的静态编译的gdbserver
。
ARM64
Linux 启动脚本:
Windwos pwsh 启动脚本:
RISC-V64
Linux 启动脚本
Windwos pwsh 启动脚本:
Linux内核基础知识