这篇文章上次修改于 516 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

记录

  1. 设置交叉编译工具链和环境

下载工具链并解压到/usr/local/

wget https://dl.radxa.com/tools/linux/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.gz
sudo tar zxvf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.gz -C /usr/local/

~/.bashrc末尾添加下面的内容:

export PATH="/usr/local/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH"

使环境生效:

source ~/.bashrc
  1. 同步源代码
mkdir ~/rk3588-sdk && cd ~/rk3588-sdk
git clone -b linux-5.10-gen-rkr3.4 https://github.com/radxa/kernel.git --depth=1
git clone -b master https://github.com/radxa/rkbin.git --depth=1
git clone -b debian https://github.com/radxa/build.git --depth=1
  1. 修改build/kernel-package.mk

CROSS_COMPILE这一行改成这个:

CROSS_COMPILE="/usr/local/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-"
  1. 编译 && 打包
cd ~/rk3588-sdk
cd kernel
export ARCH=arm64
export CROSS_COMPILE=aarch64-none-linux-gnu-
make rockchip_linux_defconfig
make menuconfig
make savedefconfig
cp defconfig arch/arm64/configs/rockchip_linux_defconfig
cd ..
./build/mk-kernel.sh rk3588-rock-5b
./build/pack-kernel.sh -d rockchip_linux_defconfig -r 17

make menuconfig这一步增加开启的内核选项如下(UPROBES默认开着的),前三个是malior要用的,后面是eBPF要用的:

CONFIG_PSI
CONFIG_ASHMEM
CONFIG_ANDROID_BINDERFS
CONFIG_KPROBES
CONFIG_KRETPROBES
CONFIG_IKHEADERS
CONFIG_FTRACE_SYSCALLS
CONFIG_FUNCTION_TRACER

如果要另外生成btf文件用来eBPF程序使用,那么还要开启CONFIG_DEBUG_INFO_BTF,主要是Android Docker里面跑eBPF程序

不过在生成的时候可能有些坑,具体可以看看这篇文章:

安卓通用内核编译零碎记录

主要是给./kernel/scripts/link-vmlinux.sh里面的gen_btf添加下面的设置

--skip_encoding_btf_vars --skip_encoding_btf_enum64


其他:最开始我在rock5b上配置好了defconfig,后面在x86主机上交叉编译直接拿来用,弹出下面的提示,所以还是手动配一遍吧:)

2023-05-17T08:04:22.png

Ref