github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/docs/translations/zh_CN/linux/setup_linux-host_qemu-vm_arm64-kernel.md (about) 1 > [!WARNING] 2 > 3 > **请注意,这是社区驱动的官方 syzkaller 文档翻译。当前文档的最新版本(英文版)可在 [docs/linux/setup_linux-host_qemu-vm_arm64-kernel.md](/docs/linux/setup_linux-host_qemu-vm_arm64-kernel.md) 中找到。** 4 5 # 设置:Linux 主机,QEMU 虚拟机,arm64 内核 6 7 这份文档将详细说明如何设置 Syzkaller 实例,以便对你选择的任何 ARM64 Linux 内核进行模糊测试。 8 9 ## 创建一个磁盘映像 10 11 我们将使用 buildroot 来创建磁盘映像。 12 你可以从 [这里](https://buildroot.uclibc.org/download.html) 获取 buildroot。 13 解压压缩包,并在其中执行 `make menuconfig`, 14 选择以下选项。 15 16 Target options 17 Target Architecture - Aarch64 (little endian) 18 Toolchain type 19 External toolchain - Linaro AArch64 20 System Configuration 21 [*] Enable root login with password 22 ( ) Root password = set your password using this option 23 [*] Run a getty (login prompt) after boot ---> 24 TTY port - ttyAMA0 25 Target packages 26 [*] Show packages that are also provided by busybox 27 Networking applications 28 [*] dhcpcd 29 [*] iproute2 30 [*] openssh 31 Filesystem images 32 [*] ext2/3/4 root filesystem 33 ext2/3/4 variant - ext3 34 exact size in blocks - 6000000 35 [*] tar the root filesystem 36 37 运行 `make`。编译完成后,确认 `output/images/rootfs.ext3` 文件是否存在。 38 39 如果在 x86 上运行 arm64 qemu 时遇到 ssh 启动时间非常慢的问题,很可能是熵不足的问题,可以通过安装 `haveged` 来 “解决” 这个问题。你可以在 buildroot 的 `menuconfig` 中找到该选项: 40 41 ``` 42 Target packages 43 Miscellaneous 44 [*] haveged 45 ``` 46 47 ## 从 Linaro 获取 ARM64 工具链 48 49 你需要一个支持 gcc 插件的 ARM64 内核。 50 如果没有,请从 Linaro 获取 ARM64 工具链。 51 从 [这里](https://releases.linaro.org/components/toolchain/binaries/6.1-2016.08/aarch64-linux-gnu/) 获取 `gcc-linaro-6.1.1-2016.08-x86_64_aarch64-linux-gnu.tar.xz`。 52 解压缩并将其 `bin/` 添加到你的 `PATH` 中。 53 如果你的电脑上已经安装了其他 ARM64 工具链,请确保新下载的工具链被优先使用。 54 55 ## 编译内核 56 57 获取你想要进行模糊测试的 Linux 内核版本的源代码,并执行以下操作。 58 59 $ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make defconfig 60 $ vim .config 61 62 更改以下选项: 63 ``` 64 CONFIG_KCOV=y 65 CONFIG_KASAN=y 66 CONFIG_DEBUG_INFO=y 67 CONFIG_CMDLINE="console=ttyAMA0" 68 CONFIG_KCOV_INSTRUMENT_ALL=y 69 CONFIG_DEBUG_FS=y 70 CONFIG_NET_9P=y 71 CONFIG_NET_9P_VIRTIO=y 72 CONFIG_CROSS_COMPILE="aarch64-linux-gnu-" 73 ``` 74 ``` 75 $ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make -j40 76 ``` 77 78 如果编译成功,应该会有一个 `arch/arm64/boot/Image` 文件。 79 80 ## 获取用于 ARM64 的 QEMU 81 82 从 git 或最新发布的源代码中获取 QEMU 源代码。 83 84 $ ./configure 85 $ make -j40 86 87 如果编译成功,应该会有一个 `aarch64-softmmu/qemu-system-aarch64` 二进制文件。 88 89 ## 手动启动 90 91 按照以下步骤启动内核。 92 93 $ /path/to/aarch64-softmmu/qemu-system-aarch64 \ 94 -machine virt \ 95 -cpu cortex-a57 \ 96 -nographic -smp 1 \ 97 -hda /path/to/rootfs.ext3 \ 98 -kernel /path/to/arch/arm64/boot/Image \ 99 -append "console=ttyAMA0 root=/dev/vda oops=panic panic_on_warn=1 panic=-1 ftrace_dump_on_oops=orig_cpu debug earlyprintk=serial slub_debug=UZ" \ 100 -m 2048 \ 101 -net user,hostfwd=tcp::10023-:22 -net nic 102 103 此时,你应该能够看到一个登录提示符。 104 105 ## 设置 QEMU 磁盘 106 107 现在我们已经有了一个 shell,接着我们向现有的初始化脚本添加几行代码,这样每次 Syzkaller 启动虚拟机时都会执行这些脚本。 108 109 在 /etc/init.d/S50sshd 的顶部添加以下行: 110 111 ifconfig eth0 up 112 dhcpcd 113 mount -t debugfs none /sys/kernel/debug 114 chmod 777 /sys/kernel/debug/kcov 115 116 将该行注释掉 117 118 /usr/bin/ssh-keygen -A 119 120 121 接下来我们要设置 ssh。在本地生成一个 ssh 密钥对,然后将公钥复制到 `/` 目录下的 `/authorized_keys` 文件中。在生成密钥时,请不要设置密码。 122 123 打开 `/etc/ssh/sshd_config` 文件,并按照下面所示修改以下行。 124 125 PermitRootLogin yes 126 PubkeyAuthentication yes 127 AuthorizedKeysFile /authorized_keys 128 PasswordAuthentication yes 129 130 重新启动计算机,并确保你可以从主机 ssh 连接到虚拟机。 131 132 $ ssh -i /path/to/id_rsa root@localhost -p 10023 133 134 ## 编译 syzkaller 135 136 按照 [这里](/docs/linux/setup.md#go-and-syzkaller) 的描述编译 Syzkaller,目标为 `arm64`。 137 138 ``` 139 CC=gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ 140 make TARGETARCH=arm64 141 ``` 142 143 144 ## 修改你的配置文件并启动 Syzkaller 145 146 以下是一个示例配置文件,包含了所需的选项。根据你的需求进行修改。 147 148 ``` 149 { 150 "name": "QEMU-aarch64", 151 "target": "linux/arm64", 152 "http": ":56700", 153 "workdir": "/path/to/a/dir/to/store/syzkaller/corpus", 154 "kernel_obj": "/path/to/linux/build/dir", 155 "syzkaller": "/path/to/syzkaller/arm64/", 156 "image": "/path/to/rootfs.ext3", 157 "sshkey": "/path/to/id_rsa", 158 "procs": 8, 159 "type": "qemu", 160 "vm": { 161 "count": 1, 162 "qemu": "/path/to/qemu-system-aarch64", 163 "cmdline": "console=ttyAMA0 root=/dev/vda", 164 "kernel": "/path/to/Image", 165 "cpu": 2, 166 "mem": 2048 167 } 168 } 169 ``` 170 171 此时,你应该能够访问 `localhost:56700` 并查看模糊测试的结果。 172 173 如果在 `syz-manager` 启动后遇到问题,请考虑使用 `-debug` 标志运行它。 174 还可以查看 [此页面](/docs/troubleshooting.md) 获取故障排除提示。