github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/docs/translations/zh_CN/adding_new_os_support.md (about)

     1  > [!WARNING]
     2  >
     3  > **请注意,这是社区驱动的官方 syzkaller 文档翻译。当前文档的最新版本(英文版)可在 [docs/adding_new_os_support.md](/docs/adding_new_os_support.md) 中找到。**
     4  
     5  # 添加新的操作系统支持
     6  
     7  为了让 syzkaller 支持一个新的操作系统内核,以下是需要编辑的 syzkaller 的共同部分。然而,特定内核可能还需要一些特定的更改(例如,从给定内核收集代码覆盖率,或者一些可能弹出并给出调整提示的错误信息)。
     8  
     9  ## syz-executor
    10  
    11  每个操作系统都有一个 `executor/executor_GOOS.h` 文件,其中 GOOS 为操作系统名字,例如 `executor/executor_linux.h`。该文件包含两个重要函数:
    12  
    13  - `os_init` 负责为调用进程映射虚拟地址空间,
    14  - `execute_syscall` 负责为特定操作系统内核执行系统调用。
    15  
    16  这两个函数在 `executor/executor.cc` 中被调用,主要负责执行系统调用程序,并管理程序运行的线程。
    17  
    18  `executor_GOOS.h` 还包含与该操作系统相关的函数,例如允许它收集覆盖率信息、检测位宽等的函数(例如:[executor_linux.h](/executor/executor_linux.h))。
    19  
    20  目标内核将根据 `executor/executor.cc` 文件中定义的宏调用预期的函数。
    21  
    22  ## 构建文件 `pkg/`
    23  
    24  - 在 `pkg/build/build.go` 中添加操作系统名称及其支持的架构
    25  - 在 `pkg/build/` 下创建一个构建目标内核镜像的文件。这个文件包含配置和构建可启动镜像构建的函数以及生成 SSH 密钥的函数,这些密钥将由 Syzkaller 用于访问虚拟机。每个由 Syzkaller 支持的操作系统都有一个名为 `GOOS.go` 的文件。
    26  - 将给定目标添加到 `s/makefile/Makefile/`。
    27  
    28  ## 报告文件 `pkg/report/`
    29  
    30  在 `pkg/report/` 下为目标内核创建一个报告构建错误的文件。每个由 Syzkaller 支持的操作系统都有一个名为 `GOOS.go` 的文件。
    31  
    32  ## 编辑 `pkg/host/`
    33  
    34  - 实现 `isSupported` 函数,该函数对于支持的系统调用返回 true,同时它位于 `pkg/host/GOOS` 目录中。
    35  
    36  ## 在 `sys/GOOS/` 下创建文件
    37  
    38  在 `sys/GOOS/` 下为目标内核创建一个 `init.go` 文件,其中包含初始化目标和不同支持架构的 `initTarget` 函数。
    39  
    40  ## 编辑 `sys/syz-extract`
    41  
    42  将新内核名称添加到已支持的内核列表中,并更新到文件 `sys/syz-extract/extract.go` 中。
    43  
    44  ## 编辑 `sys/targets`
    45  
    46  将新内核名称添加到已支持的内核列表中,并更新到文件 `sys/targets/targets.go` 中。
    47  
    48  ## 编辑 `vm/qemu`
    49  
    50  将新内核名称添加到已支持内核的列表中,并更新到文件 `vm/qemu/qemu.go` 中。
    51  
    52  ## Syzkaller 描述与伪系统调用
    53  
    54  查看 [描述](/docs/syscall_descriptions.md) 与 [伪系统调用](/docs/pseudo_syscalls.md).