用KASAN编译AOSP内核

我正在努力编译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似乎可以解决此问题。手机开机正常,按钮可以正常工作,但触摸屏无响应。我正在调查原因...

esp281952531 回答:用KASAN编译AOSP内核

关于触摸屏,您需要将所需的驱动程序手动复制到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

,

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

但是触摸屏也不起作用。

本文链接:https://www.f2er.com/3157297.html

大家都在问