forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 13
Building the Latest Kernel with eBPF and Tests
Yuriy Kolerov edited this page Feb 20, 2024
·
11 revisions
Download, install and add to PATH
GCC toolchain for ARC HS3x/4x.
Clone the latest Buildroot. Further configuration will use the latest Pahole (>=1.25) and elfutils (>=0.189) so everything must be built successfully.
git clone https://git.buildroot.net/buildroot
mkdir buildroot/build
cd buildroot/build
Create ebpf.fragment
with additional options for the kernel:
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_JIT=y
CONFIG_CGROUPS=y
CONFIG_CGROUP_BPF=y
CONFIG_MEMCG=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_SCHED=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_RDMA=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CPUSETS=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_BPF=y
CONFIG_CGROUP_MISC=y
CONFIG_NAMESPACES=y
CONFIG_KPROBES=y
CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_VERBOSE_ERRORS=y
CONFIG_NVME_FC=y
CONFIG_NVME_TCP=y
CONFIG_NETFILTER=y
CONFIG_NF_CONNTRACK=y
CONFIG_NF_CONNTRACK_MARK=y
CONFIG_DEBUG_INFO_DWARF5=y
CONFIG_DEBUG_INFO_BTF=y
CONFIG_DEBUG_FS=y
CONFIG_BOOTTIME_TRACING=y
CONFIG_IRQSOFF_TRACER=y
CONFIG_PREEMPT_TRACER=y
CONFIG_SCHED_TRACER=y
CONFIG_HWLAT_TRACER=y
CONFIG_TIMERLAT_TRACER=y
CONFIG_FTRACE_SYSCALLS=y
Create defconfig
for HSDK. BR2_TOOLCHAIN_EXTERNAL_PATH
is empty thus Buildroot will try to find the toolchain in PATH
. Also we set BR2_TARGET_ROOTFS_EXT2_SIZE="8000M"
to reserve extra space for filesystem on SD-card.
BR2_arcle=y
BR2_archs38_full=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="$(ARCH)-linux-gnu"
BR2_TOOLCHAIN_EXTERNAL_PATH=""
BR2_TOOLCHAIN_EXTERNAL_GCC_13=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_16=y
BR2_TOOLCHAIN_EXTERNAL_INET_RPC=n
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_TOOLCHAIN_EXTERNAL_FORTRAN=y
BR2_TOOLCHAIN_EXTERNAL_HAS_SSP=y
BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY=y
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_16=y
BR2_PACKAGE_GLIBC_UTILS=y
BR2_TARGET_OPTIMIZATION="-mfpu=fpud_all"
BR2_TARGET_GENERIC_HOSTNAME="hsdk"
BR2_TARGET_GENERIC_ISSUE="Welcome to the HSDK Platform"
#BR2_SYSTEM_DHCP="eth0"
BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/synopsys/hsdk/genimage.cfg"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_GIT=y
BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/foss-for-synopsys-dwc-arc-processors/linux.git"
BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="shahab-bpf-jit-6"
BR2_LINUX_KERNEL_DEFCONFIG="hsdk"
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/synopsys/hsdk/linux.fragment build/ebpf.fragment"
BR2_LINUX_KERNEL_NEEDS_HOST_PAHOLE=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_ROOTFS_EXT2_SIZE="8000M"
# BR2_TARGET_ROOTFS_TAR is not set
BR2_TARGET_UBOOT=y
BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
BR2_TARGET_UBOOT_CUSTOM_VERSION=y
BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2022.01"
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="hsdk"
BR2_TARGET_UBOOT_NEEDS_DTC=y
BR2_TARGET_UBOOT_FORMAT_ELF=y
BR2_TARGET_UBOOT_NEEDS_OPENSSL=y
BR2_PACKAGE_HOST_DOSFSTOOLS=y
BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_MTOOLS=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SOURCE="board/synopsys/hsdk/uboot.env.txt"
BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SIZE="0x4000"
BR2_PACKAGE_NCURSES=y
BR2_PACKAGE_NCURSES_WCHAR=y
BR2_PACKAGE_HAVEGED=y
BR2_PACKAGE_RSYNC=y
BR2_PACKAGE_OPENSSH=y
BR2_PACKAGE_NFS_UTILS=y
BR2_PACKAGE_MAKE=y
BR2_PACKAGE_NANO=y
BR2_PACKAGE_ELFUTILS=y
BR2_PACKAGE_ELFUTILS_PROGS=y
BR2_PACKAGE_ZLIB=y
BR2_PACKAGE_LIBZLIB=y
Set these options to build vmlinux
instead of uImage
:
# BR2_LINUX_KERNEL_UIMAGE=n
# BR2_ROOTFS_POST_IMAGE_SCRIPT=""
BR2_LINUX_KERNEL_VMLINUX=y
Configure and build:
make -C .. O=$(pwd) defconfig DEFCONFIG=build/defconfig
make -j 1 # U-Boot images may be build only with -j 1
Then write sdcard.img
image to SD-card:
- On Linux:
sudo dd if=sdcard.img of=/dev/mmcblk0 bs=1M
- On Windows: use Balena Etcher