这篇文章上次修改于 516 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
记录
- 设置交叉编译工具链和环境
下载工具链并解压到/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
- 同步源代码
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
- 修改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-"
- 编译 && 打包
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主机上交叉编译直接拿来用,弹出下面的提示,所以还是手动配一遍吧:)
没有评论