我正在努力编译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构建内核(失败)
- 要更改内核配置符号,请在build / build.config中编辑
POST_DEFCONFIG_CMDS
- 从https://source.android.com/setup/build/building-kernels#customize-config复制
- 根据需要进行修改,使用
-d
禁用,-e
启用配置选项 - 结果:
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
)添加到CflaGS
和LDflaGS
的信息。我做到了(为此我不得不将其硬编码到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
似乎可以解决此问题。手机开机正常,按钮可以正常工作,但触摸屏无响应。我正在调查原因...