【问题标题】:Compiling AOSP Kernel with KASAN用 KASAN 编译 AOSP 内核
【发布时间】:2020-03-02 04:15:10
【问题描述】:

我正在努力编译 Linux 内核,以便在启用 KASAN 和 KCOV 的 AOSP 中使用。然后我打算将其刷入 Pixel 2 XL (taimen) 并使用 Syzkaller 对其进行模糊测试。

这就是我所做的:

1.构建未修改的内核(工作)

我的参考:https://source.android.com/setup/build/building-kernels

  • 确定分支...android-msm-wahoo-4.4-pie-qpr2
  • $ repo init -u https://android.googlesource.com/kernel/manifest -b android-msm-wahoo-4.4-pie-qpr2
  • $ repo sync -j8 -c
  • $ build/build.sh -j8
  • 通过 USB 连接手机
  • $ adb reboot bootloader
  • $ fastboot boot out/android-msm-wahoo-4.4/dist/Image.lz4-dtb (工作正常)

2.使用 KASAN 和 KCOV 构建内核(失败)

POST_DEFCONFIG_CMDS="check_defconfig && update_debug_config"
function update_debug_config() {
    ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
         -d CONFIG_KERNEL_LZ4 \
         -e CONFIG_KASAN \
         -e CONFIG_KASAN_INLINE \
         -e CONFIG_KCOV \
         -e CONFIG_SLUB \
         -e CONFIG_SLUB_DEBUG \
         --set-val FRAME_WARN 0
    (cd ${OUT_DIR} && \
     make O=${OUT_DIR} $archsubarch CC=${CC} CROSS_COMPILE=${CROSS_COMPILE} olddefconfig)
}
  • $ build/build.sh -j8

但是之后 CHK include/generated/compile.h 我对各种 asan 符号有许多未定义的引用错误,例如 undefined reference to __asan_alloca_poison.

我做了一些研究并阅读了有关将-fsantitize=address-shared-libasan(或-shared-libsan)添加到CFLAGSLDFLAGS 的信息。我这样做了(为此我必须将其硬编码为build/build.sh,没有更方便的方法吗?),但无济于事:

我最终得到了 aarch64-linux-android-ld: -f may not be used without -shared.

所以我尝试阅读 ld 的 -shared 标志并将其添加到 LDFLAGS(更像是一个猜测)。导致 aarch64-linux-android-ld: -r and -shared may not be used together.

真的不知道从这里去哪里以及一般出了什么问题?

非常感谢任何帮助!


更新:起初似乎使用gcc 而不是clang 似乎可以解决问题。手机启动正常,按钮工作,但触摸屏没有响应。我正在调查原因...

【问题讨论】:

    标签: android linux kernel android-source address-sanitizer


    【解决方案1】:

    关于触摸屏,您需要手动将所需的驱动程序复制到 AOSP 文件夹中。您可以从内核源代码中获取新的驱动程序。

         cd ${CONTAINER_GIT_REPO} && \
         cp arch/arm64/boot/Image.lz4-dtb \$AOSP/device/google/wahoo-kernel/Image.lz4-dtb && \
         cp arch/arm64/boot/dtbo.img $AOSP/device/google/wahoo-kernel/dtbo.img && \
         cp drivers/input/touchscreen/stm/*.ko $AOSP/device/google/wahoo-kernel && \
         cp drivers/power/*.ko $AOSP/device/google/wahoo-kernel && \
         cp drivers/input/touchscreen/synaptics_dsx_htc/*.ko $AOSP/device/google/wahoo-kernel && \
         cp drivers/input/touchscreen/lge/*.ko $AOSP/device/google/wahoo-kernel && \
         cp drivers/input/touchscreen/lge/lgsic/*.ko $AOSP/device/google/wahoo-kernel && \
    
    # Building final image for Pixel 2
    
         cd \$AOSP && . build/envsetup.sh && lunch aosp_walleye-userdebug && make bootimage -j4 
        && mkdir -p ${CONTAINER_GIT_REPO}/builded_images && \
         cp out/target/product/walleye/*.img ${CONTAINER_GIT_REPO}/builded_images"
    

    获取内核源代码:

    git clone -b android-msm-wahoo-4.4-oreo-m2 --single-branch https://android.googlesource.com/kernel/msm

    我只有 Pixel 2 需要检查,但这应该适用于他们两个。

    更新:您可以查看此回购以获取更多详细信息https://gitlab.com/textor/build-pixel-2-in-docker

    【讨论】:

      【解决方案2】:

      也许您可以尝试使用配置文件:./private/msm-google/build.config.kasan 我曾经使用过这个配置文件并成功了。

      但是触摸屏也不起作用。

      【讨论】:

        猜你喜欢
        • 2020-01-27
        • 2014-11-21
        • 2010-12-21
        • 1970-01-01
        • 1970-01-01
        • 2013-08-21
        • 2017-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多