diff --git a/.gitignore b/.gitignore index 91b9281..62c8538 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,10 @@ *.obj *.elf *.bin +*.img + +# Exception for nexmon.bin +!nexmon/nexmon.bin # Linker output *.ilk @@ -55,5 +59,21 @@ dkms.conf *.dtb *to_buildroot* *out* -*build* +*build*/ +!buildroot/ +buildroot-*.gz *.S +!memory-separation/boot.S + +# Build specific files +rpi4-ws/arm-trusted-firmware/ +rpi4-ws/firmware/ +rpi4-ws/u-boot/ +memory-separation/link.ld + + +# don't ignore scripts +!*.sh + +# binary +malicous_ta/host/malicious_ca diff --git a/.gitmodules b/.gitmodules index cdf36ef..c897efc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "CROSSCON-Hypervisor"] path = CROSSCON-Hypervisor - url = git@github.com:crosscon/CROSSCON-Hypervisor.git + url = https://github.com/3mdeb/CROSSCON-Hypervisor [submodule "optee_client"] path = optee_client url = git@github.com:crosscon/optee_client.git @@ -19,3 +19,16 @@ [submodule "bitcoin-wallet"] path = bitcoin-wallet url = git@github.com:crosscon/bitcoin-wallet.git +[submodule "security_test/armageddon"] + path = security_test/armageddon + url = https://github.com/isec-tugraz/armageddon.git + ignore = dirty +[submodule "buildroot"] + path = buildroot + url = https://github.com/buildroot/buildroot.git +[submodule "optee_os_cba"] + path = optee_os_cba + url = git@github.com:crosscon/context-based-auth-optee-os.git +[submodule "cba_ta"] + path = cba_ta + url = git@github.com:crosscon/context-based-auth-trusted-application.git diff --git a/CROSSCON-Hypervisor b/CROSSCON-Hypervisor index ba9682c..c8711ea 160000 --- a/CROSSCON-Hypervisor +++ b/CROSSCON-Hypervisor @@ -1 +1 @@ -Subproject commit ba9682cbbe6e55cbf3761cd91aabe32fcf2740f9 +Subproject commit c8711ea1be0e8c85da152ea84e273ac1b6f4d6c9 diff --git a/build_riscv.sh b/build_riscv.sh new file mode 100755 index 0000000..1af90a9 --- /dev/null +++ b/build_riscv.sh @@ -0,0 +1,345 @@ +#!/bin/bash + +step_1() { +cd optee_os + +OPTEE_DIR="./" +export O="$OPTEE_DIR/optee-riscv" + +SHMEM_START="0x98f00000" +SHMEM_SIZE="0x00200000" +TDDRAM_START="0xb0000000" +TDDRAM_SIZE="0x00f00000" + +rm -rf $O + +make \ + ARCH=riscv \ + PLATFORM=virt \ + CROSS_COMPILE64=riscv64-linux-gnu- \ + CROSS_COMPILE32=riscv32-linux-gnu-\ + CFG_TDDRAM_SIZE=$TDDRAM_SIZE \ + CFG_TDDRAM_START=$TDDRAM_START \ + CFG_PKCS11_TA=n \ + CFG_SHMEM_START=$SHMEM_START \ + CFG_SHMEM_SIZE=$SHMEM_SIZE \ + DEBUG=1 \ + CFG_TEE_CORE_LOG_LEVEL=2 \ + CFG_TEE_TA_LOG_LEVEL=2 \ + CFLAGS="-Og -DTARGET_RISCV" \ + -j16 + +export O="$OPTEE_DIR/optee2-riscv" +TDDRAM_START="0xb2000000" +SHMEM_START="0x99100000" + +rm -rf $O + +make \ + ARCH=riscv \ + PLATFORM=virt \ + CROSS_COMPILE64=riscv64-linux-gnu- \ + CROSS_COMPILE32=riscv32-linux-gnu- \ + CFG_TDDRAM_SIZE=$TDDRAM_SIZE \ + CFG_TDDRAM_START=$TDDRAM_START \ + CFG_PKCS11_TA=n \ + CFG_SHMEM_START=$SHMEM_START \ + CFG_SHMEM_SIZE=$SHMEM_SIZE \ + DEBUG=1 \ + CFG_TEE_CORE_LOG_LEVEL=2 \ + CFG_TEE_TA_LOG_LEVEL=2 \ + CFLAGS="-Og -DOPTEE2 -DTARGET_RISCV" \ + -j16 + +cd .. +} + +step_2() { +mkdir -p buildroot/build-riscv64 + +cp support/br-riscv64.config buildroot/build-riscv64/.config + +cd buildroot + +make O=build-riscv64/ -j$(nproc) || echo "The above error is expected at this stage!" + +cd .. +} + +step_3() { +cd optee_client + +git checkout master +make CROSS_COMPILE=riscv64-linux-gnu- WITH_TEEACL=0 O=out-riscv64 +git checkout optee2 +make CROSS_COMPILE=riscv64-linux-gnu- WITH_TEEACL=0 O=out2-riscv64 CFG_TEE_FS_PARENT_PATH=/data/tee2 + +cd .. +} + +step_4() { +cd optee_test + +BUILDROOT=`pwd`/../buildroot/build-riscv64/ +export CROSS_COMPILE=$BUILDROOT/host/bin/riscv64-linux- +export HOST_CROSS_COMPILE=$BUILDROOT/host/bin/riscv64-linux- +export TA_CROSS_COMPILE=$BUILDROOT/host/bin/riscv64-linux- +export ARCH=riscv +export PLATFORM=plat-virt +export TA_DEV_KIT_DIR=`pwd`/../optee_os/optee-riscv/export-ta_rv64 +export TEEC_EXPORT=`pwd`/../optee_client/out-riscv64/export/usr/ +export OPTEE_CLIENT_EXPORT=`pwd`/../optee_client/out-riscv64/export/usr/ +export CFG_TA_OPTEE_CORE_API_COMPAT_1_1=y +export DESTDIR=./to_buildroot-riscv +export DEBUG=0 +export CFG_TEE_TA_LOG_LEVEL=0 +export O=`pwd`/out-riscv +export RISCV_TARGET=y + + +rm -rf out-riscv/ +## make sure we have things setup for first OP-TEE +find . -name "Makefile" -exec sed -i "s/\-lteec2$/\-lteec/g" {} + +find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + +make clean +make -j`nproc` +make install + + +## setup second OP-TEE +export O=`pwd`/out2-riscv64 +export DESTDIR=./to_buildroot-riscv-2 +export TA_DEV_KIT_DIR=`pwd`/../optee_os/optee2-riscv/export-ta_rv64 +export TEEC_EXPORT=`pwd`/../optee_client/out2-riscv64/export/usr/ +export OPTEE_CLIENT_EXPORT=`pwd`/../optee_client/out2-riscv64/export/usr/ +rm -rf `pwd`/out2-riscv64 +find . -name "Makefile" -exec sed -i "s/\-lteec$/\-lteec2/g" {} + +find . -name "Makefile" -exec sed -i "s/optee_armtz/optee2_armtz/g" {} + +make clean +make -j`nproc` +make install +## undo changes +find . -name "Makefile" -exec sed -i "s/\-lteec2$/\-lteec/g" {} + +find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + + +mv $DESTDIR/bin/xtest $DESTDIR/bin/xtest2 +cd .. +} + +step_5() { +cd bitcoin-wallet + +BUILDROOT=`pwd`/../buildroot/build-riscv64/ + +export CROSS_COMPILE=$BUILDROOT/host/bin/riscv64-linux- +export HOST_CROSS_COMPILE=$BUILDROOT/host/bin/riscv64-linux- +export TA_CROSS_COMPILE=$BUILDROOT/host/bin/riscv64-linux- +export ARCH=riscv +export PLATFORM=plat-virt +export TA_DEV_KIT_DIR=`pwd`/../optee_os/optee-riscv/export-ta_rv64 +export TEEC_EXPORT=`pwd`/../optee_client/out-riscv64/export/usr/ +export OPTEE_CLIENT_EXPORT=`pwd`/../optee_client/out-riscv64/export/usr/ +export CFG_TA_OPTEE_CORE_API_COMPAT_1_1=n +export DESTDIR=./to_buildroot-riscv +export DEBUG=0 +export CFG_TEE_TA_LOG_LEVEL=0 +export O=`pwd`/out-riscv +export RISCV_TARGET=y + + +rm -rf out-riscv/ +## make sure we have things setup for first OP-TEE +find . -name "Makefile" -exec sed -i "s/\-lteec2$/\-lteec/g" {} + +find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + +make clean +make -j`nproc` + +mkdir -p to_buildroot-riscv64/lib/optee_armtz +mkdir -p to_buildroot-riscv64/bin + +cp out-riscv/*.ta to_buildroot-riscv64/lib/optee_armtz +cp host/wallet to_buildroot-riscv64/bin/bitcoin_wallet_ca +chmod +x to_buildroot-riscv64/bin/bitcoin_wallet_ca + + +## setup second OP-TEE +export O=`pwd`/out2-riscv64 +export DESTDIR=./to_buildroot-riscv-2 +export TA_DEV_KIT_DIR=`pwd`/../optee_os/optee2-riscv/export-ta_rv64 +export TEEC_EXPORT=`pwd`/../optee_client/out2-riscv64/export/usr/ +export OPTEE_CLIENT_EXPORT=`pwd`/../optee_client/out2-riscv64/export/usr/ +rm -rf `pwd`/out2-riscv64 +find . -name "Makefile" -exec sed -i "s/\-lteec/\-lteec2/g" {} + +find . -name "Makefile" -exec sed -i "s/optee_armtz/optee2_armtz/g" {} + +make clean +make -j`nproc` +## undo changes +find . -name "Makefile" -exec sed -i "s/\-lteec2/\-lteec/g" {} + +find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + + +mkdir -p to_buildroot-riscv64-2/lib/optee2_armtz +mkdir -p to_buildroot-riscv64-2/bin + +cp out-riscv/*.ta to_buildroot-riscv64-2/lib/optee2_armtz +cp host/wallet to_buildroot-riscv64-2/bin/bitcoin_wallet_ca2 +chmod +x to_buildroot-riscv64-2/bin/bitcoin_wallet_ca2 + +cd .. +} + +step_6() { +cd malicous_ta + +BUILDROOT=`pwd`/../buildroot/build-riscv64/ + +export CROSS_COMPILE=$BUILDROOT/host/bin/riscv64-linux- +export HOST_CROSS_COMPILE=$BUILDROOT/host/bin/riscv64-linux- +export TA_CROSS_COMPILE=$BUILDROOT/host/bin/riscv64-linux- +export ARCH=riscv +export PLATFORM=plat-virt +export TA_DEV_KIT_DIR=`pwd`/../optee_os/optee-riscv/export-ta_rv64 +export TEEC_EXPORT=`pwd`/../optee_client/out-riscv64/export/usr/ +export OPTEE_CLIENT_EXPORT=`pwd`/../optee_client/out-riscv64/export/usr/ +export CFG_TA_OPTEE_CORE_API_COMPAT_1_1=n +export DESTDIR=./to_buildroot-riscv64 +export DEBUG=0 +export CFG_TEE_TA_LOG_LEVEL=2 +export O=`pwd`/out-riscv64 +export RISCV_TARGET=y + + +rm -rf out-riscv64/ +## make sure we have things setup for first OP-TEE +find . -name "Makefile" -exec sed -i "s/\-lteec2$/\-lteec/g" {} + +find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + +make clean +make -j`nproc` + +mkdir -p to_buildroot-riscv64/lib/optee_armtz +mkdir -p to_buildroot-riscv64/bin + +cp out-riscv64/*.ta to_buildroot-riscv64/lib/optee_armtz +cp host/malicious_ca to_buildroot-riscv64/bin/malicious_ca +chmod +x to_buildroot-riscv64/bin/malicious_ca + + +## setup for second OP-TEE +export O=`pwd`/out2-riscv64 +export DESTDIR=./to_buildroot-riscv-2 +export TA_DEV_KIT_DIR=`pwd`/../optee_os/optee2-riscv/export-ta_rv64 +export TEEC_EXPORT=`pwd`/../optee_client/out2-riscv64/export/usr/ +export OPTEE_CLIENT_EXPORT=`pwd`/../optee_client/out2-riscv64/export/usr/ +rm -rf `pwd`/out2-riscv64 +find . -name "Makefile" -exec sed -i "s/\-lteec/\-lteec2/g" {} + +find . -name "Makefile" -exec sed -i "s/optee_armtz/optee2_armtz/g" {} + +make clean +make -j`nproc` +## undo changes +find . -name "Makefile" -exec sed -i "s/\-lteec2/\-lteec/g" {} + +find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + + +mkdir -p to_buildroot-riscv64-2/lib/optee2_armtz +mkdir -p to_buildroot-riscv64-2/bin + +cp out2-riscv64/*.ta to_buildroot-riscv64-2/lib/optee2_armtz +cp host/malicious_ca to_buildroot-riscv64-2/bin/malicious_ca2 +chmod +x to_buildroot-riscv64-2/bin/malicious_ca2 + +cd .. +} + +step_7() { +cd buildroot + +make O=build-riscv64/ -j`nproc` + +cd .. +} + +step_8() { +mkdir -p linux/build-riscv64/ +cp support/linux-riscv64.config linux/build-riscv64/.config + +cd linux + +make ARCH=riscv O=build-riscv64 CROSS_COMPILE=`realpath ../buildroot/build-riscv64/host/bin/riscv64-linux-` -j16 Image + +cd .. + +dtc -I dts -O dtb riscv64-ws/riscv64-dt1.dts > riscv64-ws/riscv64-dt1.dtb +dtc -I dts -O dtb riscv64-ws/riscv64-dt2.dts > riscv64-ws/riscv64-dt2.dtb + +cd lloader + +rm linux*-riscv64.bin || echo "Proceeding..." +rm linux*-riscv64.elf || echo "Proceeding..." +make \ + IMAGE=../linux/build-riscv64/arch/riscv/boot/Image \ + DTB=../riscv64-ws/riscv64-dt1.dtb \ + TARGET=linux-riscv64.bin \ + CROSS_COMPILE=riscv64-unknown-elf- \ + ARCH=riscv + +make \ + IMAGE=../linux/build-riscv64/arch/riscv/boot/Image \ + DTB=../riscv64-ws/riscv64-dt2.dtb \ + TARGET=linux2-riscv64.bin \ + CROSS_COMPILE=riscv64-unknown-elf- \ + ARCH=riscv + +cd .. +} + +usage() { + cat <= start && num <= end )); then + "$fn" + fi + done +fi diff --git a/buildroot b/buildroot new file mode 160000 index 0000000..d48a8be --- /dev/null +++ b/buildroot @@ -0,0 +1 @@ +Subproject commit d48a8beb39275a479185ab9b3232cd15dcfb87ab diff --git a/cba_ta b/cba_ta new file mode 160000 index 0000000..082978f --- /dev/null +++ b/cba_ta @@ -0,0 +1 @@ +Subproject commit 082978fd1656cf89063c2cb3dd06d0231ae48eac diff --git a/malicous_ta/host/malicious_ca b/malicous_ta/host/malicious_ca index 4a79838..f936c8f 100755 Binary files a/malicous_ta/host/malicious_ca and b/malicous_ta/host/malicious_ca differ diff --git a/memory-separation/Makefile b/memory-separation/Makefile new file mode 100644 index 0000000..3313423 --- /dev/null +++ b/memory-separation/Makefile @@ -0,0 +1,23 @@ +CC = $(CROSS_COMPILE)gcc +LD = $(CROSS_COMPILE)ld +OBJCOPY = $(CROSS_COMPILE)objcopy +CFILES = $(wildcard *.c) +OFILES = $(CFILES:.c=.o) +GCCFLAGS = -Wall -Werror -O2 -ffreestanding -nostdlib -nostartfiles -mstrict-align +CONFIG_TEXT_BASE ?= 0x20200000 + +all: clean kernel8.img + +boot.o: boot.S + $(CC) $(GCCFLAGS) -c boot.S -o boot.o + +%.o: %.c + $(CC) $(GCCFLAGS) -c $< -o $@ + +kernel8.img: boot.o $(OFILES) + $(CC) -E -P -x c -DCONFIG_TEXT_BASE=$(CONFIG_TEXT_BASE) link.ld.in >link.ld + $(LD) -nostdlib boot.o $(OFILES) -T link.ld -o kernel8.elf + $(OBJCOPY) -O binary kernel8.elf kernel8.img + +clean: + rm kernel8.elf *.o *.img link.ld >/dev/null 2>&1 || true diff --git a/memory-separation/README.md b/memory-separation/README.md new file mode 100644 index 0000000..bb72c77 --- /dev/null +++ b/memory-separation/README.md @@ -0,0 +1,6 @@ +# Memory separation + +Bare metal application for testing memory separation. Minimal running bare metal +example with UART communication was taken from + and +expanded. diff --git a/memory-separation/boot.S b/memory-separation/boot.S new file mode 100644 index 0000000..e09b7d4 --- /dev/null +++ b/memory-separation/boot.S @@ -0,0 +1,30 @@ +.section ".text.boot" // Make sure the linker puts this at the start of the kernel image + +.global _start // Execution starts here + +_start: + // Check processor ID is zero (executing on main core), else hang + mrs x1, mpidr_el1 + and x1, x1, #3 + cbz x1, 2f + // We're not on the main core, so hang in an infinite wait loop +1: wfe + b 1b +2: // We're on the main core! + + // Set stack to start below our code + ldr x1, =_start + mov sp, x1 + + // Clean the BSS section + ldr x1, =__bss_start // Start address + ldr w2, =__bss_size // Size of the section +3: cbz w2, 4f // Quit loop if zero + str xzr, [x1], #8 + sub w2, w2, #1 + cbnz w2, 3b // Loop if non-zero + + // Jump to our main() routine in C (make sure it doesn't return) +4: bl main + // In case it does return, halt the master core too + b 1b diff --git a/memory-separation/io.c b/memory-separation/io.c new file mode 100644 index 0000000..ec54421 --- /dev/null +++ b/memory-separation/io.c @@ -0,0 +1,185 @@ +// GPIO + +#include "io.h" + +enum { + PERIPHERAL_BASE = 0xFE000000, + GPFSEL0 = PERIPHERAL_BASE + 0x200000, + GPSET0 = PERIPHERAL_BASE + 0x20001C, + GPCLR0 = PERIPHERAL_BASE + 0x200028, + GPPUPPDN0 = PERIPHERAL_BASE + 0x2000E4 +}; + +enum { + GPIO_MAX_PIN = 53, + GPIO_FUNCTION_OUT = 1, + GPIO_FUNCTION_ALT5 = 2, + GPIO_FUNCTION_ALT3 = 7 +}; + +enum { + Pull_None = 0, + Pull_Down = 2, + Pull_Up = 1 +}; + +void mmio_write(long reg, unsigned int val) { *(volatile unsigned int *)reg = val; } +unsigned int mmio_read(long reg) { return *(volatile unsigned int *)reg; } + +unsigned int gpio_call(unsigned int pin_number, unsigned int value, unsigned int base, unsigned int field_size, unsigned int field_max) { + unsigned int field_mask = (1 << field_size) - 1; + + if (pin_number > field_max) return 0; + if (value > field_mask) return 0; + + unsigned int num_fields = 32 / field_size; + unsigned int reg = base + ((pin_number / num_fields) * 4); + unsigned int shift = (pin_number % num_fields) * field_size; + + unsigned int curval = mmio_read(reg); + curval &= ~(field_mask << shift); + curval |= value << shift; + mmio_write(reg, curval); + + return 1; +} + +unsigned int gpio_set (unsigned int pin_number, unsigned int value) { return gpio_call(pin_number, value, GPSET0, 1, GPIO_MAX_PIN); } +unsigned int gpio_clear (unsigned int pin_number, unsigned int value) { return gpio_call(pin_number, value, GPCLR0, 1, GPIO_MAX_PIN); } +unsigned int gpio_pull (unsigned int pin_number, unsigned int value) { return gpio_call(pin_number, value, GPPUPPDN0, 2, GPIO_MAX_PIN); } +unsigned int gpio_function(unsigned int pin_number, unsigned int value) { return gpio_call(pin_number, value, GPFSEL0, 3, GPIO_MAX_PIN); } + +void gpio_useAsAlt3(unsigned int pin_number) { + gpio_pull(pin_number, Pull_None); + gpio_function(pin_number, GPIO_FUNCTION_ALT3); +} + +void gpio_useAsAlt5(unsigned int pin_number) { + gpio_pull(pin_number, Pull_None); + gpio_function(pin_number, GPIO_FUNCTION_ALT5); +} + +void gpio_initOutputPinWithPullNone(unsigned int pin_number) { + gpio_pull(pin_number, Pull_None); + gpio_function(pin_number, GPIO_FUNCTION_OUT); +} + +void gpio_setPinOutputBool(unsigned int pin_number, unsigned int onOrOff) { + if (onOrOff) { + gpio_set(pin_number, 1); + } else { + gpio_clear(pin_number, 1); + } +} + +// UART + +enum { + AUX_BASE = PERIPHERAL_BASE + 0x215000, + AUX_IRQ = AUX_BASE, + AUX_ENABLES = AUX_BASE + 4, + AUX_MU_IO_REG = AUX_BASE + 64, + AUX_MU_IER_REG = AUX_BASE + 68, + AUX_MU_IIR_REG = AUX_BASE + 72, + AUX_MU_LCR_REG = AUX_BASE + 76, + AUX_MU_MCR_REG = AUX_BASE + 80, + AUX_MU_LSR_REG = AUX_BASE + 84, + AUX_MU_MSR_REG = AUX_BASE + 88, + AUX_MU_SCRATCH = AUX_BASE + 92, + AUX_MU_CNTL_REG = AUX_BASE + 96, + AUX_MU_STAT_REG = AUX_BASE + 100, + AUX_MU_BAUD_REG = AUX_BASE + 104, + AUX_UART_CLOCK = 500000000, + UART_MAX_QUEUE = 16 * 1024 +}; + +#define AUX_MU_BAUD(baud) ((AUX_UART_CLOCK/(baud*8))-1) + +unsigned char uart_output_queue[UART_MAX_QUEUE]; +unsigned int uart_output_queue_write = 0; +unsigned int uart_output_queue_read = 0; + +void uart_init() { + mmio_write(AUX_ENABLES, 1); //enable UART1 + mmio_write(AUX_MU_IER_REG, 0); + mmio_write(AUX_MU_CNTL_REG, 0); + mmio_write(AUX_MU_LCR_REG, 3); //8 bits + mmio_write(AUX_MU_MCR_REG, 0); + mmio_write(AUX_MU_IER_REG, 0); + mmio_write(AUX_MU_IIR_REG, 0xC6); //disable interrupts + mmio_write(AUX_MU_BAUD_REG, AUX_MU_BAUD(115200)); + gpio_useAsAlt5(14); + gpio_useAsAlt5(15); + mmio_write(AUX_MU_CNTL_REG, 3); //enable RX/TX +} + +unsigned int uart_isOutputQueueEmpty() { + return uart_output_queue_read == uart_output_queue_write; +} + +unsigned int uart_isReadByteReady() { return mmio_read(AUX_MU_LSR_REG) & 0x01; } +unsigned int uart_isWriteByteReady() { return mmio_read(AUX_MU_LSR_REG) & 0x20; } + +unsigned char uart_readByte() { + while (!uart_isReadByteReady()); + return (unsigned char)mmio_read(AUX_MU_IO_REG); +} + +void uart_writeByteBlockingActual(unsigned char ch) { + while (!uart_isWriteByteReady()); + mmio_write(AUX_MU_IO_REG, (unsigned int)ch); +} + +void uart_loadOutputFifo() { + while (!uart_isOutputQueueEmpty() && uart_isWriteByteReady()) { + uart_writeByteBlockingActual(uart_output_queue[uart_output_queue_read]); + uart_output_queue_read = (uart_output_queue_read + 1) & (UART_MAX_QUEUE - 1); // Don't overrun + } +} + +void uart_writeByteBlocking(unsigned char ch) { + unsigned int next = (uart_output_queue_write + 1) & (UART_MAX_QUEUE - 1); // Don't overrun + + while (next == uart_output_queue_read) uart_loadOutputFifo(); + + uart_output_queue[uart_output_queue_write] = ch; + uart_output_queue_write = next; +} + +void uart_drainOutputQueue() { + while (!uart_isOutputQueueEmpty()) uart_loadOutputFifo(); +} + +void uart_writeText(const char *buffer) { + while (*buffer) { + if (*buffer == '\n') uart_writeByteBlocking('\r'); + uart_writeByteBlocking(*buffer++); + } + uart_drainOutputQueue(); +} + +void uart_update() { + uart_loadOutputFifo(); + + if (uart_isReadByteReady()) { + unsigned char ch = uart_readByte(); + if (ch == '\r') uart_writeText("\n"); else uart_writeByteBlocking(ch); + } +} + +int uart_readLine(char *buf, size_t bufsize) { + size_t count = 0; + do { + uart_loadOutputFifo(); + buf[count] = uart_readByte(); + if (buf[count] == '\r') + uart_writeText("\n"); + else + uart_writeByteBlocking(buf[count]); + ++count; + } while (buf[count - 1] != '\r' && count != (bufsize - 1)); + if (buf[count - 1] == '\r') + buf[count - 1] = '\0'; + buf[count] = '\0'; + return count; +} diff --git a/memory-separation/io.h b/memory-separation/io.h new file mode 100644 index 0000000..0bbb9b3 --- /dev/null +++ b/memory-separation/io.h @@ -0,0 +1,18 @@ +#ifndef IO_H +#define IO_H + +#include + +void uart_init(); +void uart_writeText(const char *buffer); +void uart_loadOutputFifo(); +unsigned char uart_readByte(); +unsigned int uart_isReadByteReady(); +void uart_writeByteBlocking(unsigned char ch); +void uart_update(); +/** Read until newline or (bufsize - 1). Returns number of read characters. + * Puts '\0' after last read character + **/ +int uart_readLine(char *buf, size_t bufsize); + +#endif diff --git a/memory-separation/kernel.c b/memory-separation/kernel.c new file mode 100644 index 0000000..7a4f05b --- /dev/null +++ b/memory-separation/kernel.c @@ -0,0 +1,122 @@ +#include "io.h" +#include +#include +#include + +static char buf[256] = "Hello world!\n"; +static int ERR = 0; + +/** + * Base can be 10 or 16. If it's 16 then str can start with 0x + * strtoul returns 0 if it detects error and sets ERR to non-zero value. + **/ +unsigned long int strtoul(const char* str, char** _, int base); + +/** Convert unsigned long int to string. Returns buf */ +char* ultostr(unsigned long int num, int base, char* buf, int bufsize); +char* u8tostr(uint8_t num, int base, char* buf, int bufsize); +void print_strings(int n, ...); + +void main() +{ + uart_init(); + uintptr_t ptr = (uintptr_t)main; + print_strings(3, "void main() addr: 0x", ultostr(ptr, 16, buf, sizeof(buf)), "\n"); + + while (1) { + print_strings(1, "\nAccess (hex): "); + uart_readLine(buf, sizeof(buf)); + + ptr = (uintptr_t)strtoul(buf, NULL, 16); + if (ptr == 0 && ERR != 0) { + print_strings(1, "Couldn't convert string to number!\n"); + } + else { + ultostr((unsigned long int)ptr, 16, buf, sizeof(buf)); + print_strings(3, "Trying to access: 0x", buf, "\n"); + + u8tostr(*(uint8_t*)ptr, 16, buf, sizeof(buf)); + print_strings(3, "Value: 0x", buf, "\n"); + } + } +} + +unsigned long int strtoul(const char* str, char** _, int base) { + if (!(*str)) { + ERR = 1; + return 0; + } + unsigned long int val = 0; + ERR = 0; + if (base == 16 && *str == '0' && *(str + 1) == 'x') + str += 2; + + char digit; + while((digit = *str++)) { + if (digit < '0') { + ERR = 1; + return 0; + } + if (base == 16 && digit >= 'a') + digit -= 'a' - 10; + else if (base == 16 && digit >= 'A') + digit -= 'A' - 10; + else + digit -= '0'; + if (digit > 15) { + ERR = 1; + return 0; + } + val = val*base + digit; + } + return val; +} + +char* ultostr(unsigned long int num, int base, char* buf, int bufsize) { + if (num == 0) { + if (bufsize > 1) { + *buf = '0'; + *(buf + 1) = '\0'; + } + else if (bufsize == 1) { + *buf = '\0'; + } + return buf; + } + char* iter = buf; + char* end = (buf + bufsize - 1); + while (iter < end && num != 0) { + *iter = (num % base); + if (*iter >= 10) + *iter += 'a' - 10; + else + *iter += '0'; + num /= base; + ++iter; + } + *iter = '\0'; + end = iter - 1; + + // reverse string + iter = buf; + while (iter < end) { + char tmp = *iter; + *iter = *end; + *end = tmp; + ++iter; --end; + } + return buf; +} + +char* u8tostr(uint8_t num, int base, char* buf, int bufsize) { + return ultostr(num, base, buf, bufsize); +} + +// Variadic function to print given arguments +void print_strings(int n, ...) { + va_list args; + va_start(args, n); + for (int i = 0; i < n; i++) + uart_writeText(va_arg(args, char*)); + va_end(args); +} diff --git a/memory-separation/link.ld.in b/memory-separation/link.ld.in new file mode 100644 index 0000000..d16b48a --- /dev/null +++ b/memory-separation/link.ld.in @@ -0,0 +1,19 @@ +SECTIONS +{ + . = CONFIG_TEXT_BASE; /* Kernel load address for AArch64 */ + .text : { KEEP(*(.text.boot)) *(.text .text.* .gnu.linkonce.t*) } + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r*) } + PROVIDE(_data = .); + .data : { *(.data .data.* .gnu.linkonce.d*) } + .bss (NOLOAD) : { + . = ALIGN(16); + __bss_start = .; + *(.bss .bss.*) + *(COMMON) + __bss_end = .; + } + _end = .; + + /DISCARD/ : { *(.comment) *(.gnu*) *(.note*) *(.eh_frame*) } +} +__bss_size = (__bss_end - __bss_start)>>3; diff --git a/nexmon/nexmon-image b/nexmon/nexmon-image new file mode 100644 index 0000000..6335dfd Binary files /dev/null and b/nexmon/nexmon-image differ diff --git a/nexmon/nexmon.bin b/nexmon/nexmon.bin new file mode 100755 index 0000000..3b29bf3 Binary files /dev/null and b/nexmon/nexmon.bin differ diff --git a/nexmon/nexmon.dts b/nexmon/nexmon.dts new file mode 100644 index 0000000..e841702 --- /dev/null +++ b/nexmon/nexmon.dts @@ -0,0 +1,358 @@ +/dts-v1/; + +/memreserve/ 0x0000000000000000 0x0000000000001000; +/ { + compatible = "raspberrypi,4-model-b\0brcm,bcm2711"; + model = "Raspberry Pi 4 Model B"; + #address-cells = <0x02>; + #size-cells = <0x01>; + interrupt-parent = <0x01>; + + aliases { + emmc2bus = "/emmc2bus"; + }; + + chosen { + bootargs = "earlycon clk_ignore_unused ip=192.168.42.15 carrier_timeout=0"; + }; + + reserved-memory { + #address-cells = <0x02>; + #size-cells = <0x01>; + ranges; + + linux,cma { + compatible = "shared-dma-pool"; + size = <0x10000000>; + reusable; + linux,cma-default; + alloc-ranges = <0x00 0x00 0x40000000>; + }; + }; + + thermal-zones { + + cpu-thermal { + polling-delay-passive = <0x00>; + polling-delay = <0x3e8>; + coefficients = <0xfffffe19 0x641b8>; + thermal-sensors = <0x02>; + + trips { + + cpu-crit { + temperature = <0x15f90>; + hysteresis = <0x00>; + type = "critical"; + }; + }; + + cooling-maps { + }; + }; + }; + + soc { + compatible = "simple-bus"; + #address-cells = <0x01>; + #size-cells = <0x01>; + ranges = <0x7e000000 0x00 0xfe000000 0x1800000 0x7c000000 0x00 0xfc000000 0x2000000 0x40000000 0x00 0xff800000 0x800000>; + dma-ranges = <0xc0000000 0x00 0x00 0x40000000>; + + cprman@7e101000 { + compatible = "brcm,bcm2711-cprman"; + #clock-cells = <0x01>; + reg = <0x7e101000 0x2000>; + clocks = <0x03 0x04 0x00 0x04 0x01 0x04 0x02 0x05 0x00 0x05 0x01 0x05 0x02>; + phandle = <0x06>; + }; + + mailbox@7e00b880 { + compatible = "brcm,bcm2835-mbox"; + reg = <0x7e00b880 0x40>; + interrupts = <0x00 0x21 0x04>; + #mbox-cells = <0x00>; + phandle = <0x1c>; + }; + + gpio@7e200000 { + compatible = "brcm,bcm2711-gpio"; + reg = <0x7e200000 0xb4>; + gpio-controller; + #gpio-cells = <0x02>; + interrupt-controller; + #interrupt-cells = <0x02>; + pinctrl-names = "default"; + gpio-line-names = "ID_SDA\0ID_SCL\0SDA1\0SCL1\0GPIO_GCLK\0GPIO5\0GPIO6\0SPI_CE1_N\0SPI_CE0_N\0SPI_MISO\0SPI_MOSI\0SPI_SCLK\0GPIO12\0GPIO13\0TXD1\0RXD1\0GPIO16\0GPIO17\0GPIO18\0GPIO19\0GPIO20\0GPIO21\0GPIO22\0GPIO23\0GPIO24\0GPIO25\0GPIO26\0GPIO27\0RGMII_MDIO\0RGMIO_MDC\0CTS0\0RTS0\0TXD0\0RXD0\0SD1_CLK\0SD1_CMD\0SD1_DATA0\0SD1_DATA1\0SD1_DATA2\0SD1_DATA3\0PWM0_MISO\0PWM1_MOSI\0STATUS_LED_G_CLK\0SPIFLASH_CE_N\0SDA0\0SCL0\0RGMII_RXCLK\0RGMII_RXCTL\0RGMII_RXD0\0RGMII_RXD1\0RGMII_RXD2\0RGMII_RXD3\0RGMII_TXCLK\0RGMII_TXCTL\0RGMII_TXD0\0RGMII_TXD1\0RGMII_TXD2\0RGMII_TXD3"; + phandle = <0x24>; + + emmc_gpio22 { + brcm,pins = <0x16 0x17 0x18 0x19 0x1a 0x1b>; + brcm,function = <0x07>; + }; + + emmc_gpio34 { + brcm,pins = <0x22 0x23 0x24 0x25 0x26 0x27>; + brcm,function = <0x07>; + brcm,pull = <0x00 0x02 0x02 0x02 0x02 0x02>; + phandle = <0x0e>; + }; + + emmc_gpio48 { + brcm,pins = <0x30 0x31 0x32 0x33 0x34 0x35>; + brcm,function = <0x07>; + }; + + + }; + + aux@7e215000 { + compatible = "brcm,bcm2835-aux"; + #clock-cells = <0x01>; + reg = <0x7e215000 0x08>; + clocks = <0x06 0x14>; + phandle = <0x0c>; + }; + + + + sdhci@7e300000 { + compatible = "brcm,bcm2835-sdhci"; + reg = <0x7e300000 0x100>; + interrupts = <0x00 0x7e 0x04>; + clocks = <0x06 0x1c>; + status = "okay"; + #address-cells = <0x01>; + #size-cells = <0x00>; + pinctrl-names = "default"; + pinctrl-0 = <0x0e>; + bus-width = <0x04>; + non-removable; + mmc-pwrseq = <0x0f>; + + wifi@1 { + reg = <0x01>; + compatible = "brcm,bcm4329-fmac"; + }; + }; + local_intc@40000000 { + compatible = "brcm,bcm2836-l1-intc"; + reg = <0x40000000 0x100>; + }; + + interrupt-controller@40041000 { + interrupt-controller; + #interrupt-cells = <0x03>; + compatible = "arm,gic-400"; + reg = <0x40041000 0x1000 0x40042000 0x2000 0x40044000 0x2000 0x40046000 0x2000>; + interrupts = <0x01 0x09 0xf04>; + phandle = <0x01>; + }; + + avs-monitor@7d5d2000 { + compatible = "brcm,bcm2711-avs-monitor\0syscon\0simple-mfd"; + reg = <0x7d5d2000 0xf00>; + + thermal { + compatible = "brcm,bcm2711-thermal"; + #thermal-sensor-cells = <0x00>; + phandle = <0x02>; + }; + }; + + watchdog@7e100000 { + compatible = "brcm,bcm2835-pm\0brcm,bcm2835-pm-wdt"; + #power-domain-cells = <0x01>; + #reset-cells = <0x01>; + reg = <0x7e100000 0x114 0x7e00a000 0x24 0x7ec11000 0x20>; + clocks = <0x06 0x15 0x06 0x1d 0x06 0x17 0x06 0x16>; + clock-names = "v3d\0peri_image\0h264\0isp"; + system-power-controller; + }; + + rng@7e104000 { + compatible = "brcm,bcm2711-rng200"; + reg = <0x7e104000 0x28>; + }; + + + clock@7ef00000 { + compatible = "brcm,brcm2711-dvp"; + reg = <0x7ef00000 0x10>; + clocks = <0x16>; + #clock-cells = <0x01>; + #reset-cells = <0x01>; + phandle = <0x17>; + }; + + + firmware { + compatible = "raspberrypi,bcm2835-firmware\0simple-mfd"; + #address-cells = <0x01>; + #size-cells = <0x01>; + mboxes = <0x1c>; + dma-ranges; + phandle = <0x1d>; + + clocks { + compatible = "raspberrypi,firmware-clocks"; + #clock-cells = <0x01>; + phandle = <0x10>; + }; + + gpio { + compatible = "raspberrypi,firmware-gpio"; + gpio-controller; + #gpio-cells = <0x02>; + gpio-line-names = "BT_ON\0WL_ON\0PWR_LED_OFF\0GLOBAL_RESET\0VDD_SD_IO_SEL\0CAM_GPIO\0SD_PWR_ON\0"; + status = "okay"; + phandle = <0x09>; + }; + + reset { + compatible = "raspberrypi,firmware-reset"; + #reset-cells = <0x01>; + phandle = <0x22>; + }; + }; + + power { + compatible = "raspberrypi,bcm2835-power"; + firmware = <0x1d>; + #power-domain-cells = <0x01>; + phandle = <0x0b>; + }; + + + }; + + clocks { + + clk-osc { + compatible = "fixed-clock"; + #clock-cells = <0x00>; + clock-output-names = "osc"; + clock-frequency = <0x337f980>; + phandle = <0x03>; + }; + }; + + + clk-27M { + #clock-cells = <0x00>; + compatible = "fixed-clock"; + clock-frequency = <0x19bfcc0>; + clock-output-names = "27MHz-clock"; + phandle = <0x1a>; + }; + + clk-108M { + #clock-cells = <0x00>; + compatible = "fixed-clock"; + clock-frequency = <0x66ff300>; + clock-output-names = "108MHz-clock"; + phandle = <0x16>; + }; + + emmc2bus { + compatible = "simple-bus"; + #address-cells = <0x02>; + #size-cells = <0x01>; + ranges = <0x00 0x7e000000 0x00 0xfe000000 0x1800000>; + dma-ranges = <0x0 0x0 0x0 0x0 0xfc000000>; + + emmc2@7e340000 { + compatible = "brcm,bcm2711-emmc2"; + reg = <0x00 0x7e340000 0x100>; + interrupts = <0x00 0x7e 0x04>; + clocks = <0x06 0x33>; + status = "okay"; + vqmmc-supply = <0x1e>; + vmmc-supply = <0x1f>; + broken-cd; + }; + }; + + arm-pmu { + compatible = "arm,cortex-a72-pmu\0arm,armv8-pmuv3"; + interrupts = <0x00 0x10 0x04>; + interrupt-affinity = <0x20>; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <0x01 0x0d 0xf08 0x01 0x0e 0xf08 0x01 0x0b 0xf08 0x01 0x0a 0xf08>; + arm,cpu-registers-not-fw-configured; + }; + + cpus { + #address-cells = <0x01>; + #size-cells = <0x00>; + enable-method = "brcm,bcm2836-smp"; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a72"; + reg = <0x00>; + enable-method = "spin-table"; + cpu-release-addr = <0x00 0xd8>; + phandle = <0x20>; + }; + }; + + + + leds { + compatible = "gpio-leds"; + + act { + label = "ACT"; + default-state = "keep"; + linux,default-trigger = "heartbeat"; + gpios = <0x24 0x2a 0x00>; + }; + + pwr { + label = "PWR"; + gpios = <0x09 0x02 0x01>; + default-state = "keep"; + linux,default-trigger = "default-on"; + }; + }; + + memory@20000000 { + reg = <0x00 0x20000000 0x40000000>; + device_type = "memory"; + }; + + wifi-pwrseq { + compatible = "mmc-pwrseq-simple"; + reset-gpios = <0x09 0x01 0x01>; + phandle = <0x0f>; + }; + + sd_io_1v8_reg { + compatible = "regulator-gpio"; + regulator-name = "vdd-sd-io"; + regulator-min-microvolt = <0x1b7740>; + regulator-max-microvolt = <0x325aa0>; + regulator-boot-on; + regulator-always-on; + regulator-settling-time-us = <0x1388>; + gpios = <0x09 0x04 0x00>; + states = <0x1b7740 0x01 0x325aa0 0x00>; + status = "okay"; + phandle = <0x1e>; + }; + + sd_vcc_reg { + compatible = "regulator-fixed"; + regulator-name = "vcc-sd"; + regulator-min-microvolt = <0x325aa0>; + regulator-max-microvolt = <0x325aa0>; + regulator-boot-on; + enable-active-high; + gpio = <0x09 0x06 0x00>; + phandle = <0x1f>; + }; +}; diff --git a/optee_os_cba b/optee_os_cba new file mode 160000 index 0000000..16b42c6 --- /dev/null +++ b/optee_os_cba @@ -0,0 +1 @@ +Subproject commit 16b42c6bcea809620e08efd62fbaf28552b96eb8 diff --git a/rpi4-ws/.gitignore b/rpi4-ws/.gitignore new file mode 100644 index 0000000..751b1d0 --- /dev/null +++ b/rpi4-ws/.gitignore @@ -0,0 +1 @@ +build.log diff --git a/rpi4-ws/Dockerfile b/rpi4-ws/Dockerfile new file mode 100644 index 0000000..6cdaa74 --- /dev/null +++ b/rpi4-ws/Dockerfile @@ -0,0 +1,165 @@ +# Use Debian base image +FROM debian:12.8 + +# Set environment variables +ENV MAKE_VERSION=4.2.1 +ENV WORKDIR_PATH=/work +ENV USERNAME=user + +# Set working directory +WORKDIR $WORKDIR_PATH + +# Update package lists, install necessary dependencies +RUN apt-get update && \ + apt-get install -y \ + git \ + wget \ + build-essential \ + libfdt1 \ + libyaml-0-2 \ + gdebi-core \ + libuv1 \ + procps \ + librhash0 \ + libarchive13 \ + libc6 \ + libcurl4 \ + libexpat1 \ + libgcc-s1 \ + binutils \ + flex \ + bison \ + pkg-config \ + openssl \ + libssl-dev \ + cpio \ + unzip \ + rsync \ + bc \ + device-tree-compiler \ + gcc-aarch64-linux-gnu \ + g++-aarch64-linux-gnu \ + python3-pyelftools \ + gcc-riscv64-linux-gnu \ + g++-riscv64-linux-gnu \ + gcc-riscv64-unknown-elf \ + binutils-riscv64-linux-gnu \ + libncurses-dev \ + fdisk \ + dosfstools \ + libglib2.0-dev \ + python3-distutils \ + libpixman-1-dev \ + parted \ + udev \ + sudo \ + vim + +# Install Make 4.2.1 +RUN wget http://ftp.pl.debian.org/debian/pool/main/m/make-dfsg/make_4.2.1-1.2_amd64.deb \ + && dpkg -i make_4.2.1-1.2_amd64.deb \ + && rm -f make_4.2.1-1.2_amd64.deb + +# Install dtc 1.6.1 +COPY rpi4-ws/patches/dtc $WORKDIR_PATH/patches/dtc/ + +RUN git clone https://salsa.debian.org/crosstoolchain-team/device-tree-compiler.git \ + && cd device-tree-compiler \ + && git checkout debian/1.5.0-2 \ + && git apply $WORKDIR_PATH/patches/dtc/dtc-patch.patch \ + && make install \ + && rm -rf $WORKDIR_PATH/device-tree-compiler + +# Install libssl1.1 (requirement for mkimage) +RUN wget http://ftp.pl.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.1w-0+deb11u1_amd64.deb \ + && dpkg -i libssl1.1_1.1.1w-0+deb11u1_amd64.deb \ + && rm -f libssl1.1_1.1.1w-0+deb11u1_amd64.deb + +# Install mkimage 20.10 +RUN git clone https://github.com/u-boot/u-boot.git \ + && cd u-boot \ + && git checkout v2020.10 \ + && make tools-only_defconfig \ + && make tools \ + && cp tools/mkimage /usr/local/bin \ + && chmod +x /usr/local/bin/mkimage + +# Install cmake-data 3.25 +RUN wget http://ftp.pl.debian.org/debian/pool/main/c/cmake/cmake-data_3.25.1-1~bpo11+1_all.deb \ + && dpkg -i cmake-data_3.25.1-1~bpo11+1_all.deb \ + && rm -f cmake-data_3.25.1-1~bpo11+1_all.deb + +# Install libjsoncpp24 +RUN wget http://ftp.pl.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_amd64.deb \ + && dpkg -i libjsoncpp24_1.9.4-4_amd64.deb \ + && rm -f libjsoncpp24_1.9.4-4_amd64.deb + +# Install Cmake 3.20.0 +COPY rpi4-ws/patches/cmake $WORKDIR_PATH/patches/cmake/ + +RUN wget https://cmake.org/files/v3.20/cmake-3.20.0.tar.gz \ + && tar -xvf cmake-3.20.0.tar.gz \ + && cd cmake-3.20.0 \ + && git apply $WORKDIR_PATH/patches/cmake/001-search-path.diff \ + && git apply $WORKDIR_PATH/patches/cmake/003-libuv-application-services.diff \ + && git apply $WORKDIR_PATH/patches/cmake/custom-application-services.patch + +RUN cd cmake-3.20.0 \ + && ./bootstrap \ + && make install \ + && cd .. && rm -rf cmake-3.20.0 + +# Install ninja 1.10.1 +RUN wget http://ftp.pl.debian.org/debian/pool/main/n/ninja-build/ninja-build_1.10.1-1_amd64.deb \ + && dpkg -i ninja-build_1.10.1-1_amd64.deb \ + && rm -f ninja-build_1.10.1-1_amd64.deb + +# Install BASH +RUN apt install bash -y +SHELL ["/bin/bash", "-c"] + +# Fix missing "cryptography" python module +RUN apt install python3-cryptography -y + +# Install Arm Bare-metal toolchain +RUN wget -O aarch64-none-elf.tar.xz "https://developer.arm.com/-/media/Files/downloads/gnu/11.2-2022.02/binrel/gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf.tar.xz?rev=981d8f7e91864070a466d852589598e2&hash=8D5397D4E41C99A96989ED813E8E95F0" \ + && unxz aarch64-none-elf.tar.xz \ + && tar -xvf aarch64-none-elf.tar \ + && rm -f aarch64-none-elf.tar + + +# Install Arm GNU toolchain +RUN wget -O aarch64-none-linux-gnu.tar.xz "https://developer.arm.com/-/media/Files/downloads/gnu/11.2-2022.02/binrel/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz?rev=33c6e30e5ac64e6dba8f0431f2c35f1b&hash=9918A05BF47621B632C7A5C8D2BB438FB80A4480" \ + && unxz aarch64-none-linux-gnu.tar.xz \ + && tar -xvf aarch64-none-linux-gnu.tar \ + && rm -f aarch64-none-linux-gnu.tar + +# Update PATH for arm developer toolchain +ENV PATH="$WORKDIR_PATH/gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf/bin:$PATH" +ENV PATH="$WORKDIR_PATH/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin:$PATH" + +# Add support for aarch64 packages +RUN dpkg --add-architecture arm64 + +# Add trixie repository to install the libteec2 package for aarch64 +RUN echo "deb http://deb.debian.org/debian trixie main" >> /etc/apt/sources.list && \ + echo "deb-src http://deb.debian.org/debian trixie main" >> /etc/apt/sources.list && \ + apt-get update && \ + apt-get -t trixie install -y libteec2:arm64 + +# Clean cached apt, package lists and temprorary files to reduce image size +RUN apt-get clean && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +# Add non-root user and give sudo privileges +RUN useradd -m -s /bin/bash $USERNAME && \ + echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers + +USER $USERNAME + +# SHELL must be set after USER if you're switching to bash +SHELL ["/bin/bash", "-c"] + + # Make the starting directory is the CROSSCON Demos directory +WORKDIR $WORKDIR_PATH/crosscon +ENV ROOT=$WORKDIR_PATH/crosscon diff --git a/rpi4-ws/README.md b/rpi4-ws/README.md index 0fe0a9c..8b92966 100644 --- a/rpi4-ws/README.md +++ b/rpi4-ws/README.md @@ -2,522 +2,186 @@ This guide provides steps to leverage the CROSSCON Hypervisor on the RPi4 to build virtual TEEs. -Start by setting the root folder path: -```sh -export ROOT=`realpath .` -``` - -# Setup firmware components +## Clone the repository -Some fimware components need to downloaded and built. Follow these steps: +Clone the repository by executing following command. -```sh -export ROOT=`pwd` +```bash +git clone --recurse-submodules git@github.com:3mdeb/CROSSCON-Hypervisor-and-TEE-Isolation-Demos.git crosscon-demos && \ +cd crosscon-demos ``` -```sh -cd rpi4-ws -export RPI4_WS=`pwd` - -mkdir bin +## Build & run the container -git clone https://github.com/raspberrypi/firmware.git --depth 1 --branch 1.20230405 +Build docker container. -git clone https://github.com/u-boot/u-boot.git --depth 1 --branch v2022.10 -cd u-boot -make rpi_4_defconfig -make -j`nproc` CROSS_COMPILE=aarch64-none-elf- -cp -v u-boot.bin ../bin/ -cd $RPI4_WS - -git clone https://github.com/bao-project/arm-trusted-firmware.git --branch bao/demo --depth 1 -cd arm-trusted-firmware -make PLAT=rpi4 -j`nproc` CROSS_COMPILE=aarch64-none-elf- -cp -v build/rpi4/release/bl31.bin ../bin/ -cd $RPI4_WS +```bash +docker build -t crosscon_hv -f rpi4-ws/Dockerfile . ``` ---- -## Prepare SDCard - -In this example the sdcard is `/dev/sdb` and the partitions are `/dev/sdb1`, `/dev/sdb2`, etc. +The resulting image will have a `crosscon_hv` tag. +After the image has been built, execute `rpi4-ws/run.sh` script to run +the container. -### i) Start by checking which SD card you have -```sh -lsblk -o NAME,RM,SIZE,MODEL | grep 1 +```bash +rpi4-ws/run.sh ``` -![SDcard](./img/.gif/SDcard.gif) -### ii) Make sure all partitions are unmounted +## Building the rpi4-ws demo -```sh -umount /dev/* -``` -![unmountSD](./img/.gif/unmountSD.gif) -### iii) Delete all partitions +Inside the container, use below script to build the demo `rpi4-ws` package. -```sh -sudo fdisk /dev/ +```bash +rpi4-ws/build.sh --all ``` -Then run the commands: -* Press `d` until there are no more partitions (if it asks you for the partition, press `return` for the default) -* Press `w` write changes and exit +This command will perform all steps. Run the command without any parameters to +see other options. -![SDdelpart](./img/.gif/SDdelpart.gif) - -### iv) Create partition - -```sh -sudo fdisk /dev/ +```bash +rpi4-ws/build.sh ``` -Then run the commands: - -* `o` to create a new empty DOS partition table -* `n` to create a new partition. Select the following options: - * `p` to make it a primary partition - * the automatically assigned partition number by pressing `return` - * `16384` (this gap is needed for some of the selected boards) - * the max default size by pressing `return` - * if it asks you to remove the file system signature press `y` -* `a` to make the partition bootable -* `t` to set the partition type: - * type `c` for W95 FAT32 (LBA) -* `w` to write changes and exit - -![SDcreatepart](./img/.gif/SDcreatepart.gif) - -### v) Format partition -Format the created partition to a fat filesystem: -```sh -sudo mkfs.fat /dev/1 -n boot -``` +## Creating and flashing the image -Remove and insert the sd card to automatically mount it. +The following command can be used to build the hypervisor and create an image +with all required files included. -![SDformat](./img/.gif/SDformat.gif) +```bash +sudo rpi4-ws/create_hyp_img.sh +``` ---- -# Copy Firmware Files to SDCard - copy the firmware and CROSSCON Hypervisor's final image to it: +The command will output the image to `/work/crosscon/crosscon-demo-img.img`. +Note: The command must be run with `sudo`. -```sh -cd $RPI4_WS -SDCARD=/media/$USER/boot +The built image can be then flashed to SD card. -cp -vr firmware/boot/* $SDCARD -cp -v config.txt $SDCARD -cp -v bin/bl31.bin $SDCARD -cp -v bin/u-boot.bin $SDCARD +```bash +sudo dd if=./crosscon-demo-img.img of= bs=4M conv=fsync ``` -![SDcopyfw](./img/.gif/SDcopyfw.gif) ---- -# Build Components +## Running the image -```sh -cd $ROOT -``` +Use UART to USB adapter to connect RPI to your machine. Use pins +[6,8 and 10](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#gpio) +to connect the UART converter to RPI. Make sure the logic level is set to 3.3V. +Launch `minicom` to access the command line. -## Step 1: OP-TEE OS -```sh -cd optee_os - -OPTEE_DIR="./" -export O="$OPTEE_DIR/optee-rpi4" -CC="aarch64-none-elf-" -export CFLAGS=-Wno-cast-function-type -PLATFORM="rpi4" -ARCH="arm" -SHMEM_START="0x08000000" -SHMEM_SIZE="0x00200000" -TZDRAM_START="0x10100000" -TZDRAM_SIZE="0x00F00000" -CFG_GIC=n - -rm -rf $O - -make -C $OPTEE_DIR \ - O=$O \ - CROSS_COMPILE=$CC \ - PLATFORM=$PLATFORM \ - PLATFORM_FLAVOR=$PLATFORM_FLAVOR \ - ARCH=$ARCH \ - CFG_PKCS11_TA=n \ - CFG_SHMEM_START=$SHMEM_START \ - CFG_SHMEM_SIZE=$SHMEM_SIZE \ - CFG_CORE_DYN_SHM=n \ - CFG_NUM_THREADS=1 \ - CFG_CORE_RESERVED_SHM=y \ - CFG_CORE_ASYNC_NOTIF=n \ - CFG_TZDRAM_SIZE=$TZDRAM_SIZE \ - CFG_TZDRAM_START=$TZDRAM_START \ - CFG_GIC=y \ - CFG_ARM_GICV2=y \ - CFG_CORE_IRQ_IS_NATIVE_INTR=n \ - CFG_ARM64_core=y \ - CFG_USER_TA_TARGETS=ta_arm64 \ - CFG_DT=n \ - CFG_CORE_ASLR=n \ - CFG_CORE_WORKAROUND_SPECTRE_BP=n \ - CFG_CORE_WORKAROUND_NSITR_CACHE_PRIME=n \ - CFG_TEE_CORE_LOG_LEVEL=1 \ - DEBUG=1 -j16 - - -OPTEE_DIR="./" -export O="$OPTEE_DIR/optee2-rpi4" -SHMEM_START="0x08200000" -TZDRAM_START="0x20100000" - -rm -rf $O - -make -C $OPTEE_DIR \ - O=$O \ - CROSS_COMPILE=$CC \ - PLATFORM=$PLATFORM \ - PLATFORM_FLAVOR=$PLATFORM_FLAVOR \ - ARCH=$ARCH \ - CFG_PKCS11_TA=n \ - CFG_SHMEM_START=$SHMEM_START \ - CFG_SHMEM_SIZE=$SHMEM_SIZE \ - CFG_CORE_DYN_SHM=n \ - CFG_CORE_RESERVED_SHM=y \ - CFG_CORE_ASYNC_NOTIF=n \ - CFG_TZDRAM_SIZE=$TZDRAM_SIZE \ - CFG_TZDRAM_START=$TZDRAM_START \ - CFG_GIC=y \ - CFG_ARM_GICV2=y \ - CFG_CORE_IRQ_IS_NATIVE_INTR=n \ - CFG_ARM64_core=y \ - CFG_USER_TA_TARGETS=ta_arm64 \ - CFG_DT=n \ - CFG_CORE_ASLR=n \ - CFG_CORE_WORKAROUND_SPECTRE_BP=n \ - CFG_CORE_WORKAROUND_NSITR_CACHE_PRIME=n \ - CFLAGS="${CFLAGS} -DOPTEE2" \ - CFG_EARLY_TA=y \ - CFG_TEE_CORE_LOG_LEVEL=1 \ - DEBUG=1 -j16 - -cd $ROOT -``` -![COMPoptee](./img/.gif/COMPoptee.gif) - -## Step 2: Linux file system -We will first build an incomplete filesystem to benefit fom buildroot building the appropriate linux toolchains. -We've tested with Buildroot 2022.11.1 (https://buildroot.org/downloads/buildroot-2022.11.1.tar.gz) -``` sh -if [ ! -e buildroot ]; then - wget https://buildroot.org/downloads/buildroot-2022.11.1.tar.gz - tar -xf buildroot-2022.11.1.tar.gz - mv buildroot-2022.11.1 buildroot -fi +```bash +minicom -D /dev/ttyUSB0 -b 115200 ``` -Create build directory: -``` sh -mkdir buildroot/build-aarch64 -``` +Supply power to RPI and hit any key when asked to stop u-boot from attempting +auto-boot. -Set our predefined `.config` files: -``` sh -cp support/br-aarch64.config buildroot/build-aarch64/.config +```bash +[...] +scanning bus xhci_pci for devices... 2 USB Device(s) found + scanning usb for storage devices... 0 Storage Device(s) found +Hit any key to stop autoboot: 0 +U-Boot> ``` -This build step will fail as we haven't yet setup all the binaries necessary for the full filesystem. However, we take advantage of the fact that buildroot builds the linux toolchain to build these missing binaries. Build: -``` sh -cd buildroot +_Note: If you missed the timeframe, you can spam CTRL+C many times to achieve +same result._ -make O=build-aarch64/ -j`nproc` +Boot the image by manually loading it into the memory and "jumping" to it. -cd $ROOT +```bash +fatload mmc 0 0x200000 crossconhyp.bin; go 0x200000 ``` -![COMPlinuxbefore](./img/.gif/COMPlinuxbefore.gif) - -## Step 3: Build OP-TEE Clients -Build the optee client application library and tee supplicant for both OP-TEEs. -``` sh -cd optee_client -git checkout master -make CROSS_COMPILE=aarch64-none-linux-gnu- WITH_TEEACL=0 O=out-aarch64 -git checkout optee2 -make CROSS_COMPILE=aarch64-none-linux-gnu- WITH_TEEACL=0 O=out2-aarch64 +### Options -cd $ROOT -``` -![COMPopteeclient](./img/.gif/COMPopteeclient.gif) -## Step 4: Build OP-TEE xtest -Build the OP-TEE xtest test suite. -``` sh -cd optee_test - -BUILDROOT=`pwd`/../buildroot/build-aarch64/ -export CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- -export HOST_CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- -export TA_CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- -export ARCH=aarch64 -export PLATFORM=plat-vexpress -export PLATFORM_FLAVOR=qemu_armv8a -export TA_DEV_KIT_DIR=`pwd`/../optee_os/optee-rpi4/export-ta_arm64 -export TEEC_EXPORT=`pwd`/../optee_client/out-aarch64/export/usr/ -export OPTEE_CLIENT_EXPORT=`pwd`/../optee_client/out-aarch64/export/usr/ -export CFG_TA_OPTEE_CORE_API_COMPAT_1_1=y -export DESTDIR=./to_buildroot-aarch64 -export DEBUG=0 -export CFG_TEE_TA_LOG_LEVEL=0 -export CFLAGS=-O2 -export O=`pwd`/out-aarch64 -export CFG_PKCS11_TA=n - -rm -rf $O -rm -rf to_buildroot-aarch64/ -find . -name "Makefile" -exec sed -i "s/\-lteec2$/\-lteec/g" {} + -find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + -make clean -make -j`nproc` -make install - - -export O=`pwd`/out2-aarch64 -export DESTDIR=./to_buildroot-aarch64-2 -export TA_DEV_KIT_DIR=`pwd`/../optee_os/optee2-rpi4/export-ta_arm64 -export TEEC_EXPORT=`pwd`/../optee_client/out2-aarch64/export/usr/ -export OPTEE_CLIENT_EXPORT=`pwd`/../optee_client/out2-aarch64/export/usr/ -rm -rf `pwd`/out2-aarch64 -find . -name "Makefile" -exec sed -i "s/\-lteec$/\-lteec2/g" {} + -find . -name "Makefile" -exec sed -i "s/optee_armtz/optee2_armtz/g" {} + -make clean -make -j`nproc` -make install -find . -name "Makefile" -exec sed -i "s/\-lteec2$/\-lteec/g" {} + -find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + - -mv $DESTDIR/bin/xtest $DESTDIR/bin/xtest2 -cd $ROOT -``` -![COMPxtest](./img/.gif/COMPxtest.gif) - -## Step 5: Compile Bitcoin Wallet Client and Trusted Application -```sh -cd bitcoin-wallet - -BUILDROOT=`pwd`/../buildroot/build-aarch64/ - -export CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- -export HOST_CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- -export TA_CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- -export ARCH=aarch64 -export PLATFORM=plat-virt -export TA_DEV_KIT_DIR=`pwd`/../optee_os/optee-rpi4/export-ta_arm64 -export TEEC_EXPORT=`pwd`/../optee_client/out-aarch64/export/usr/ -export OPTEE_CLIENT_EXPORT=`pwd`/../optee_client/out-aarch64/export/usr/ -export CFG_TA_OPTEE_CORE_API_COMPAT_1_1=n -export DESTDIR=./to_buildroot-aarch64 -export DEBUG=0 -export CFG_TEE_TA_LOG_LEVEL=0 -export O=`pwd`/out-aarch64 - -rm -rf out-aarch64/ -## make sure we have things setup for first OP-TEE -find . -name "Makefile" -exec sed -i "s/\-lteec2$/\-lteec/g" {} + -find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + -make clean -make -j`nproc` - -mkdir -p to_buildroot-aarch64/lib/optee_armtz -mkdir -p to_buildroot-aarch64/bin - -cp out-aarch64/*.ta to_buildroot-aarch64/lib/optee_armtz -cp host/wallet to_buildroot-aarch64/bin/bitcoin_wallet_ca -chmod +x to_buildroot-aarch64/bin/bitcoin_wallet_ca - -## setup second OP-TEE -export O=`pwd`/out2-aarch64 -export DESTDIR=./to_buildroot-aarch64-2 -export TA_DEV_KIT_DIR=`pwd`/../optee_os/optee2-rpi4/export-ta_arm64 -export TEEC_EXPORT=`pwd`/../optee_client/out2-aarch64/export/usr/ -export OPTEE_CLIENT_EXPORT=`pwd`/../optee_client/out2-aarch64/export/usr/ -rm -rf `pwd`/out2-aarch64 -find . -name "Makefile" -exec sed -i "s/\-lteec/\-lteec2/g" {} + -find . -name "Makefile" -exec sed -i "s/optee_armtz/optee2_armtz/g" {} + -make clean -make -j`nproc` -## undo changes -find . -name "Makefile" -exec sed -i "s/\-lteec2/\-lteec/g" {} + -find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + - -mkdir -p to_buildroot-aarch64-2/lib/optee2_armtz -mkdir -p to_buildroot-aarch64-2/bin - -cp out-aarch64/*.ta to_buildroot-aarch64-2/lib/optee2_armtz -cp host/wallet to_buildroot-aarch64-2/bin/bitcoin_wallet_ca2 -chmod +x to_buildroot-aarch64-2/bin/bitcoin_wallet_ca2 - - -cd $ROOT -``` -![COMPbw](./img/.gif/COMPbw.gif) +One the image finishes booting you can run the following command to request ip +address via dhcp (ethernet only). -## Step 6: Compile Malicious Client and Trusted Application +```bash +udhcpc -i eth0 ``` -cd malicous_ta -BUILDROOT=`pwd`/../buildroot/build-aarch64/ -export CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- -export HOST_CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- -export TA_CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- -export ARCH=aarch64 -export PLATFORM=plat-virt -export TA_DEV_KIT_DIR=`pwd`/../optee_os/optee-rpi4/export-ta_arm64 -export TEEC_EXPORT=`pwd`/../optee_client/out-aarch64/export/usr/ -export OPTEE_CLIENT_EXPORT=`pwd`/../optee_client/out-aarch64/export/usr/ -export CFG_TA_OPTEE_CORE_API_COMPAT_1_1=n -export DESTDIR=./to_buildroot-aarch64 -export DEBUG=0 -export CFG_TEE_TA_LOG_LEVEL=2 -export O=`pwd`/out-aarch64 -export aarch64_TARGET=y -rm -rf out-aarch64/ -## make sure we have things setup for first OP-TEE -find . -name "Makefile" -exec sed -i "s/\-lteec2$/\-lteec/g" {} + -find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + -make clean -make -j`nproc` -mkdir -p to_buildroot-aarch64/lib/optee_armtz -mkdir -p to_buildroot-aarch64/bin -cp out-aarch64/*.ta to_buildroot-aarch64/lib/optee_armtz -cp host/malicious_ca to_buildroot-aarch64/bin/malicious_ca -chmod +x to_buildroot-aarch64/bin/malicious_ca -## setup second OP-TEE -export O=`pwd`/out2-aarch64 -export DESTDIR=./to_buildroot-aarch64-2 -export TA_DEV_KIT_DIR=`pwd`/../optee_os/optee2-rpi4/export-ta_arm64 -export TEEC_EXPORT=`pwd`/../optee_client/out2-aarch64/export/usr/ -export OPTEE_CLIENT_EXPORT=`pwd`/../optee_client/out2-aarch64/export/usr/ -rm -rf `pwd`/out2-aarch64 -find . -name "Makefile" -exec sed -i "s/\-lteec/\-lteec2/g" {} + -find . -name "Makefile" -exec sed -i "s/optee_armtz/optee2_armtz/g" {} + -make clean -make -j`nproc` -## undo changes -find . -name "Makefile" -exec sed -i "s/\-lteec2/\-lteec/g" {} + -find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + -mkdir -p to_buildroot-aarch64-2/lib/optee2_armtz -mkdir -p to_buildroot-aarch64-2/bin -cp out2-aarch64/*.ta to_buildroot-aarch64-2/lib/optee2_armtz -cp host/malicious_ca to_buildroot-aarch64-2/bin/malicious_ca2 -chmod +x to_buildroot-aarch64-2/bin/malicious_ca2 -cd $ROOT -``` -![COMPlinuxkernel](./img/.gif/COMPmalicious.gif) - -## Step 7: Finalize Linux file system -We have everything setup now, so build the final file system for Linux. -```sh -cd buildroot -make O=build-aarch64/ -j`nproc` +You can also run regression test. -cd $ROOT +```bash +xtest -t regression ``` -![COMPlinuxfinal](./img/.gif/COMPlinuxfinal.gif) - -## Step 8: Build Linux - -Set our predefined `.config` files: -``` sh -mkdir linux/build-aarch64/ -cp support/linux-aarch64.config linux/build-aarch64/.config - -cd linux -make ARCH=arm64 O=build-aarch64 CROSS_COMPILE=`realpath ../buildroot/build-aarch64/host/bin/aarch64-linux-` -j16 Image dtbs +## Building other demo configurations -cd $ROOT -``` - -![COMPlinuxkernel](./img/.gif/COMPlinuxkernel.gif) +The default the hypervisor is built from `rpi4-single-vTEE` configuration, +resulting in a configuration with a Linux VM and OP-TEE VM. ---- -### Step 9: Bind Linux Image and device tree +### Demo 2 +This demo instantiates a Linux VM and two OP-TEE VMs. -```sh -dtc -I dts -O dtb rpi4-ws/rpi4.dts > rpi4-ws/rpi4.dtb +```bash +sudo rpi4-ws/create_hyp_img.sh --config=rpi4-dual-vTEE ``` -```sh -cd lloader +Flash contents as described in +["Creating and flashing the Image" section](#creating-and-flashing-the-image). -rm linux-rpi4.bin -rm linux-rpi4.elf -make \ - IMAGE=../linux/build-aarch64/arch/arm64/boot/Image \ - DTB=../rpi4-ws/rpi4.dtb \ - TARGET=linux-rpi4.bin \ - CROSS_COMPILE=aarch64-none-elf- \ - ARCH=aarch64 +After Linux finishes booting you may execute xtest in both OP-TEE VMs. -cd $ROOT +```bash +xtest -t regression +xtest2 -t regression ``` -![COMPdt](./img/.gif/COMPdt.gif) - - -### Simple Demo -This demo instantiates a Linux VM and an OP-TEE VM. Insert the sdcard in your -pc, and wait for it to mount the boot partition. Otherwise mount the sd card -manually. The script expects `SDCARD` to be set (e.g.,`/media/$USER/boot`) -``` sh -./build-demo-vtee.sh -``` -![RUNsimpledemo](./img/.gif/RUNsimpledemo.gif) +### Security test -#### Setup board +**Note: For this demo, you'll need RPI 4 8GB version!** -Insert the sd card in the board's sd slot. +* Build security test demo: -Connect to the Raspberry Pi's UART using a USB-to-TTL adapter to connect to the Raspberry Pi's GPIO header UART pins. + ```bash + rpi4-ws/build.sh --steps=10-10 --linux-target=linux-rpi4 --dts=rpi4-ws/rpi4-minimal.dts && \ + rpi4-ws/build.sh --steps=10-10 --linux-target=linux2-rpi4 --dts=rpi4-ws/rpi4-minimal2.dts && \ + sudo rpi4-ws/create_hyp_img.sh --config=rpi4-minimal-2 + ``` -- VCC (Pin 4 on RPI4) → Connect to VCC on the USB-to-TTL adapter. This provides power to the adapter. -- GND (Pin 6 on RPI4) → Connect to GND on the adapter to establish a common ground. -- TX (Pin 8 on RPI4) → Connect to RX on the adapter. This allows the RPI4 to send data to the adapter’s receive line. -- RX (Pin 10 on RPI4) → Connect to TX on the adapter, enabling data reception from the adapter’s transmit line. +* Flash contents as described in +["Creating and flashing the Image" section](#creating-and-flashing-the-image) -Use a terminal application such as `miniterm.py` from pyserial package. For example: +* Connect second UART to RPI4. Board configuration: + - [GPIO 4](https://pinout.xyz/pinout/pin7_gpio4/) - UART TX + - [GPIO 5](https://pinout.xyz/pinout/pin29_gpio5/) - UART RX -``` -miniterm.py /dev/ttyUSB0 115200 -``` +* Boot normally, after a while you should see output on both `ttyUSB0` and + `ttyUSB1` -Turn on/reset your board. +* Follow `Run` section in [security test README](../security_test/README.md#run) -#### Run u-boot commands +### Memory separation test -Quickly press any key to skip autoboot. If not possibly press `ctrl-c` until you get the u-boot prompt. Then load the bao image, and jump to it: +* Build baremetal app: -``` -fatload mmc 0 0x200000 crossconhyp.bin; go 0x200000 -``` + ```sh + rpi4-ws/build.sh --steps=10-10 --linux-target=linux2-rpi4 --dts=rpi4-ws/rpi4-minimal2.dts && \ + sudo rpi4-ws/create_hyp_img.sh --config=rpi4-baremetal + ``` +* Flash contents as described in +["Creating and flashing the Image" section](#creating-and-flashing-the-image) -You should see bao and its guest printing on the UART. +* After a while you should boot into baremetal app. You can pass memory address + in hexadecimal (with or without `0x` prefix) and app will try to read this + address e.g.: -After Linux finishes booting run xtest as follows: -``` sh -xtest -t regression -``` + ```txt + Access (hex): 0x20000000 + Trying to access: 0x20000000 + Value: 0xff + ``` -### Demo 2 -This demo instantiates a Linux VM and two OP-TEE VMs. -``` sh -./build-demo-dual-vtee.sh -``` + When trying to access ranges outside of memory assigned to baremetal app you + should see data abort errors and VM will freeze -After Linux finishes booting you may execute xtest in both OP-TEE VMs. -``` sh -xtest -t regression -xtest2 -t regression -``` + ```txt + CROSSCONHYP DATA ABORT: 0x1fffffff + ``` + Second VM is just there to check if we can't access its memory, but you can + connect second UART ([GPIO 4](https://pinout.xyz/pinout/pin7_gpio4) & [GPIO + 5](https://pinout.xyz/pinout/pin29_gpio5)) if you need to communicate with + it. diff --git a/rpi4-ws/build-demo-dual-vtee.sh b/rpi4-ws/build-demo-dual-vtee.sh deleted file mode 100755 index a404e78..0000000 --- a/rpi4-ws/build-demo-dual-vtee.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -e - -CONFIG_REPO=`pwd`/configs - -pushd .. - -make -C CROSSCON-Hypervisor/ \ - PLATFORM=rpi4 \ - CONFIG_BUILTIN=y \ - CONFIG_REPO=$CONFIG_REPO \ - CONFIG=rpi4-dual-vTEE \ - OPTIMIZATIONS=0 \ - SDEES="sdSGX sdTZ" \ - CROSS_COMPILE=aarch64-none-elf- \ - clean - -make -C CROSSCON-Hypervisor/ \ - PLATFORM=rpi4 \ - CONFIG_BUILTIN=y \ - CONFIG_REPO=$CONFIG_REPO \ - CONFIG=rpi4-dual-vTEE \ - OPTIMIZATIONS=0 \ - SDEES="sdSGX sdTZ" \ - CROSS_COMPILE=aarch64-none-elf- \ - -j`nproc` - -cp -vr firmware/boot/start* $SDCARD -cp -uv CROSSCON-Hypervisor/bin/rpi4/builtin-configs/rpi4-dual-vTEE/crossconhyp.bin /media/$USER/boot - -umount /media/$USER/boot - - -popd - - diff --git a/rpi4-ws/build-demo-vtee.sh b/rpi4-ws/build-demo-vtee.sh deleted file mode 100755 index 8e65960..0000000 --- a/rpi4-ws/build-demo-vtee.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -e - -CONFIG_REPO=`pwd`/configs - -pushd .. - -make -C CROSSCON-Hypervisor/ \ - PLATFORM=rpi4 \ - CONFIG_BUILTIN=y \ - CONFIG_REPO=$CONFIG_REPO \ - CONFIG=rpi4-single-vTEE \ - OPTIMIZATIONS=0 \ - SDEES="sdSGX sdTZ" \ - CROSS_COMPILE=aarch64-none-elf- \ - clean - -make -C CROSSCON-Hypervisor/ \ - PLATFORM=rpi4 \ - CONFIG_BUILTIN=y \ - CONFIG_REPO=$CONFIG_REPO \ - CONFIG=rpi4-single-vTEE \ - OPTIMIZATIONS=0 \ - SDEES="sdSGX sdTZ" \ - CROSS_COMPILE=aarch64-none-elf- \ - -j`nproc` -export SDCARD=/media/$USER/boot -cp -vr rpi4-ws/firmware/boot/start* $SDCARD -cp -uv CROSSCON-Hypervisor/bin/rpi4/builtin-configs/rpi4-single-vTEE/crossconhyp.bin /media/$USER/boot - -umount /media/$USER/boot - -popd - - - diff --git a/rpi4-ws/build.sh b/rpi4-ws/build.sh new file mode 100755 index 0000000..9b1b603 --- /dev/null +++ b/rpi4-ws/build.sh @@ -0,0 +1,646 @@ +#!/bin/bash + +# Note, the steps more or less follow legacy readme manual for building demos. +STEP_0_NAME="Setup: set up FW components" +STEP_1_NAME="1: Build OP-TEE OS" +STEP_2_NAME="2: Build Linux file system (buildroot)" +STEP_3_NAME="3: Build OP-TEE Clients" +STEP_4_NAME="4: Build OP-TEE xtest" +STEP_5_NAME="5: Compile Bitcoin wallet UA an TA" +STEP_6_NAME="6: Compile Malicious UA and TA" +STEP_7_NAME="7: Compile Context-Based Authentication TA" +STEP_8_NAME="8: Compile Cache Coloring tests" +STEP_9_NAME="9: Finalize Linux file system" +STEP_10_NAME="10: Build linux" +STEP_11_NAME="11: Bind Linux image and device tree" + +ROOT=$(git -C "$(dirname "$(realpath $0)")" rev-parse --show-toplevel) + +RUN_ALL=false +LOCAL_CONFS=false +STEP_RANGE="" + +BUILDROOT_CONF_PATH="support/br-aarch64.config" +BUILDROOT_LOCAL_CONF_PATH="buildroot/build-aarch64/.config" +LINUX_CONF_PATH="support/linux-aarch64.config" +LINUX_LOCAL_CONF_PATH="linux/build-aarch64/.config" +DTS_FILE="rpi4-ws/rpi4.dts" +LINUX_TARGET="linux-rpi4" +BUILD_CBA="false" + +print_usage() { + echo "Available steps:" + for i in {0..11}; do + step_name_var="STEP_${i}_NAME" + echo " $i - ${!step_name_var}" + done + + echo + echo "Usage:" + echo " $0 --all - execute all steps." + echo " $0 --local-confs - use local .config files instead of copying reference ones." + echo " $0 --steps=X-Y - execute steps from X to Y (inclusive)." + echo " [--buildroot_conf=PATH] [--linux_conf=PATH] [--dts=PATH] [--linux-target=NAME] - if not provided, defaults will be used." + exit 1 +} + +print_step_header() { + local step="$1" + local prefix="Step: " + local content="$prefix$step" + local length=${#content} + local border=$(printf '%*s' $((length + 4)) '' | tr ' ' '#') + + echo "$border" + echo "# $content #" + echo "$border" +} + +# Copy PKCS#11 TA ".TA" files +extra_step_1() { + cd "$ROOT" + + TA_FILE_PATH=optee_os/optee-rpi4/export-ta_arm64/ta/fd02c9da-306c-48c7-a49c-bbd827ae86ee.ta + TA_FILE_PATH_2=optee_os/optee2-rpi4/export-ta_arm64/ta/fd02c9da-306c-48c7-a49c-bbd827ae86ee.ta + BUILDROOT_PATH=buildroot/build-aarch64/target/lib/optee_armtz/ + BUILDROOT_PATH_2=buildroot/build-aarch64/target/lib/optee2_armtz/ + + mkdir -p "${BUILDROOT_PATH}" "${BUILDROOT_PATH_2}" + cp $TA_FILE_PATH $BUILDROOT_PATH + cp $TA_FILE_PATH_2 $BUILDROOT_PATH_2 + + cd "$ROOT" +} + +# Build memory separation app +extra_step_2() { + cd "$ROOT/memory-separation" + + make clean + make CROSS_COMPILE=aarch64-none-elf- CONFIG_TEXT_BASE=0x20200000 + + cd "$ROOT" +} + +step_0() { + cd "$ROOT" + + cd rpi4-ws + export RPI4_WS=$(pwd) + + mkdir -p bin + + git clone https://github.com/raspberrypi/firmware.git --depth 1 --branch 1.20230405 \ + || echo "# Skipping cloning RPI firmware." + + git clone https://github.com/u-boot/u-boot.git --depth 1 --branch v2022.10 \ + || echo "# Skipping cloning u-boot." + + cd u-boot + make rpi_4_defconfig + make -j`nproc` CROSS_COMPILE=aarch64-none-elf- + cp -v u-boot.bin ../bin/ + cd $RPI4_WS + + git clone https://github.com/bao-project/arm-trusted-firmware.git --branch bao/demo --depth 1 \ + || echo "# Skipping cloning bao hypervisor." + + cd arm-trusted-firmware + make PLAT=rpi4 -j`nproc` CROSS_COMPILE=aarch64-none-elf- + cp -v build/rpi4/release/bl31.bin ../bin/ + cd $RPI4_WS +} + +step_1() { + cd "$ROOT" + + cd optee_os + + OPTEE_DIR="./" + export O="$OPTEE_DIR/optee-rpi4" + CC="aarch64-none-elf-" + export CFLAGS=-Wno-cast-function-type + PLATFORM="rpi4" + ARCH="arm" + SHMEM_START="0x08000000" + SHMEM_SIZE="0x00200000" + TZDRAM_START="0x10100000" + TZDRAM_SIZE="0x00F00000" + CFG_GIC=n + + rm -rf $O + + make -C $OPTEE_DIR \ + O=$O \ + CROSS_COMPILE=$CC \ + PLATFORM=$PLATFORM \ + PLATFORM_FLAVOR=$PLATFORM_FLAVOR \ + ARCH=$ARCH \ + CFG_PKCS11_TA=y \ + CFG_SHMEM_START=$SHMEM_START \ + CFG_SHMEM_SIZE=$SHMEM_SIZE \ + CFG_CORE_DYN_SHM=n \ + CFG_NUM_THREADS=1 \ + CFG_CORE_RESERVED_SHM=y \ + CFG_CORE_ASYNC_NOTIF=n \ + CFG_TZDRAM_SIZE=$TZDRAM_SIZE \ + CFG_TZDRAM_START=$TZDRAM_START \ + CFG_GIC=y \ + CFG_ARM_GICV2=y \ + CFG_CORE_IRQ_IS_NATIVE_INTR=n \ + CFG_ARM64_core=y \ + CFG_USER_TA_TARGETS=ta_arm64 \ + CFG_DT=n \ + CFG_CORE_ASLR=n \ + CFG_CORE_WORKAROUND_SPECTRE_BP=n \ + CFG_CORE_WORKAROUND_NSITR_CACHE_PRIME=n \ + CFG_TEE_CORE_LOG_LEVEL=1 \ + DEBUG=1 -j16 + + + OPTEE_DIR="./" + export O="$OPTEE_DIR/optee2-rpi4" + SHMEM_START="0xc8200000" + TZDRAM_START="0xb0100000" + + rm -rf $O + + make -C $OPTEE_DIR \ + O=$O \ + CROSS_COMPILE=$CC \ + PLATFORM=$PLATFORM \ + PLATFORM_FLAVOR=$PLATFORM_FLAVOR \ + ARCH=$ARCH \ + CFG_PKCS11_TA=y \ + CFG_SHMEM_START=$SHMEM_START \ + CFG_SHMEM_SIZE=$SHMEM_SIZE \ + CFG_CORE_DYN_SHM=n \ + CFG_CORE_RESERVED_SHM=y \ + CFG_CORE_ASYNC_NOTIF=n \ + CFG_TZDRAM_SIZE=$TZDRAM_SIZE \ + CFG_TZDRAM_START=$TZDRAM_START \ + CFG_GIC=y \ + CFG_ARM_GICV2=y \ + CFG_CORE_IRQ_IS_NATIVE_INTR=n \ + CFG_ARM64_core=y \ + CFG_USER_TA_TARGETS=ta_arm64 \ + CFG_DT=n \ + CFG_CORE_ASLR=n \ + CFG_CORE_WORKAROUND_SPECTRE_BP=n \ + CFG_CORE_WORKAROUND_NSITR_CACHE_PRIME=n \ + CFLAGS="${CFLAGS} -DOPTEE2" \ + CFG_EARLY_TA=y \ + CFG_TEE_CORE_LOG_LEVEL=1 \ + DEBUG=1 -j16 + + + cd $ROOT + + [ "$BUILD_CBA" == "false" ] && return + + cd optee_os_cba + + OPTEE_DIR="./" + export O="$OPTEE_DIR/optee-cba-rpi4" + CC="aarch64-none-elf-" + export CFLAGS=-Wno-cast-function-type + PLATFORM="rpi4" + ARCH="arm" + SHMEM_START="0x08000000" + SHMEM_SIZE="0x00200000" + TZDRAM_START="0x10100000" + TZDRAM_SIZE="0x00F00000" + CFG_GIC=n + + rm -rf $O + + make -C $OPTEE_DIR \ + O=$O \ + CROSS_COMPILE=$CC \ + PLATFORM=$PLATFORM \ + PLATFORM_FLAVOR=$PLATFORM_FLAVOR \ + ARCH=$ARCH \ + CFG_PKCS11_TA=y \ + CFG_SHMEM_START=$SHMEM_START \ + CFG_SHMEM_SIZE=$SHMEM_SIZE \ + CFG_CORE_DYN_SHM=n \ + CFG_NUM_THREADS=1 \ + CFG_CORE_RESERVED_SHM=y \ + CFG_CORE_ASYNC_NOTIF=n \ + CFG_TZDRAM_SIZE=$TZDRAM_SIZE \ + CFG_TZDRAM_START=$TZDRAM_START \ + CFG_GIC=y \ + CFG_ARM_GICV2=y \ + CFG_CORE_IRQ_IS_NATIVE_INTR=n \ + CFG_ARM64_core=y \ + CFG_USER_TA_TARGETS=ta_arm64 \ + CFG_DT=n \ + CFG_CORE_ASLR=n \ + CFG_CORE_WORKAROUND_SPECTRE_BP=n \ + CFG_CORE_WORKAROUND_NSITR_CACHE_PRIME=n \ + CFG_TEE_CORE_LOG_LEVEL=1 \ + DEBUG=1 -j16 + + cd $ROOT +} + +step_2() { + cd "$ROOT" + + mkdir -p buildroot/build-aarch64 + + if [ "$LOCAL_CONFS" = "false" ]; then + cp $BUILDROOT_CONF_PATH $BUILDROOT_LOCAL_CONF_PATH + fi + + cd buildroot + + # Build an incomplete filesystem to benefit fom buildroot building the + # appropriate linux toolchain. + make O=build-aarch64/ -j`nproc` || echo "Building buildroot failed as expected!" + + cd $ROOT +} + +step_3() { + cd "$ROOT" + + cd optee_client + + git checkout master + make CROSS_COMPILE=aarch64-none-linux-gnu- WITH_TEEACL=0 O=out-aarch64 + git checkout optee2 + make CROSS_COMPILE=aarch64-none-linux-gnu- WITH_TEEACL=0 O=out2-aarch64 + + cd $ROOT +} + +step_4() { + cd "$ROOT" + + cd optee_test + + BUILDROOT=$(pwd)/../buildroot/build-aarch64/ + export CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- + export HOST_CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- + export TA_CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- + export ARCH=aarch64 + export PLATFORM=plat-vexpress + export PLATFORM_FLAVOR=qemu_armv8a + export TA_DEV_KIT_DIR=$(pwd)/../optee_os/optee-rpi4/export-ta_arm64 + export TEEC_EXPORT=$(pwd)/../optee_client/out-aarch64/export/usr/ + export OPTEE_CLIENT_EXPORT=$(pwd)/../optee_client/out-aarch64/export/usr/ + export CFG_TA_OPTEE_CORE_API_COMPAT_1_1=y + export DESTDIR=./to_buildroot-aarch64 + export DEBUG=0 + export CFG_TEE_TA_LOG_LEVEL=0 + export CFLAGS=-O2 + export O=$(pwd)/out-aarch64 + export CFG_PKCS11_TA=n + + rm -rf $O + rm -rf to_buildroot-aarch64/ + find . -name "Makefile" -exec sed -i "s/\-lteec2$/\-lteec/g" {} + + find . -name "Makefile" -exec sed -i "s/\-lckteec2$/\-lckteec/g" {} + + find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + + make clean + make -j`nproc` + make install + + export O=$(pwd)/out2-aarch64 + export DESTDIR=./to_buildroot-aarch64-2 + export TA_DEV_KIT_DIR=$(pwd)/../optee_os/optee2-rpi4/export-ta_arm64 + export TEEC_EXPORT=$(pwd)/../optee_client/out2-aarch64/export/usr/ + export OPTEE_CLIENT_EXPORT=$(pwd)/../optee_client/out2-aarch64/export/usr/ + rm -rf $(pwd)/out2-aarch64 + find . -name "Makefile" -exec sed -i "s/\-lteec$/\-lteec2/g" {} + + find . -name "Makefile" -exec sed -i "s/\-lckteec$/\-lckteec2/g" {} + + find . -name "Makefile" -exec sed -i "s/optee_armtz/optee2_armtz/g" {} + + make clean + make -j`nproc` + make install + find . -name "Makefile" -exec sed -i "s/\-lteec2$/\-lteec/g" {} + + find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + + + mv $DESTDIR/bin/xtest $DESTDIR/bin/xtest2 + + [ "$BUILD_CBA" == "false" ] && return + + export O=$(pwd)/out-cba-aarch64 + export DESTDIR=./to_buildroot-aarch64-cba + export TA_DEV_KIT_DIR=$(pwd)/../optee_os_cba/optee-cba-rpi4/export-ta_arm64 + export TEEC_EXPORT=$(pwd)/../optee_client/out-aarch64/export/usr/ + export OPTEE_CLIENT_EXPORT=$(pwd)/../optee_client/out-aarch64/export/usr/ + rm -rf $(pwd)/out-cba-aarch64 + find . -name "Makefile" -exec sed -i "s/\-lteec2$/\-lteec/g" {} + + find . -name "Makefile" -exec sed -i "s/\-lckteec2$/\-lckteec/g" {} + + find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + + make clean + make -j`nproc` + make install + + cd $ROOT +} + +step_5() { + cd "$ROOT" + + cd bitcoin-wallet + + BUILDROOT=$(pwd)/../buildroot/build-aarch64/ + + export CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- + export HOST_CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- + export TA_CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- + export ARCH=aarch64 + export PLATFORM=plat-virt + export TA_DEV_KIT_DIR=$(pwd)/../optee_os/optee-rpi4/export-ta_arm64 + export TEEC_EXPORT=$(pwd)/../optee_client/out-aarch64/export/usr/ + export OPTEE_CLIENT_EXPORT=$(pwd)/../optee_client/out-aarch64/export/usr/ + export CFG_TA_OPTEE_CORE_API_COMPAT_1_1=n + export DESTDIR=./to_buildroot-aarch64 + export DEBUG=0 + export CFG_TEE_TA_LOG_LEVEL=0 + export O=$(pwd)/out-aarch64 + + rm -rf out-aarch64/ + ## make sure we have things setup for first OP-TEE + find . -name "Makefile" -exec sed -i "s/\-lteec2$/\-lteec/g" {} + + find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + + make clean + make -j`nproc` + + mkdir -p to_buildroot-aarch64/lib/optee_armtz + mkdir -p to_buildroot-aarch64/bin + + cp out-aarch64/*.ta to_buildroot-aarch64/lib/optee_armtz + cp host/wallet to_buildroot-aarch64/bin/bitcoin_wallet_ca + chmod +x to_buildroot-aarch64/bin/bitcoin_wallet_ca + + ## setup second OP-TEE + export O=$(pwd)/out2-aarch64 + export DESTDIR=./to_buildroot-aarch64-2 + export TA_DEV_KIT_DIR=$(pwd)/../optee_os/optee2-rpi4/export-ta_arm64 + export TEEC_EXPORT=$(pwd)/../optee_client/out2-aarch64/export/usr/ + export OPTEE_CLIENT_EXPORT=$(pwd)/../optee_client/out2-aarch64/export/usr/ + rm -rf $(pwd)/out2-aarch64 + find . -name "Makefile" -exec sed -i "s/\-lteec/\-lteec2/g" {} + + find . -name "Makefile" -exec sed -i "s/optee_armtz/optee2_armtz/g" {} + + make clean + make -j`nproc` + ## undo changes + find . -name "Makefile" -exec sed -i "s/\-lteec2/\-lteec/g" {} + + find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + + + mkdir -p to_buildroot-aarch64-2/lib/optee2_armtz + mkdir -p to_buildroot-aarch64-2/bin + + cp out-aarch64/*.ta to_buildroot-aarch64-2/lib/optee2_armtz + cp host/wallet to_buildroot-aarch64-2/bin/bitcoin_wallet_ca2 + chmod +x to_buildroot-aarch64-2/bin/bitcoin_wallet_ca2 + + cd $ROOT +} + +step_6() { + cd "$ROOT" + + cd malicous_ta + BUILDROOT=$(pwd)/../buildroot/build-aarch64/ + export CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- + export HOST_CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- + export TA_CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- + export ARCH=aarch64 + export PLATFORM=plat-virt + export TA_DEV_KIT_DIR=$(pwd)/../optee_os/optee-rpi4/export-ta_arm64 + export TEEC_EXPORT=$(pwd)/../optee_client/out-aarch64/export/usr/ + export OPTEE_CLIENT_EXPORT=$(pwd)/../optee_client/out-aarch64/export/usr/ + export CFG_TA_OPTEE_CORE_API_COMPAT_1_1=n + export DESTDIR=./to_buildroot-aarch64 + export DEBUG=0 + export CFG_TEE_TA_LOG_LEVEL=2 + export O=$(pwd)/out-aarch64 + export aarch64_TARGET=y + rm -rf out-aarch64/ + ## make sure we have things setup for first OP-TEE + find . -name "Makefile" -exec sed -i "s/\-lteec2$/\-lteec/g" {} + + find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + + make clean + make -j`nproc` + if [ $? -ne 0 ]; then + echo "Failed to compile malicious TA for first optee!" + exit 1 + fi + mkdir -p to_buildroot-aarch64/lib/optee_armtz + mkdir -p to_buildroot-aarch64/bin + cp out-aarch64/*.ta to_buildroot-aarch64/lib/optee_armtz + cp host/malicious_ca to_buildroot-aarch64/bin/malicious_ca + chmod +x to_buildroot-aarch64/bin/malicious_ca + ## setup second OP-TEE + export O=$(pwd)/out2-aarch64 + export DESTDIR=./to_buildroot-aarch64-2 + export TA_DEV_KIT_DIR=$(pwd)/../optee_os/optee2-rpi4/export-ta_arm64 + export TEEC_EXPORT=$(pwd)/../optee_client/out2-aarch64/export/usr/ + export OPTEE_CLIENT_EXPORT=$(pwd)/../optee_client/out2-aarch64/export/usr/ + rm -rf $(pwd)/out2-aarch64 + find . -name "Makefile" -exec sed -i "s/\-lteec/\-lteec2/g" {} + + find . -name "Makefile" -exec sed -i "s/optee_armtz/optee2_armtz/g" {} + + make clean + make -j`nproc` + ## undo changes + find . -name "Makefile" -exec sed -i "s/\-lteec2/\-lteec/g" {} + + find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + + mkdir -p to_buildroot-aarch64-2/lib/optee2_armtz + mkdir -p to_buildroot-aarch64-2/bin + cp out2-aarch64/*.ta to_buildroot-aarch64-2/lib/optee2_armtz + cp host/malicious_ca to_buildroot-aarch64-2/bin/malicious_ca2 + chmod +x to_buildroot-aarch64-2/bin/malicious_ca2 + cd $ROOT +} + +# Build CBA UA and TA +# (is similar to building any other TA) +# DIFFERENCE: The `make install` step isn't available, +# so all files must be copied to their respective locations manually! +step_7() { + [ "$BUILD_CBA" == "false" ] && return + + cd "$ROOT" + + cd 'cba_ta' + + BUILDROOT=$(pwd)/../buildroot/build-aarch64/ + export CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- + export HOST_CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- + export TA_CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- + export ARCH=aarch64 + export PLATFORM=plat-vexpress + export PLATFORM_FLAVOR=qemu_armv8a + export TA_DEV_KIT_DIR=$(pwd)/../optee_os_cba/optee-cba-rpi4/export-ta_arm64 + export TEEC_EXPORT=$(pwd)/../optee_client/out-aarch64/export/usr/ + export OPTEE_CLIENT_EXPORT=$(pwd)/../optee_client/out-aarch64/export/usr/ + export CFG_TA_OPTEE_CORE_API_COMPAT_1_1=y + export DESTDIR=./to_buildroot-aarch64-cba + export DEBUG=0 + export CFG_TEE_TA_LOG_LEVEL=0 + export CFLAGS=-O2 + export O=$(pwd)/out-cba-aarch64 + export CFG_PKCS11_TA=n + + rm -rf $O + rm -rf to_buildroot-aarch64-cba/ + find . -name "Makefile" -exec sed -i "s/\-lteec2$/\-lteec/g" {} + + find . -name "Makefile" -exec sed -i "s/\-lckteec2$/\-lckteec/g" {} + + find . -name "Makefile" -exec sed -i "s/optee2_armtz/optee_armtz/g" {} + + make clean + make -j$(nproc) + + mkdir -p to_buildroot-aarch64-cba/lib/optee_armtz + mkdir -p to_buildroot-aarch64-cba/bin + + cp out-cba-aarch64/*.ta to_buildroot-aarch64-cba/lib/optee_armtz + cp host/context_based_authentication_demo to_buildroot-aarch64-cba/bin + + cd "$ROOT" +} + +step_8() { + cd "$ROOT/security_test" + + OLD_CFLAGS=$CFLAGS + BUILDROOT=$ROOT/buildroot/build-aarch64 + export CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- + export DESTDIR=./to_buildroot-aarch64 + export O=$PWD/out-aarch64 + export TIME_SOURCE=perf + export ARCH=armv8 + export DEVICE_CONFIGURATION=rpi4 + export LLC_SIZE=0x100000 + unset CFLAGS + + cp "files/${DEVICE_CONFIGURATION}.h" armageddon/libflush/libflush/eviction/strategies/ + make clean || true + make -j"$(nproc)" + + export CFLAGS=$OLD_CFLAGS +} + +step_9() { + cd "$ROOT" + + # Call extra step to copy ".TA" files + extra_step_1 + + cd buildroot + + make O=build-aarch64/ -j`nproc` + + cd $ROOT +} + +step_10() { + cd "$ROOT" + + mkdir -p linux/build-aarch64/ + + if [ "$LOCAL_CONFS" = "false" ]; then + cp $LINUX_CONF_PATH $LINUX_LOCAL_CONF_PATH + fi + + cd linux + + make ARCH=arm64 O=build-aarch64 CROSS_COMPILE=`realpath ../buildroot/build-aarch64/host/bin/aarch64-linux-` -j16 Image dtbs + + cd $ROOT +} + +step_11() { + cd "$ROOT" + + dtc -I dts -O dtb $DTS_FILE > rpi4-ws/rpi4.dtb + cd lloader + + rm -f "$LINUX_TARGET.bin" + rm -f "$LINUX_TARGET.elf" + make \ + IMAGE=../linux/build-aarch64/arch/arm64/boot/Image \ + DTB=../rpi4-ws/rpi4.dtb \ + TARGET=$LINUX_TARGET.bin \ + CROSS_COMPILE=aarch64-none-elf- \ + ARCH=aarch64 + + cd $ROOT + + # Build memory separation app + extra_step_2 + + cd $ROOT +} + +set -e + +# Handle sysargs +for arg in "$@"; do + case "$arg" in + --all) + RUN_ALL=true + ;; + --local-confs) + LOCAL_CONFS=true + ;; + --steps=*) + STEP_RANGE="${arg#*=}" + ;; + --buildroot_conf=*) + BUILDROOT_CONF_PATH="${arg#*=}" + ;; + --linux_conf=*) + LINUX_CONF_PATH="${arg#*=}" + ;; + --dts=*) + DTS_FILE="${arg#*=}" + ;; + --linux-target=*) + LINUX_TARGET="${arg#*=}" + ;; + *) + echo "Unknown argument: $arg" + print_usage + ;; + esac +done + +# Parse params +if [ "$RUN_ALL" = true ]; then + STEP_START=0 + STEP_END=11 +elif [[ "$STEP_RANGE" =~ ^([0-9]+)-([0-9]+)$ ]]; then + STEP_START=${BASH_REMATCH[1]} + STEP_END=${BASH_REMATCH[2]} +else + print_usage +fi + +# Check for CBA: +config_path="" +if [ "${LOCAL_CONF:-}" = "true" ]; then + config_path="$BUILDROOT_LOCAL_CONF_PATH" +else + config_path="$BUILDROOT_CONF_PATH" +fi + +if grep -q "optee_os_cba" "$config_path" || grep -q "cba_ta" "$config_path"; then + BUILD_CBA="true" +else + BUILD_CBA="false" +fi + +# Run steps +for ((i=STEP_START; i<=STEP_END; i++)); do + step_name_var="STEP_${i}_NAME" + print_step_header "${!step_name_var}" + + "step_$i" +done + +echo "Done!" diff --git a/rpi4-ws/configs/rpi4-baremetal/config.c b/rpi4-ws/configs/rpi4-baremetal/config.c new file mode 100644 index 0000000..6f0fbef --- /dev/null +++ b/rpi4-ws/configs/rpi4-baremetal/config.c @@ -0,0 +1,142 @@ +#include + +VM_IMAGE(bare_image, "../memory-separation/kernel8.img"); + +struct vm_config bare = { + .image = { + .base_addr = 0x20200000, + .load_addr = VM_IMAGE_OFFSET(bare_image), + .size = VM_IMAGE_SIZE(bare_image), + }, + .entry = 0x20200000, + + .type = 0, + + .platform = { + .cpu_num = 1, + .region_num = 1, + .regions = (struct mem_region[]) { + { + .base = 0x20000000, + .size = 0x20000000, + .place_phys = true, + .phys = 0x20000000 + } + }, + .dev_num = 3, + .devs = (struct dev_region[]) { + { + .pa = 0xfc000000, + .va = 0xfc000000, + .size = 0x03000000, + + }, + { + .pa = 0x600000000, + .va = 0x600000000, + .size = 0x200000000, + + }, + { + /* Arch timer interrupt */ + .interrupt_num = 1, + .interrupts = (irqid_t[]) { 27 } + } + }, + .arch = { + .gic = { + .gicd_addr = 0xff841000, + .gicc_addr = 0xff842000, + } + } + } +}; + +// Linux Image +VM_IMAGE(linux_image, "../lloader/linux2-rpi4.bin"); + +// Linux VM configuration +struct vm_config linux = { + .image = { + .base_addr = 0x20200000, + .load_addr = VM_IMAGE_OFFSET(linux_image), + .size = VM_IMAGE_SIZE(linux_image), + }, + .entry = 0x20200000, + + .type = 0, + + .platform = { + .cpu_num = 1, + .region_num = 1, + .regions = (struct mem_region[]) { + { + .base = 0x20000000, + .size = 0x30000000, + .place_phys = true, + .phys = 0x40000000 + } + }, + .ipc_num = 1, + .ipcs = (struct ipc[]) { + { + .base = 0x08000000, + .size = 0x00200000, + .shmem_id = 0, + .interrupt_num = 1, + .interrupts = (irqid_t[]) { 0x14 + 32 }, + }, + }, + .dev_num = 4, + .devs = (struct dev_region[]) { + { + .pa = 0xfc000000, + .va = 0xfc000000, + .size = 0x03000000, + }, + { + .pa = 0x600000000, + .va = 0x600000000, + .size = 0x200000000, + + }, + { + .interrupt_num = 1, + .interrupts = (irqid_t[]) { + 0x79 + 32 // serial + } + }, + { + /* Arch timer interrupt */ + .interrupt_num = 2, + .interrupts = (irqid_t[]) { + 27, + 0x10 + 32, // PMU + } + } + }, + .arch = { + .gic = { + .gicd_addr = 0xff841000, + .gicc_addr = 0xff842000, + } + } + } +}; + +struct config config = { + CONFIG_HEADER + .shmemlist_size = 1, + .shmemlist = (struct shmem[]) { + [0] = { + .size = 0x00200000, + .place_phys = true, + .phys = 0x70000000, + }, + }, + .vmlist_size = 2, + .vmlist = { + &bare, + &linux, + } +}; diff --git a/rpi4-ws/configs/rpi4-minimal-2/config.c b/rpi4-ws/configs/rpi4-minimal-2/config.c new file mode 100644 index 0000000..58776d9 --- /dev/null +++ b/rpi4-ws/configs/rpi4-minimal-2/config.c @@ -0,0 +1,135 @@ +#include + +// Linux Image +VM_IMAGE(linux_image, "../lloader/linux-rpi4.bin"); + +// Linux VM configuration +struct vm_config linux = { + .image = { + .base_addr = 0x20200000, + .load_addr = VM_IMAGE_OFFSET(linux_image), + .size = VM_IMAGE_SIZE(linux_image), + }, + .entry = 0x20200000, + .colors = 0x1, + + .type = 0, + + .platform = { + .cpu_num = 1, + .region_num = 1, + .regions = (struct mem_region[]) { + { + .base = 0x20000000, + .size = 0x38000000, + } + }, + .dev_num = 4, + .devs = (struct dev_region[]) { + { + .pa = 0xfc000000, + .va = 0xfc000000, + .size = 0x03000000, + + }, + { + .pa = 0x600000000, + .va = 0x600000000, + .size = 0x200000000, + + }, + { + .interrupt_num = 1, + .interrupts = (irqid_t[]) { + 0x5d + 32 // serial + } + }, + { + /* Arch timer interrupt */ + .interrupt_num = 2, + .interrupts = (irqid_t[]) { + 27, + 0x10 + 32, // PMU + } + } + }, + .arch = { + .gic = { + .gicd_addr = 0xff841000, + .gicc_addr = 0xff842000, + } + } + } +}; + +// Linux Image +VM_IMAGE(linux_image2, "../lloader/linux2-rpi4.bin"); + +// Linux VM configuration +struct vm_config linux2 = { + .image = { + .base_addr = 0x20200000, + .load_addr = VM_IMAGE_OFFSET(linux_image2), + .size = VM_IMAGE_SIZE(linux_image2), + }, + .entry = 0x20200000, + .colors = 0x2, + + .type = 0, + + .platform = { + .cpu_num = 1, + .region_num = 1, + .regions = (struct mem_region[]) { + { + .base = 0x20000000, + .size = 0x38000000, + } + }, + .dev_num = 4, + .devs = (struct dev_region[]) { + { + .pa = 0xfc000000, + .va = 0xfc000000, + .size = 0x03000000, + + }, + { + .pa = 0x600000000, + .va = 0x600000000, + .size = 0x200000000, + }, + { + .interrupt_num = 1, + .interrupts = (irqid_t[]) { 0x79 + 32 } // serial + }, + { + /* Arch timer interrupt */ + .interrupt_num = 2, + .interrupts = (irqid_t[]) { + 27, + 0x15 + 32, // PMU + } + } + }, + .arch = { + .gic = { + .gicd_addr = 0xff841000, + .gicc_addr = 0xff842000, + } + } + } +}; + +struct config config = { + CONFIG_HEADER + .shmemlist_size = 1, + .shmemlist = (struct shmem[]) { + [0] = {.size = 0x00200000,}, + }, + .vmlist_size = 2, + .vmlist = { + &linux, + &linux2 + } +}; diff --git a/rpi4-ws/configs/rpi4-minimal/config.c b/rpi4-ws/configs/rpi4-minimal/config.c new file mode 100644 index 0000000..21dbc2f --- /dev/null +++ b/rpi4-ws/configs/rpi4-minimal/config.c @@ -0,0 +1,86 @@ +#include + +// Linux Image +VM_IMAGE(linux_image, "../lloader/linux-rpi4.bin"); + +// Linux VM configuration +struct vm_config linux = { + .image = { + .base_addr = 0x20200000, + .load_addr = VM_IMAGE_OFFSET(linux_image), + .size = VM_IMAGE_SIZE(linux_image), + }, + .entry = 0x20200000, + + .type = 0, + + .platform = { + .cpu_num = 1, + .region_num = 1, + .regions = (struct mem_region[]) { + { + .base = 0x20000000, + .size = 0x40000000, + .place_phys = true, + .phys = 0x20000000 + } + }, + .ipc_num = 1, + .ipcs = (struct ipc[]) { + { + .base = 0x08000000, + .size = 0x00200000, + .shmem_id = 0, + .interrupt_num = 1, + .interrupts = (irqid_t[]) { 0x14 + 32 }, + }, + }, + .dev_num = 4, + .devs = (struct dev_region[]) { + { + .pa = 0xfc000000, + .va = 0xfc000000, + .size = 0x03000000, + + }, + { + .pa = 0x600000000, + .va = 0x600000000, + .size = 0x200000000, + + }, + { + .interrupt_num = 1, + .interrupts = (irqid_t[]) { + 0x5d + 32 // serial + } + }, + { + /* Arch timer interrupt */ + .interrupt_num = 2, + .interrupts = (irqid_t[]) { + 27, + 0x10 + 32, // PMU + } + } + }, + .arch = { + .gic = { + .gicd_addr = 0xff841000, + .gicc_addr = 0xff842000, + } + } + } +}; + +struct config config = { + CONFIG_HEADER + .shmemlist_size = 1, + .shmemlist = (struct shmem[]) { + [0] = { .size = 0x00200000, }, + }, + .vmlist_size = 1, + .vmlist = { + &linux + } +}; diff --git a/rpi4-ws/configs/rpi4-per-vm-vTEE/config.c b/rpi4-ws/configs/rpi4-per-vm-vTEE/config.c new file mode 100644 index 0000000..936e8fb --- /dev/null +++ b/rpi4-ws/configs/rpi4-per-vm-vTEE/config.c @@ -0,0 +1,316 @@ +#include + +VM_IMAGE(host_linux_image, "../lloader/linux-rpi4.bin"); +VM_IMAGE(nexmon_image, "../nexmon/nexmon.bin"); +VM_IMAGE(optee_os_image, "../optee_os_cba/optee-cba-rpi4/core/tee-pager_v2.bin"); +VM_IMAGE(optee2_os_image, "../optee_os/optee2-rpi4/core/tee-pager_v2.bin"); + +/* Notes +CPU CORE ASSIGNMENT: 1,1,2,2 (host/optee_os1/nexmon/optee_os2) -> bitmap 0x8, 0x4, 0x3, 0xf +Please set the paths to the .bin files appropriately. +Memory layout: +- Nexmon is from 0x20000000 -> 0x60000000 (dts: thinks 0x20000000 as well) +- Host is from 0x60000000 -> 0xa0000000 (dts: thinks 0x60000000 as well) +- OPTEE_OS 1 is from 0x10100000 -> 0x11100000 +- OPTEE_OS 2 is from 0xb0100000 -> 0xb1100000 +*/ + +/* The VM with PKCS#11 TA */ +struct vm_config optee2_os = { + .image = { + .base_addr = 0xb0100000, + .load_addr = VM_IMAGE_OFFSET(optee2_os_image), + .size = VM_IMAGE_SIZE(optee2_os_image), + }, + .entry = 0xb0100000, + .cpu_affinity = 0xf, + + + .type = 2, + + .platform = { + .cpu_num = 1, + .region_num = 1, + .regions = (struct mem_region[]) { + { + .base = 0xb0000000, + .size = 0x00F00000, // 15 MB + .place_phys = true, + .phys = 0xb0000000 + } + }, + .ipc_num = 1, + .ipcs = (struct ipc[]) { + { + .base = 0xc8200000, + .size = 0x00200000, + .shmem_id = 2, + } + }, + .dev_num = 0, + .devs = (struct dev_region[]) { +/* { + .pa = 0xfe215000, + .va = 0xfe215000, + .size = 0x10000, + },*/ + }, + .arch = { + .gic = { + .gicc_addr = 0x8010000, + .gicd_addr = 0x8000000, + .gicr_addr = 0x80A0000, + } + } + }, +}; + + +// Linux VM configuration +struct vm_config host_linux = { + .image = { + .base_addr = 0x60200000, + .load_addr = VM_IMAGE_OFFSET(host_linux_image), + .size = VM_IMAGE_SIZE(host_linux_image), + }, + .entry = 0x60200000, + .cpu_affinity = 0x8, + + .type = 0, + + .children_num = 1, + .children = (struct vm_config*[]) { &optee2_os }, + + .platform = { + .cpu_num = 1, + .region_num = 1, + .regions = (struct mem_region[]) { + { + .base = 0x60000000, + .size = 0x40000000, + .place_phys = true, + .phys = 0x60000000 + } + }, + .ipc_num = 3, + .ipcs = (struct ipc[]) { + { + .base = 0x08000000, + .size = 0x00200000, + .shmem_id = 0, + }, + { + .base = 0x09000000, + .size = 0x00800000, + .shmem_id = 1, + }, + { + .base = 0xc8200000, + .size = 0x00200000, + .shmem_id = 2, + } + }, + .dev_num = 6, + .devs = (struct dev_region[]) { + { + .pa = 0xfc000000, + .va = 0xfc000000, + .size = 0x03000000 + }, + { // maybe needed for ethernet device communication due to scb + // device section + .pa = 0x600000000, + .va = 0x600000000, + .size = 0x40000000 + }, + { // ARCH timer interrupt + .interrupt_num = 1, + .interrupts = (irqid_t[]) { + 27 + } + }, + { // this is not the timer device but still necessary. + // (hardware-level) + .interrupt_num = 1, + .interrupts = (irqid_t[]) { + 32, + } + }, + { // arm-pmu (hardware-level) + .interrupt_num = 1, + .interrupts = (irqid_t[]) { + 53// or 48 (not based on which interrupt the + // device in the dts has set. But still the + // device's dts should have interrupts either + // 0x10 or 0x15 + } + }, + { // soc (mailbox, ethernet, serial(uart)) + .interrupt_num = 4, + .interrupts = (irqid_t[]) { + 66, + 189, 190, + 125, + } + }, + }, + .arch = { /* GLOBAL INTERRUPT CONTROLLER. Can be found under soc node + (with address translation keep in mind) */ + .gic = { + .gicd_addr = 0xff841000, + .gicc_addr = 0xff842000, + .gicr_addr = 0xff844000, /* <<< Based on some other + config somewhere this should + probably rather be gich_addr, + but leaving it like this also + works */ + } + } + } +}; + +struct vm_config nexmon_linux = { + .image = { + .base_addr = 0x20200000, + .load_addr = VM_IMAGE_OFFSET(nexmon_image), + .size = VM_IMAGE_SIZE(nexmon_image), + }, + .entry = 0x20200000, + .cpu_affinity = 0x3, + + .type = 0, + + .platform = { + .cpu_num = 2, + .region_num = 1, + .regions = (struct mem_region[]) { + { + .base = 0x20000000, + .size = 0x40000000, + .place_phys = true, + .phys = 0x20000000 + } + }, + .ipc_num = 1, + .ipcs = (struct ipc[]) { + { + .base = 0x09000000, + .size = 0x00800000, + .shmem_id = 1, + }, + }, + .dev_num = 4, + .devs = (struct dev_region[]) { + { + .pa = 0xfc000000, + .va = 0xfc000000, + .size = 0x03000000 + }, + { // ARCH timer interrupt + .interrupt_num = 1, + .interrupts = (irqid_t[]) { + 27 + } + }, + { // arm-pmu (hardware-level) + .interrupt_num = 1, + .interrupts = (irqid_t[]) { + 48// or 53 (same argumentation as above) + } + }, + { // soc (mailbox, wifi) + .interrupt_num = 2, + .interrupts = (irqid_t[]) { + 65, + 158, + } + }, + }, + .arch = { + .gic = { + .gicd_addr = 0xff841000, + .gicc_addr = 0xff842000, + .gicr_addr = 0xff844000, + } + } + } +}; + +struct vm_config optee_os = { + .image = { + .base_addr = 0x10100000, + .load_addr = VM_IMAGE_OFFSET(optee_os_image), + .size = VM_IMAGE_SIZE(optee_os_image), + }, + .entry = 0x10100000, + .cpu_affinity = 0x4, + + .type = 1, + + .children_num = 1, + .children = (struct vm_config*[]) { &host_linux }, + + .platform = { + .cpu_num = 1, + .region_num = 1, + .regions = (struct mem_region[]) { + { + .base = 0x10100000, + .size = 0x00F00000, // 15 MB + .place_phys = true, + .phys = 0x10100000 + } + }, + .ipc_num = 2, + .ipcs = (struct ipc[]) { + { + .base = 0x08000000, + .size = 0x00200000, + .shmem_id = 0, + }, + { + .base = 0x09000000, + .size = 0x00800000, + .shmem_id = 1, + } + }, + .dev_num = 0, + .devs = (struct dev_region[]) { +// { +// /* UART1 */ +// .pa = 0xfe215000, +// .va = 0xfe215000, +// .size = 0x1000, +// }, +// { +// /* Arch timer interrupt */ +// .interrupt_num = 1, +// .interrupts = (irqid_t[]) {27} +// } + }, + .arch = { + .gic = { + .gicd_addr = 0xff841000, + .gicc_addr = 0xff842000, + } + } + }, +}; + +struct config config = { + + CONFIG_HEADER + .shmemlist_size = 3, + .shmemlist = (struct shmem[]) { + [0] = { .size = 0x00200000, }, // OPTEE_OS 1 <-> Host + [1] = { .size = 0x00800000, }, // OPTEE_OS 1 <-> NEXMON + [2] = { .size = 0x00200000, } // OPTEE_OS 2 <-> Host + }, + .vmlist_size = 2, + .vmlist = { + &optee_os, + &nexmon_linux + } +}; + + diff --git a/rpi4-ws/configs/rpi4-single-vTEE/config.c b/rpi4-ws/configs/rpi4-single-vTEE/config.c index bd85e2c..991a266 100644 --- a/rpi4-ws/configs/rpi4-single-vTEE/config.c +++ b/rpi4-ws/configs/rpi4-single-vTEE/config.c @@ -33,7 +33,7 @@ struct vm_config linux = { .shmem_id = 0, }, }, - .dev_num = 4, + .dev_num = 5, .devs = (struct dev_region[]) { { .pa = 0xfc000000, @@ -48,7 +48,7 @@ struct vm_config linux = { }, { - .interrupt_num = 184, + .interrupt_num = 182, .interrupts = (irqid_t[]) { 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, @@ -59,7 +59,7 @@ struct vm_config linux = { 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 153, 154, 155, 156, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, @@ -67,6 +67,14 @@ struct vm_config linux = { 213, 214, 215, 216, } }, + { + /* Wired Network Device */ + .pa = 0x7d580000, // Physical address of the genet device + .va = 0x7d580000, // Virtual address for the VM + .size = 0x10000, // Size of the device memory region + .interrupt_num = 2, + .interrupts = (irqid_t[]) {157, 158} // Interrupts for the network device + }, { /* Arch timer interrupt */ .interrupt_num = 1, diff --git a/rpi4-ws/create_hyp_img.sh b/rpi4-ws/create_hyp_img.sh new file mode 100755 index 0000000..39083a6 --- /dev/null +++ b/rpi4-ws/create_hyp_img.sh @@ -0,0 +1,142 @@ +#!/bin/bash + +IMAGE=crosscon-demo-img.img +IMAGE_SIZE=512 +MOUNT_DIR=/media/root/boot +ROOT=$(git -C "$(dirname "$(realpath $0)")" rev-parse --show-toplevel) +CONFIG_REPO="$ROOT/rpi4-ws/configs" +CONFIG_NAME="rpi4-single-vTEE" +C_PATH="/work/gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf/bin:/work/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin:$PATH" + +# Function to clean up if script fails +cleanup() { + echo "# Detaching loop device" + umount "$MOUNT_DIR" 2>/dev/null || true + losetup -d "$LOOP_DEV" 2>/dev/null || true + echo "# Cleaning up, exiting..." + exit 1 +} + +# Patch hypervisor +patch() { + local CONFIG_REPO="$ROOT/rpi4-ws/configs" + + cd "$ROOT/CROSSCON-Hypervisor" + + # Check if patch is applied: https://stackoverflow.com/a/66755317 + set +e + git apply --check "$ROOT/rpi4-ws/patches/0001-armv8-aborts.c-add-printk-to-aborts_data_lower.patch" 2>/dev/null + git_check_apply=$? + git apply --reverse --check "$ROOT/rpi4-ws/patches/0001-armv8-aborts.c-add-printk-to-aborts_data_lower.patch" 2>/dev/null + git_check_reverse_apply=$? + set -e + + if [[ $git_check_apply -eq 0 && $git_check_reverse_apply -ne 0 ]]; then + git apply "$ROOT/rpi4-ws/patches/0001-armv8-aborts.c-add-printk-to-aborts_data_lower.patch" + elif [[ $git_check_apply -ne 0 && $git_check_reverse_apply -ne 0 ]]; then + echo "Can't apply patch" + exit 1 + fi + + cd "$ROOT" +} + + +# Exit on failure +set -e + +# Ensure cleanup happens if any command fails +trap cleanup ERR + +# Parse args +for arg in "$@"; do + case $arg in + --config=*) + CONFIG_NAME="${arg#*=}" + shift + ;; + *) + echo "Usage: $0 [--config=]" + echo " Default config: rpi4-single-vTEE" + exit 1 + ;; + esac +done + +# Patch hypervisor first +echo "# Checking if hypervisor needs patching" +patch + +# Change dir to root +cd $ROOT + +echo "# Creating empty image" +sudo -u "$SUDO_USER" dd if=/dev/zero of="$IMAGE" bs=1M count=$IMAGE_SIZE + +echo "# Associating the image with loop device" +LOOP_DEV=$(losetup --show -fP $IMAGE) +echo "# Loop device is $LOOP_DEV" + +echo "# Partitioning the image" +sfdisk "$LOOP_DEV" < +Date: Wed, 18 Jun 2025 12:46:22 +0200 +Subject: [PATCH] armv8: aborts.c: add printk to aborts_data_lower +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Michał Iwanicki +--- + src/arch/armv8/aborts.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/arch/armv8/aborts.c b/src/arch/armv8/aborts.c +index a7f5adccf741..294b010db403 100644 +--- a/src/arch/armv8/aborts.c ++++ b/src/arch/armv8/aborts.c +@@ -56,6 +56,9 @@ void aborts_data_lower(uint64_t iss, uint64_t far, uint64_t il) + + vaddr_t addr = far; + emul_handler_t handler = vm_emul_get_mem(cpu.vcpu->vm, addr); ++ if (addr <= 0xff000000) { ++ printk("CROSSCONHYP DATA ABORT: 0x%x\n", addr); ++ } + if (handler != NULL) { + struct emul_access emul; + emul.addr = addr; +-- +2.47.1 + diff --git a/rpi4-ws/patches/cmake/001-search-path.diff b/rpi4-ws/patches/cmake/001-search-path.diff new file mode 100644 index 0000000..04ab084 --- /dev/null +++ b/rpi4-ws/patches/cmake/001-search-path.diff @@ -0,0 +1,95 @@ +diff --git a/Modules/Platform/UnixPaths.cmake b/Modules/Platform/UnixPaths.cmake +index b9381c3d7d..5e944640b5 100644 +--- a/Modules/Platform/UnixPaths.cmake ++++ b/Modules/Platform/UnixPaths.cmake +@@ -26,9 +26,6 @@ get_filename_component(_CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR}" PATH) + # please make sure to keep Help/variable/CMAKE_SYSTEM_PREFIX_PATH.rst + # synchronized + list(APPEND CMAKE_SYSTEM_PREFIX_PATH +- # Standard +- /usr/local /usr / +- + # CMake install location + "${_CMAKE_INSTALL_DIR}" + ) +@@ -47,48 +44,49 @@ endif() + + # Non "standard" but common install prefixes + list(APPEND CMAKE_SYSTEM_PREFIX_PATH +- /usr/X11R6 +- /usr/pkg +- /opt + ) + + # List common include file locations not under the common prefixes. ++if(DEFINED ENV{NIX_CC} ++ AND IS_DIRECTORY "$ENV{NIX_CC}" ++ AND EXISTS "$ENV{NIX_CC}/nix-support/orig-libc" ++ AND EXISTS "$ENV{NIX_CC}/nix-support/orig-libc-dev") ++ file(STRINGS "$ENV{NIX_CC}/nix-support/orig-libc" _nix_cmake_libc) ++ file(STRINGS "$ENV{NIX_CC}/nix-support/orig-libc-dev" _nix_cmake_libc_dev) ++else() ++ set(_nix_cmake_libc @libc_lib@) ++ set(_nix_cmake_libc_dev @libc_dev@) ++endif() ++ + list(APPEND CMAKE_SYSTEM_INCLUDE_PATH +- # X11 +- /usr/include/X11 ++ "${_nix_cmake_libc_dev}/include" + ) + + list(APPEND CMAKE_SYSTEM_LIBRARY_PATH +- # X11 +- /usr/lib/X11 ++ "${_nix_cmake_libc}/lib" + ) + + list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES +- /lib /lib32 /lib64 /usr/lib /usr/lib32 /usr/lib64 ++ "${_nix_cmake_libc}/lib" + ) + +-if(CMAKE_SYSROOT_COMPILE) +- set(_cmake_sysroot_compile "${CMAKE_SYSROOT_COMPILE}") +-else() +- set(_cmake_sysroot_compile "${CMAKE_SYSROOT}") +-endif() +- + # Default per-language values. These may be later replaced after + # parsing the implicit directory information from compiler output. + set(_CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES_INIT + ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES} +- "${_cmake_sysroot_compile}/usr/include" ++ "${_nix_cmake_libc_dev}/include" + ) + set(_CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES_INIT + ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES} +- "${_cmake_sysroot_compile}/usr/include" ++ "${_nix_cmake_libc_dev}/include" + ) + set(_CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES_INIT + ${CMAKE_CUDA_IMPLICIT_INCLUDE_DIRECTORIES} +- "${_cmake_sysroot_compile}/usr/include" ++ "${_nix_cmake_libc_dev}/include" + ) + +-unset(_cmake_sysroot_compile) ++unset(_nix_cmake_libc) ++unset(_nix_cmake_libc_dev) + + # Reminder when adding new locations computed from environment variables + # please make sure to keep Help/variable/CMAKE_SYSTEM_PREFIX_PATH.rst +diff --git a/Modules/Platform/WindowsPaths.cmake b/Modules/Platform/WindowsPaths.cmake +index b9e2f17979..ab517cd4a7 100644 +--- a/Modules/Platform/WindowsPaths.cmake ++++ b/Modules/Platform/WindowsPaths.cmake +@@ -70,7 +70,7 @@ endif() + + if(CMAKE_CROSSCOMPILING AND NOT CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") + # MinGW (useful when cross compiling from linux with CMAKE_FIND_ROOT_PATH set) +- list(APPEND CMAKE_SYSTEM_PREFIX_PATH /) ++ # list(APPEND CMAKE_SYSTEM_PREFIX_PATH /) + endif() + + list(APPEND CMAKE_SYSTEM_INCLUDE_PATH diff --git a/rpi4-ws/patches/cmake/003-libuv-application-services.diff b/rpi4-ws/patches/cmake/003-libuv-application-services.diff new file mode 100644 index 0000000..6607a9c --- /dev/null +++ b/rpi4-ws/patches/cmake/003-libuv-application-services.diff @@ -0,0 +1,55 @@ +diff --git a/Utilities/cmlibuv/CMakeLists.txt b/Utilities/cmlibuv/CMakeLists.txt +index 7625cf65d9..167903e309 100644 +--- a/Utilities/cmlibuv/CMakeLists.txt ++++ b/Utilities/cmlibuv/CMakeLists.txt +@@ -193,6 +193,22 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + src/unix/kqueue.c + src/unix/proctitle.c + ) ++ ++ include(CheckIncludeFile) ++ ++ check_include_file("ApplicationServices/ApplicationServices.h" HAVE_ApplicationServices) ++ if (HAVE_ApplicationServices) ++ list(APPEND uv_defines ++ HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H=1 ++ ) ++ endif() ++ ++ check_include_file("CoreServices/CoreServices.h" HAVE_CoreServices) ++ if (HAVE_CoreServices) ++ list(APPEND uv_defines ++ HAVE_CORESERVICES_CORESERVICES_H=1 ++ ) ++ endif() + endif() + + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") +diff --git a/Utilities/cmlibuv/src/unix/fsevents.c b/Utilities/cmlibuv/src/unix/fsevents.c +index a51f29b3f6..3f6bf01968 100644 +--- a/Utilities/cmlibuv/src/unix/fsevents.c ++++ b/Utilities/cmlibuv/src/unix/fsevents.c +@@ -21,7 +21,7 @@ + #include "uv.h" + #include "internal.h" + +-#if TARGET_OS_IPHONE || MAC_OS_X_VERSION_MAX_ALLOWED < 1070 ++#if !HAVE_CORESERVICES_CORESERVICES_H || MAC_OS_X_VERSION_MAX_ALLOWED < 1070 + + /* iOS (currently) doesn't provide the FSEvents-API (nor CoreServices) */ + /* macOS prior to 10.7 doesn't provide the full FSEvents API so use kqueue */ +@@ -39,7 +39,7 @@ int uv__fsevents_close(uv_fs_event_t* handle) { + void uv__fsevents_loop_delete(uv_loop_t* loop) { + } + +-#else /* TARGET_OS_IPHONE */ ++#else /* !HAVE_CORESERVICES_CORESERVICES_H */ + + #include "darwin-stub.h" + +@@ -920,4 +920,4 @@ int uv__fsevents_close(uv_fs_event_t* handle) { + return 0; + } + +-#endif /* TARGET_OS_IPHONE */ ++#endif /* !HAVE_CORESERVICES_CORESERVICES_H */ diff --git a/rpi4-ws/patches/cmake/custom-application-services.patch b/rpi4-ws/patches/cmake/custom-application-services.patch new file mode 100644 index 0000000..7c77336 --- /dev/null +++ b/rpi4-ws/patches/cmake/custom-application-services.patch @@ -0,0 +1,43 @@ +diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt +index 9a18184fd3..278d146dd1 100644 +--- a/Source/CMakeLists.txt ++++ b/Source/CMakeLists.txt +@@ -933,7 +933,6 @@ endif() + # On Apple we need CoreFoundation and CoreServices + if(APPLE) + target_link_libraries(CMakeLib "-framework CoreFoundation") +- target_link_libraries(CMakeLib "-framework CoreServices") + endif() + + if(WIN32 AND NOT UNIX) +diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx +index 77403b076a..d5aac95e1e 100644 +--- a/Source/cmGlobalXCodeGenerator.cxx ++++ b/Source/cmGlobalXCodeGenerator.cxx +@@ -49,10 +49,6 @@ struct cmLinkImplementation; + + #if !defined(CMAKE_BOOTSTRAP) && defined(__APPLE__) + # include +-# if !TARGET_OS_IPHONE +-# define HAVE_APPLICATION_SERVICES +-# include +-# endif + #endif + + #if !defined(CMAKE_BOOTSTRAP) +diff --git a/Utilities/cmlibarchive/CMakeLists.txt b/Utilities/cmlibarchive/CMakeLists.txt +index 79452ffff6..a848731b7e 100644 +--- a/Utilities/cmlibarchive/CMakeLists.txt ++++ b/Utilities/cmlibarchive/CMakeLists.txt +@@ -2013,11 +2013,6 @@ IF(ENABLE_TEST) + ENDIF(ENABLE_TEST) + ENDIF() + +-# We need CoreServices on Mac OS. +-IF(APPLE) +- LIST(APPEND ADDITIONAL_LIBS "-framework CoreServices") +-ENDIF(APPLE) +- + add_subdirectory(libarchive) + IF(0) # CMake does not build libarchive's command-line tools. + add_subdirectory(cat) diff --git a/rpi4-ws/patches/dtc/dtc-patch.patch b/rpi4-ws/patches/dtc/dtc-patch.patch new file mode 100644 index 0000000..b677059 --- /dev/null +++ b/rpi4-ws/patches/dtc/dtc-patch.patch @@ -0,0 +1,28 @@ +diff --git a/Makefile b/Makefile +index e6b32cf1cbf5..c1dc04de7edc 100644 +--- a/Makefile ++++ b/Makefile +@@ -18,7 +18,8 @@ CONFIG_LOCALVERSION = + CPPFLAGS = -I libfdt -I . + WARNINGS = -Wall -Wpointer-arith -Wcast-qual -Wnested-externs \ + -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls -Wshadow +-CFLAGS = -g -Os $(SHAREDLIB_CFLAGS) -Werror $(WARNINGS) ++CFLAGS = -g -Os $(SHAREDLIB_CFLAGS) $(WARNINGS) ++ + + BISON = bison + LEX = flex +diff --git a/dtc-lexer.l b/dtc-lexer.l +index 06c040902444..b5b1443f171d 100644 +--- a/dtc-lexer.l ++++ b/dtc-lexer.l +@@ -38,7 +38,8 @@ LINECOMMENT "//".*\n + #include "srcpos.h" + #include "dtc-parser.tab.h" + +-YYLTYPE yylloc; ++#define YYLTYPE_IS_DECLARED 1 ++ + extern bool treesource_error; + + /* CAUTION: this will stop working if we ever use yyless() or yyunput() */ diff --git a/rpi4-ws/rpi4-host-linux.dts b/rpi4-ws/rpi4-host-linux.dts new file mode 100644 index 0000000..16dce7e --- /dev/null +++ b/rpi4-ws/rpi4-host-linux.dts @@ -0,0 +1,431 @@ +/dts-v1/; + +/memreserve/ 0x0000000000000000 0x0000000000001000; +/ { + compatible = "raspberrypi,4-model-b\0brcm,bcm2711"; + model = "Raspberry Pi 4 Model B"; + #address-cells = <0x02>; + #size-cells = <0x01>; + interrupt-parent = <0x01>; + + aliases { + serial1 = "/soc/serial@7e215040"; + ethernet0 = "/scb/ethernet@7d580000"; + }; + + chosen { + stdout-path = "serial1:115200n8"; + bootargs = "earlycon clk_ignore_unused ip=192.168.42.15 carrier_timeout=0"; + }; + + reserved-memory { + #address-cells = <0x02>; + #size-cells = <0x01>; + ranges; + + linux,cma { + compatible = "shared-dma-pool"; + size = <0x10000000>; + reusable; + linux,cma-default; + alloc-ranges = <0x00 0x00 0x40000000>; + }; + }; + + thermal-zones { + + cpu-thermal { + polling-delay-passive = <0x00>; + polling-delay = <0x3e8>; + coefficients = <0xfffffe19 0x641b8>; + thermal-sensors = <0x02>; + + trips { + + cpu-crit { + temperature = <0x15f90>; + hysteresis = <0x00>; + type = "critical"; + }; + }; + + cooling-maps { + }; + }; + }; + + soc { + compatible = "simple-bus"; + #address-cells = <0x01>; + #size-cells = <0x01>; + ranges = <0x7e000000 0x00 0xfe000000 0x1800000 0x7c000000 0x00 0xfc000000 0x2000000 0x40000000 0x00 0xff800000 0x800000>; + dma-ranges = <0xc0000000 0x00 0x00 0x40000000>; + + cprman@7e101000 { + compatible = "brcm,bcm2711-cprman"; + #clock-cells = <0x01>; + reg = <0x7e101000 0x2000>; + clocks = <0x03 0x04 0x00 0x04 0x01 0x04 0x02 0x05 0x00 0x05 0x01 0x05 0x02>; + phandle = <0x06>; + }; + + mailbox@7e00b840 { + compatible = "brcm,bcm2835-vchiq"; + reg = <0x7e00b840 0x3c>; + interrupts = <0x00 0x22 0x04>; + }; + + + gpio@7e200000 { + compatible = "brcm,bcm2711-gpio"; + reg = <0x7e200000 0xb4>; + gpio-controller; + #gpio-cells = <0x02>; + interrupt-controller; + #interrupt-cells = <0x02>; + pinctrl-names = "default"; + gpio-line-names = "ID_SDA\0ID_SCL\0SDA1\0SCL1\0GPIO_GCLK\0GPIO5\0GPIO6\0SPI_CE1_N\0SPI_CE0_N\0SPI_MISO\0SPI_MOSI\0SPI_SCLK\0GPIO12\0GPIO13\0TXD1\0RXD1\0GPIO16\0GPIO17\0GPIO18\0GPIO19\0GPIO20\0GPIO21\0GPIO22\0GPIO23\0GPIO24\0GPIO25\0GPIO26\0GPIO27\0RGMII_MDIO\0RGMIO_MDC\0CTS0\0RTS0\0TXD0\0RXD0\0SD1_CLK\0SD1_CMD\0SD1_DATA0\0SD1_DATA1\0SD1_DATA2\0SD1_DATA3\0PWM0_MISO\0PWM1_MOSI\0STATUS_LED_G_CLK\0SPIFLASH_CE_N\0SDA0\0SCL0\0RGMII_RXCLK\0RGMII_RXCTL\0RGMII_RXD0\0RGMII_RXD1\0RGMII_RXD2\0RGMII_RXD3\0RGMII_TXCLK\0RGMII_TXCTL\0RGMII_TXD0\0RGMII_TXD1\0RGMII_TXD2\0RGMII_TXD3"; + phandle = <0x24>; + + uart0_gpio14 { + brcm,pins = <0x0e 0x0f>; + brcm,function = <0x04>; + }; + + uart0_ctsrts_gpio16 { + brcm,pins = <0x10 0x11>; + brcm,function = <0x07>; + }; + + uart0_ctsrts_gpio30 { + brcm,pins = <0x1e 0x1f>; + brcm,function = <0x07>; + brcm,pull = <0x02 0x00>; + phandle = <0x07>; + }; + + uart0_gpio32 { + brcm,pins = <0x20 0x21>; + brcm,function = <0x07>; + brcm,pull = <0x00 0x02>; + phandle = <0x08>; + }; + + uart0_gpio36 { + brcm,pins = <0x24 0x25>; + brcm,function = <0x06>; + }; + + uart0_ctsrts_gpio38 { + brcm,pins = <0x26 0x27>; + brcm,function = <0x06>; + }; + + uart1_gpio14 { + brcm,pins = <0x0e 0x0f>; + brcm,function = <0x02>; + phandle = <0x0d>; + }; + + uart1_ctsrts_gpio16 { + brcm,pins = <0x10 0x11>; + brcm,function = <0x02>; + }; + + uart1_gpio32 { + brcm,pins = <0x20 0x21>; + brcm,function = <0x02>; + }; + + uart1_ctsrts_gpio30 { + brcm,pins = <0x1e 0x1f>; + brcm,function = <0x02>; + }; + + uart1_gpio40 { + brcm,pins = <0x28 0x29>; + brcm,function = <0x02>; + }; + + uart1_ctsrts_gpio42 { + brcm,pins = <0x2a 0x2b>; + brcm,function = <0x02>; + }; + + }; + + aux@7e215000 { + compatible = "brcm,bcm2835-aux"; + #clock-cells = <0x01>; + reg = <0x7e215000 0x08>; + clocks = <0x06 0x14>; + phandle = <0x0c>; + }; + + serial@7e215040 { + compatible = "brcm,bcm2835-aux-uart"; + reg = <0x7e215040 0x40>; + interrupts = <0x00 0x5d 0x04>; + clocks = <0x0c 0x00>; + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <0x0d>; + }; + + + local_intc@40000000 { + compatible = "brcm,bcm2836-l1-intc"; + reg = <0x40000000 0x100>; + }; + + interrupt-controller@40041000 { + interrupt-controller; + #interrupt-cells = <0x03>; + compatible = "arm,gic-400"; + reg = <0x40041000 0x1000 0x40042000 0x2000 0x40044000 0x2000 0x40046000 0x2000>; + interrupts = <0x01 0x09 0xf04>; + phandle = <0x01>; + }; + + avs-monitor@7d5d2000 { + compatible = "brcm,bcm2711-avs-monitor\0syscon\0simple-mfd"; + reg = <0x7d5d2000 0xf00>; + + thermal { + compatible = "brcm,bcm2711-thermal"; + #thermal-sensor-cells = <0x00>; + phandle = <0x02>; + }; + }; + + dma@7e007000 { + compatible = "brcm,bcm2835-dma"; + reg = <0x7e007000 0xb00>; + interrupts = <0x00 0x50 0x04 0x00 0x51 0x04 0x00 0x52 0x04>; + interrupt-names = "dma0\0dma1\0dma2\0dma3\0dma4\0dma5\0dma6\0dma7\0dma8\0dma9\0dma10"; + #dma-cells = <0x01>; + brcm,dma-channel-mask = <0x7f5>; + phandle = <0x19>; + }; + + watchdog@7e100000 { + compatible = "brcm,bcm2835-pm\0brcm,bcm2835-pm-wdt"; + #power-domain-cells = <0x01>; + #reset-cells = <0x01>; + reg = <0x7e100000 0x114 0x7e00a000 0x24 0x7ec11000 0x20>; + clocks = <0x06 0x15 0x06 0x1d 0x06 0x17 0x06 0x16>; + clock-names = "v3d\0peri_image\0h264\0isp"; + system-power-controller; + }; + + rng@7e104000 { + compatible = "brcm,bcm2711-rng200"; + reg = <0x7e104000 0x28>; + }; + + + clock@7ef00000 { + compatible = "brcm,brcm2711-dvp"; + reg = <0x7ef00000 0x10>; + clocks = <0x16>; + #clock-cells = <0x01>; + #reset-cells = <0x01>; + phandle = <0x17>; + }; + + + firmware { + compatible = "raspberrypi,bcm2835-firmware\0simple-mfd"; + #address-cells = <0x01>; + #size-cells = <0x01>; + mboxes = <0x1c>; + dma-ranges; + phandle = <0x1d>; + + clocks { + compatible = "raspberrypi,firmware-clocks"; + #clock-cells = <0x01>; + phandle = <0x10>; + }; + + gpio { + compatible = "raspberrypi,firmware-gpio"; + gpio-controller; + #gpio-cells = <0x02>; + gpio-line-names = "BT_ON\0WL_ON\0PWR_LED_OFF\0GLOBAL_RESET\0VDD_SD_IO_SEL\0CAM_GPIO\0SD_PWR_ON\0"; + status = "okay"; + phandle = <0x09>; + }; + + reset { + compatible = "raspberrypi,firmware-reset"; + #reset-cells = <0x01>; + phandle = <0x22>; + }; + + optee { + compatible = "linaro,optee-tz"; + method = "smc"; + }; + + optee2 { + compatible = "crosscon,optee2-tz"; + method = "smc"; + }; + }; + + power { + compatible = "raspberrypi,bcm2835-power"; + firmware = <0x1d>; + #power-domain-cells = <0x01>; + phandle = <0x0b>; + }; + + + }; + + clocks { + + clk-osc { + compatible = "fixed-clock"; + #clock-cells = <0x00>; + clock-output-names = "osc"; + clock-frequency = <0x337f980>; + phandle = <0x03>; + }; + + clk-usb { + compatible = "fixed-clock"; + #clock-cells = <0x00>; + clock-output-names = "otg"; + clock-frequency = <0x1c9c3800>; + phandle = <0x12>; + }; + }; + + + clk-27M { + #clock-cells = <0x00>; + compatible = "fixed-clock"; + clock-frequency = <0x19bfcc0>; + clock-output-names = "27MHz-clock"; + phandle = <0x1a>; + }; + + clk-108M { + #clock-cells = <0x00>; + compatible = "fixed-clock"; + clock-frequency = <0x66ff300>; + clock-output-names = "108MHz-clock"; + phandle = <0x16>; + }; + + + scb { + compatible = "simple-bus"; + #address-cells = <0x02>; + #size-cells = <0x01>; + ranges = <0x00 0x7c000000 0x00 0xfc000000 0x3800000 0x06 0x00 0x06 0x00 0x40000000>; + + ethernet@7d580000 { + compatible = "brcm,bcm2711-genet-v5"; + reg = <0x00 0x7d580000 0x10000>; + #address-cells = <0x01>; + #size-cells = <0x01>; + interrupts = <0x00 0x9d 0x04 0x00 0x9e 0x04>; + status = "okay"; + phy-handle = <0x23>; + phy-mode = "rgmii-rxid"; + + mdio@e14 { + compatible = "brcm,genet-mdio-v5"; + reg = <0xe14 0x08>; + reg-names = "mdio"; + #address-cells = <0x00>; + #size-cells = <0x01>; + + ethernet-phy@1 { + reg = <0x01>; + phandle = <0x23>; + }; + }; + }; + }; + + arm-pmu { + compatible = "arm,cortex-a72-pmu\0arm,armv8-pmuv3"; + interrupts = <0x00 0x15 0x04>; + interrupt-affinity = <0x20>; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <0x01 0x0d 0xf08 0x01 0x0e 0xf08 0x01 0x0b 0xf08 0x01 0x0a 0xf08>; + arm,cpu-registers-not-fw-configured; + }; + + cpus { + #address-cells = <0x01>; + #size-cells = <0x00>; + enable-method = "brcm,bcm2836-smp"; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a72"; + reg = <0x00>; + enable-method = "spin-table"; + cpu-release-addr = <0x00 0xd8>; + phandle = <0x20>; + }; + }; + + + + leds { + compatible = "gpio-leds"; + + act { + label = "ACT"; + default-state = "keep"; + linux,default-trigger = "heartbeat"; + gpios = <0x24 0x2a 0x00>; + }; + + pwr { + label = "PWR"; + gpios = <0x09 0x02 0x01>; + default-state = "keep"; + linux,default-trigger = "default-on"; + }; + }; + + memory@60000000 { + reg = <0x00 0x60000000 0x40000000>; + device_type = "memory"; + }; + + sd_io_1v8_reg { + compatible = "regulator-gpio"; + regulator-name = "vdd-sd-io"; + regulator-min-microvolt = <0x1b7740>; + regulator-max-microvolt = <0x325aa0>; + regulator-boot-on; + regulator-always-on; + regulator-settling-time-us = <0x1388>; + gpios = <0x09 0x04 0x00>; + states = <0x1b7740 0x01 0x325aa0 0x00>; + status = "okay"; + phandle = <0x1e>; + }; + + sd_vcc_reg { + compatible = "regulator-fixed"; + regulator-name = "vcc-sd"; + regulator-min-microvolt = <0x325aa0>; + regulator-max-microvolt = <0x325aa0>; + regulator-boot-on; + enable-active-high; + gpio = <0x09 0x06 0x00>; + phandle = <0x1f>; + }; +}; diff --git a/rpi4-ws/rpi4-minimal.dts b/rpi4-ws/rpi4-minimal.dts new file mode 100644 index 0000000..a430616 --- /dev/null +++ b/rpi4-ws/rpi4-minimal.dts @@ -0,0 +1,463 @@ +/dts-v1/; + +/memreserve/ 0x0000000000000000 0x0000000000001000; +/ { + compatible = "raspberrypi,4-model-b\0brcm,bcm2711"; + model = "Raspberry Pi 4 Model B"; + #address-cells = <0x02>; + #size-cells = <0x01>; + interrupt-parent = <0x01>; + + aliases { + serial1 = "/soc/serial@7e215040"; + }; + + chosen { + stdout-path = "serial1:115200n8"; + bootargs = "earlycon clk_ignore_unused ip=192.168.42.15 carrier_timeout=0"; + }; + + reserved-memory { + #address-cells = <0x02>; + #size-cells = <0x01>; + ranges; + + linux,cma { + compatible = "shared-dma-pool"; + size = <0x10000000>; + reusable; + linux,cma-default; + alloc-ranges = <0x00 0x00 0x40000000>; + }; + }; + + arm-pmu { + compatible = "arm,cortex-a72-pmu\0arm,armv8-pmuv3"; + interrupts = <0x00 0x10 0x04>; + }; + + thermal-zones { + + cpu-thermal { + polling-delay-passive = <0x00>; + polling-delay = <0x3e8>; + coefficients = <0xfffffe19 0x641b8>; + thermal-sensors = <0x02>; + + trips { + + cpu-crit { + temperature = <0x15f90>; + hysteresis = <0x00>; + type = "critical"; + }; + }; + + cooling-maps { + }; + }; + }; + + soc { + compatible = "simple-bus"; + #address-cells = <0x01>; + #size-cells = <0x01>; + ranges = <0x7e000000 0x00 0xfe000000 0x1800000 0x7c000000 0x00 0xfc000000 0x2000000 0x40000000 0x00 0xff800000 0x800000>; + dma-ranges = <0xc0000000 0x00 0x00 0x40000000>; + + timer@7e003000 { + compatible = "brcm,bcm2835-system-timer"; + reg = <0x7e003000 0x1000>; + interrupts = <0x00 0x40 0x04 0x00 0x41 0x04 0x00 0x42 0x04 0x00 0x43 0x04>; + clock-frequency = <0xf4240>; + }; + + cprman@7e101000 { + compatible = "brcm,bcm2711-cprman"; + #clock-cells = <0x01>; + reg = <0x7e101000 0x2000>; + clocks = <0x03 0x04 0x00 0x04 0x01 0x04 0x02 0x05 0x00 0x05 0x01 0x05 0x02>; + phandle = <0x06>; + }; + + gpio@7e200000 { + compatible = "brcm,bcm2711-gpio"; + reg = <0x7e200000 0xb4>; + interrupts = <0x00 0x71 0x04 0x00 0x72 0x04 0x00 0x73 0x04 0x00 0x74 0x04>; + gpio-controller; + #gpio-cells = <0x02>; + interrupt-controller; + #interrupt-cells = <0x02>; + pinctrl-names = "default"; + gpio-line-names = "ID_SDA\0ID_SCL\0SDA1\0SCL1\0GPIO_GCLK\0GPIO5\0GPIO6\0SPI_CE1_N\0SPI_CE0_N\0SPI_MISO\0SPI_MOSI\0SPI_SCLK\0GPIO12\0GPIO13\0TXD1\0RXD1\0GPIO16\0GPIO17\0GPIO18\0GPIO19\0GPIO20\0GPIO21\0GPIO22\0GPIO23\0GPIO24\0GPIO25\0GPIO26\0GPIO27\0RGMII_MDIO\0RGMIO_MDC\0CTS0\0RTS0\0TXD0\0RXD0\0SD1_CLK\0SD1_CMD\0SD1_DATA0\0SD1_DATA1\0SD1_DATA2\0SD1_DATA3\0PWM0_MISO\0PWM1_MOSI\0STATUS_LED_G_CLK\0SPIFLASH_CE_N\0SDA0\0SCL0\0RGMII_RXCLK\0RGMII_RXCTL\0RGMII_RXD0\0RGMII_RXD1\0RGMII_RXD2\0RGMII_RXD3\0RGMII_TXCLK\0RGMII_TXCTL\0RGMII_TXD0\0RGMII_TXD1\0RGMII_TXD2\0RGMII_TXD3"; + phandle = <0x24>; + + dpi_gpio0 { + brcm,pins = <0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b>; + brcm,function = <0x06>; + }; + + emmc_gpio22 { + brcm,pins = <0x16 0x17 0x18 0x19 0x1a 0x1b>; + brcm,function = <0x07>; + }; + + emmc_gpio34 { + brcm,pins = <0x22 0x23 0x24 0x25 0x26 0x27>; + brcm,function = <0x07>; + brcm,pull = <0x00 0x02 0x02 0x02 0x02 0x02>; + phandle = <0x0e>; + }; + + emmc_gpio48 { + brcm,pins = <0x30 0x31 0x32 0x33 0x34 0x35>; + brcm,function = <0x07>; + }; + + gpclk0_gpio4 { + brcm,pins = <0x04>; + brcm,function = <0x04>; + }; + + gpclk1_gpio5 { + brcm,pins = <0x05>; + brcm,function = <0x04>; + }; + + gpclk1_gpio42 { + brcm,pins = <0x2a>; + brcm,function = <0x04>; + }; + + gpclk1_gpio44 { + brcm,pins = <0x2c>; + brcm,function = <0x04>; + }; + + gpclk2_gpio6 { + brcm,pins = <0x06>; + brcm,function = <0x04>; + }; + + gpclk2_gpio43 { + brcm,pins = <0x2b>; + brcm,function = <0x04>; + brcm,pull = <0x00>; + }; + + pcm_gpio18 { + brcm,pins = <0x12 0x13 0x14 0x15>; + brcm,function = <0x04>; + }; + + pcm_gpio28 { + brcm,pins = <0x1c 0x1d 0x1e 0x1f>; + brcm,function = <0x06>; + }; + + sdhost_gpio48 { + brcm,pins = <0x30 0x31 0x32 0x33 0x34 0x35>; + brcm,function = <0x04>; + }; + + uart0_gpio14 { + brcm,pins = <0x0e 0x0f>; + brcm,function = <0x04>; + }; + + uart0_ctsrts_gpio16 { + brcm,pins = <0x10 0x11>; + brcm,function = <0x07>; + }; + + uart0_ctsrts_gpio30 { + brcm,pins = <0x1e 0x1f>; + brcm,function = <0x07>; + brcm,pull = <0x02 0x00>; + phandle = <0x07>; + }; + + uart0_gpio32 { + brcm,pins = <0x20 0x21>; + brcm,function = <0x07>; + brcm,pull = <0x00 0x02>; + phandle = <0x08>; + }; + + uart0_gpio36 { + brcm,pins = <0x24 0x25>; + brcm,function = <0x06>; + }; + + uart0_ctsrts_gpio38 { + brcm,pins = <0x26 0x27>; + brcm,function = <0x06>; + }; + + uart1_gpio14 { + brcm,pins = <0x0e 0x0f>; + brcm,function = <0x02>; + phandle = <0x0d>; + }; + + uart1_ctsrts_gpio16 { + brcm,pins = <0x10 0x11>; + brcm,function = <0x02>; + }; + + uart1_gpio32 { + brcm,pins = <0x20 0x21>; + brcm,function = <0x02>; + }; + + uart1_ctsrts_gpio30 { + brcm,pins = <0x1e 0x1f>; + brcm,function = <0x02>; + }; + + uart1_gpio40 { + brcm,pins = <0x28 0x29>; + brcm,function = <0x02>; + }; + + uart1_ctsrts_gpio42 { + brcm,pins = <0x2a 0x2b>; + brcm,function = <0x02>; + }; + + gpclk0_gpio49 { + + pin-gpclk { + pins = "gpio49"; + function = "alt1"; + bias-disable; + }; + }; + + gpclk1_gpio50 { + + pin-gpclk { + pins = "gpio50"; + function = "alt1"; + bias-disable; + }; + }; + + gpclk2_gpio51 { + + pin-gpclk { + pins = "gpio51"; + function = "alt1"; + bias-disable; + }; + }; + + pcm_gpio50 { + + pins-pcm { + pins = "gpio50\0gpio51\0gpio52\0gpio53"; + function = "alt2"; + }; + }; + + gpioout { + brcm,pins = <0x06>; + brcm,function = <0x01>; + }; + + alt0 { + brcm,pins = <0x04 0x05 0x07 0x08 0x09 0x0a 0x0b>; + brcm,function = <0x04>; + }; + }; + + aux@7e215000 { + compatible = "brcm,bcm2835-aux"; + #clock-cells = <0x01>; + reg = <0x7e215000 0x08>; + clocks = <0x06 0x14>; + phandle = <0x0c>; + }; + + serial@7e215040 { + compatible = "brcm,bcm2835-aux-uart"; + reg = <0x7e215040 0x40>; + interrupts = <0x00 0x5d 0x04>; + clocks = <0x0c 0x00>; + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <0x0d>; + }; + + local_intc@40000000 { + compatible = "brcm,bcm2836-l1-intc"; + reg = <0x40000000 0x100>; + }; + + interrupt-controller@40041000 { + interrupt-controller; + #interrupt-cells = <0x03>; + compatible = "arm,gic-400"; + reg = <0x40041000 0x1000 0x40042000 0x2000 0x40044000 0x2000 0x40046000 0x2000>; + interrupts = <0x01 0x09 0xf04>; + phandle = <0x01>; + }; + + watchdog@7e100000 { + compatible = "brcm,bcm2835-pm\0brcm,bcm2835-pm-wdt"; + #power-domain-cells = <0x01>; + #reset-cells = <0x01>; + reg = <0x7e100000 0x114 0x7e00a000 0x24 0x7ec11000 0x20>; + clocks = <0x06 0x15 0x06 0x1d 0x06 0x17 0x06 0x16>; + clock-names = "v3d\0peri_image\0h264\0isp"; + system-power-controller; + }; + + rng@7e104000 { + compatible = "brcm,bcm2711-rng200"; + reg = <0x7e104000 0x28>; + }; + + clock@7ef00000 { + compatible = "brcm,brcm2711-dvp"; + reg = <0x7ef00000 0x10>; + clocks = <0x16>; + #clock-cells = <0x01>; + #reset-cells = <0x01>; + phandle = <0x17>; + }; + + firmware { + compatible = "raspberrypi,bcm2835-firmware\0simple-mfd"; + #address-cells = <0x01>; + #size-cells = <0x01>; + mboxes = <0x1c>; + dma-ranges; + phandle = <0x1d>; + + clocks { + compatible = "raspberrypi,firmware-clocks"; + #clock-cells = <0x01>; + phandle = <0x10>; + }; + + gpio { + compatible = "raspberrypi,firmware-gpio"; + gpio-controller; + #gpio-cells = <0x02>; + gpio-line-names = "BT_ON\0WL_ON\0PWR_LED_OFF\0GLOBAL_RESET\0VDD_SD_IO_SEL\0CAM_GPIO\0SD_PWR_ON\0"; + status = "okay"; + phandle = <0x09>; + }; + + reset { + compatible = "raspberrypi,firmware-reset"; + #reset-cells = <0x01>; + phandle = <0x22>; + }; + }; + + power { + compatible = "raspberrypi,bcm2835-power"; + firmware = <0x1d>; + #power-domain-cells = <0x01>; + phandle = <0x0b>; + }; + }; + + clocks { + clk-osc { + compatible = "fixed-clock"; + #clock-cells = <0x00>; + clock-output-names = "osc"; + clock-frequency = <0x337f980>; + phandle = <0x03>; + }; + }; + + clk-27M { + #clock-cells = <0x00>; + compatible = "fixed-clock"; + clock-frequency = <0x19bfcc0>; + clock-output-names = "27MHz-clock"; + phandle = <0x1a>; + }; + + clk-108M { + #clock-cells = <0x00>; + compatible = "fixed-clock"; + clock-frequency = <0x66ff300>; + clock-output-names = "108MHz-clock"; + phandle = <0x16>; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <0x01 0x0d 0xf08 0x01 0x0e 0xf08 0x01 0x0b 0xf08 0x01 0x0a 0xf08>; + arm,cpu-registers-not-fw-configured; + }; + + cpus { + #address-cells = <0x01>; + #size-cells = <0x00>; + enable-method = "brcm,bcm2836-smp"; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a72"; + reg = <0x00>; + enable-method = "spin-table"; + cpu-release-addr = <0x00 0xd8>; + phandle = <0x20>; + }; + }; + + leds { + compatible = "gpio-leds"; + + act { + label = "ACT"; + default-state = "keep"; + linux,default-trigger = "heartbeat"; + gpios = <0x24 0x2a 0x00>; + }; + + pwr { + label = "PWR"; + gpios = <0x09 0x02 0x01>; + default-state = "keep"; + linux,default-trigger = "default-on"; + }; + }; + + memory@20000000 { + // trying to use whole memory assigned to VM results in VM crashing + reg = <0x00 0x20000000 0x20000000>; + device_type = "memory"; + }; + + sd_io_1v8_reg { + compatible = "regulator-gpio"; + regulator-name = "vdd-sd-io"; + regulator-min-microvolt = <0x1b7740>; + regulator-max-microvolt = <0x325aa0>; + regulator-boot-on; + regulator-always-on; + regulator-settling-time-us = <0x1388>; + gpios = <0x09 0x04 0x00>; + states = <0x1b7740 0x01 0x325aa0 0x00>; + status = "okay"; + phandle = <0x1e>; + }; + + sd_vcc_reg { + compatible = "regulator-fixed"; + regulator-name = "vcc-sd"; + regulator-min-microvolt = <0x325aa0>; + regulator-max-microvolt = <0x325aa0>; + regulator-boot-on; + enable-active-high; + gpio = <0x09 0x06 0x00>; + phandle = <0x1f>; + }; +}; diff --git a/rpi4-ws/rpi4-minimal2.dts b/rpi4-ws/rpi4-minimal2.dts new file mode 100644 index 0000000..19337fd --- /dev/null +++ b/rpi4-ws/rpi4-minimal2.dts @@ -0,0 +1,482 @@ +/dts-v1/; + +/memreserve/ 0x0000000000000000 0x0000000000001000; +/ { + compatible = "raspberrypi,4-model-b\0brcm,bcm2711"; + model = "Raspberry Pi 4 Model B"; + #address-cells = <0x02>; + #size-cells = <0x01>; + interrupt-parent = <0x01>; + + aliases { + serial1 = "/soc/serial@7e215040"; + serial3 = "/soc/serial@7e201600"; + }; + + chosen { + stdout-path = "serial3:115200n8"; + bootargs = "clk_ignore_unused ip=192.168.42.15 carrier_timeout=0 console=ttyAMA3,115200"; + }; + + reserved-memory { + #address-cells = <0x02>; + #size-cells = <0x01>; + ranges; + + linux,cma { + compatible = "shared-dma-pool"; + size = <0x10000000>; + reusable; + linux,cma-default; + alloc-ranges = <0x00 0x00 0x40000000>; + }; + }; + + arm-pmu { + compatible = "arm,cortex-a72-pmu\0arm,armv8-pmuv3"; + interrupts = <0x00 0x15 0x04>; + }; + + thermal-zones { + + cpu-thermal { + polling-delay-passive = <0x00>; + polling-delay = <0x3e8>; + coefficients = <0xfffffe19 0x641b8>; + thermal-sensors = <0x02>; + + trips { + + cpu-crit { + temperature = <0x15f90>; + hysteresis = <0x00>; + type = "critical"; + }; + }; + + cooling-maps { + }; + }; + }; + + soc { + compatible = "simple-bus"; + #address-cells = <0x01>; + #size-cells = <0x01>; + ranges = <0x7e000000 0x00 0xfe000000 0x1800000 0x7c000000 0x00 0xfc000000 0x2000000 0x40000000 0x00 0xff800000 0x800000>; + dma-ranges = <0xc0000000 0x00 0x00 0x40000000>; + + timer@7e003000 { + compatible = "brcm,bcm2835-system-timer"; + reg = <0x7e003000 0x1000>; + interrupts = <0x00 0x40 0x04 0x00 0x41 0x04 0x00 0x42 0x04 0x00 0x43 0x04>; + clock-frequency = <0xf4240>; + }; + + cprman: cprman@7e101000 { + compatible = "brcm,bcm2711-cprman"; + #clock-cells = <0x01>; + reg = <0x7e101000 0x2000>; + clocks = <0x03 0x04 0x00 0x04 0x01 0x04 0x02 0x05 0x00 0x05 0x01 0x05 0x02>; + phandle = <0x06>; + }; + + gpio@7e200000 { + compatible = "brcm,bcm2711-gpio"; + reg = <0x7e200000 0xb4>; + interrupts = <0x00 0x71 0x04 0x00 0x72 0x04 0x00 0x73 0x04 0x00 0x74 0x04>; + gpio-controller; + #gpio-cells = <0x02>; + interrupt-controller; + #interrupt-cells = <0x02>; + pinctrl-names = "default"; + gpio-line-names = "ID_SDA\0ID_SCL\0SDA1\0SCL1\0GPIO_GCLK\0GPIO5\0GPIO6\0SPI_CE1_N\0SPI_CE0_N\0SPI_MISO\0SPI_MOSI\0SPI_SCLK\0GPIO12\0GPIO13\0TXD1\0RXD1\0GPIO16\0GPIO17\0GPIO18\0GPIO19\0GPIO20\0GPIO21\0GPIO22\0GPIO23\0GPIO24\0GPIO25\0GPIO26\0GPIO27\0RGMII_MDIO\0RGMIO_MDC\0CTS0\0RTS0\0TXD0\0RXD0\0SD1_CLK\0SD1_CMD\0SD1_DATA0\0SD1_DATA1\0SD1_DATA2\0SD1_DATA3\0PWM0_MISO\0PWM1_MOSI\0STATUS_LED_G_CLK\0SPIFLASH_CE_N\0SDA0\0SCL0\0RGMII_RXCLK\0RGMII_RXCTL\0RGMII_RXD0\0RGMII_RXD1\0RGMII_RXD2\0RGMII_RXD3\0RGMII_TXCLK\0RGMII_TXCTL\0RGMII_TXD0\0RGMII_TXD1\0RGMII_TXD2\0RGMII_TXD3"; + phandle = <0x24>; + + dpi_gpio0 { + brcm,pins = <0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b>; + brcm,function = <0x06>; + }; + + emmc_gpio22 { + brcm,pins = <0x16 0x17 0x18 0x19 0x1a 0x1b>; + brcm,function = <0x07>; + }; + + emmc_gpio34 { + brcm,pins = <0x22 0x23 0x24 0x25 0x26 0x27>; + brcm,function = <0x07>; + brcm,pull = <0x00 0x02 0x02 0x02 0x02 0x02>; + phandle = <0x0e>; + }; + + emmc_gpio48 { + brcm,pins = <0x30 0x31 0x32 0x33 0x34 0x35>; + brcm,function = <0x07>; + }; + + gpclk0_gpio4 { + brcm,pins = <0x04>; + brcm,function = <0x04>; + }; + + gpclk1_gpio5 { + brcm,pins = <0x05>; + brcm,function = <0x04>; + }; + + gpclk1_gpio42 { + brcm,pins = <0x2a>; + brcm,function = <0x04>; + }; + + gpclk1_gpio44 { + brcm,pins = <0x2c>; + brcm,function = <0x04>; + }; + + gpclk2_gpio6 { + brcm,pins = <0x06>; + brcm,function = <0x04>; + }; + + gpclk2_gpio43 { + brcm,pins = <0x2b>; + brcm,function = <0x04>; + brcm,pull = <0x00>; + }; + + pcm_gpio18 { + brcm,pins = <0x12 0x13 0x14 0x15>; + brcm,function = <0x04>; + }; + + pcm_gpio28 { + brcm,pins = <0x1c 0x1d 0x1e 0x1f>; + brcm,function = <0x06>; + }; + + sdhost_gpio48 { + brcm,pins = <0x30 0x31 0x32 0x33 0x34 0x35>; + brcm,function = <0x04>; + }; + + uart0_gpio14 { + brcm,pins = <0x0e 0x0f>; + brcm,function = <0x04>; + }; + + uart0_ctsrts_gpio16 { + brcm,pins = <0x10 0x11>; + brcm,function = <0x07>; + }; + + uart0_ctsrts_gpio30 { + brcm,pins = <0x1e 0x1f>; + brcm,function = <0x07>; + brcm,pull = <0x02 0x00>; + phandle = <0x07>; + }; + + uart0_gpio32 { + brcm,pins = <0x20 0x21>; + brcm,function = <0x07>; + brcm,pull = <0x00 0x02>; + phandle = <0x08>; + }; + + uart0_gpio36 { + brcm,pins = <0x24 0x25>; + brcm,function = <0x06>; + }; + + uart0_ctsrts_gpio38 { + brcm,pins = <0x26 0x27>; + brcm,function = <0x06>; + }; + + uart1_gpio14 { + brcm,pins = <0x0e 0x0f>; + brcm,function = <0x02>; + phandle = <0x0d>; + }; + + uart1_ctsrts_gpio16 { + brcm,pins = <0x10 0x11>; + brcm,function = <0x02>; + }; + + uart1_gpio32 { + brcm,pins = <0x20 0x21>; + brcm,function = <0x02>; + }; + + uart1_ctsrts_gpio30 { + brcm,pins = <0x1e 0x1f>; + brcm,function = <0x02>; + }; + + uart1_gpio40 { + brcm,pins = <0x28 0x29>; + brcm,function = <0x02>; + }; + + uart1_ctsrts_gpio42 { + brcm,pins = <0x2a 0x2b>; + brcm,function = <0x02>; + }; + + uart3_gpio: uart3_gpio4 { + brcm,pull = <0x00 0x02>; + brcm,function = <0x03>; + brcm,pins = <0x04 0x05>; + }; + + gpclk0_gpio49 { + + pin-gpclk { + pins = "gpio49"; + function = "alt1"; + bias-disable; + }; + }; + + gpclk1_gpio50 { + + pin-gpclk { + pins = "gpio50"; + function = "alt1"; + bias-disable; + }; + }; + + gpclk2_gpio51 { + + pin-gpclk { + pins = "gpio51"; + function = "alt1"; + bias-disable; + }; + }; + + pcm_gpio50 { + + pins-pcm { + pins = "gpio50\0gpio51\0gpio52\0gpio53"; + function = "alt2"; + }; + }; + + gpioout { + brcm,pins = <0x06>; + brcm,function = <0x01>; + }; + + alt0 { + brcm,pins = <0x04 0x05 0x07 0x08 0x09 0x0a 0x0b>; + brcm,function = <0x04>; + }; + }; + + aux@7e215000 { + compatible = "brcm,bcm2835-aux"; + #clock-cells = <0x01>; + reg = <0x7e215000 0x08>; + clocks = <0x06 0x14>; + phandle = <0x0c>; + }; + + serial@7e215040 { + compatible = "brcm,bcm2835-aux-uart"; + reg = <0x7e215040 0x40>; + interrupts = <0x00 0x5d 0x04>; + clocks = <0x0c 0x00>; + status = "disabled"; + pinctrl-names = "default"; + pinctrl-0 = <0x0d>; + }; + + serial@7e201600 { + compatible = "arm,pl011\0arm,primecell"; + reg = <0x7e201600 0x200>; + interrupts = <0x00 0x79 0x04>; + clocks = <&cprman 0x13 &cprman 0x14>; + clock-names = "uartclk\0apb_pclk"; + arm,primecell-periphid = <0x241011>; + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&uart3_gpio>; + }; + + local_intc@40000000 { + compatible = "brcm,bcm2836-l1-intc"; + reg = <0x40000000 0x100>; + }; + + interrupt-controller@40041000 { + interrupt-controller; + #interrupt-cells = <0x03>; + compatible = "arm,gic-400"; + reg = <0x40041000 0x1000 0x40042000 0x2000 0x40044000 0x2000 0x40046000 0x2000>; + interrupts = <0x01 0x09 0xf04>; + phandle = <0x01>; + }; + + watchdog@7e100000 { + compatible = "brcm,bcm2835-pm\0brcm,bcm2835-pm-wdt"; + #power-domain-cells = <0x01>; + #reset-cells = <0x01>; + reg = <0x7e100000 0x114 0x7e00a000 0x24 0x7ec11000 0x20>; + clocks = <0x06 0x15 0x06 0x1d 0x06 0x17 0x06 0x16>; + clock-names = "v3d\0peri_image\0h264\0isp"; + system-power-controller; + }; + + rng@7e104000 { + compatible = "brcm,bcm2711-rng200"; + reg = <0x7e104000 0x28>; + }; + + clock@7ef00000 { + compatible = "brcm,brcm2711-dvp"; + reg = <0x7ef00000 0x10>; + clocks = <0x16>; + #clock-cells = <0x01>; + #reset-cells = <0x01>; + phandle = <0x17>; + }; + + firmware { + compatible = "raspberrypi,bcm2835-firmware\0simple-mfd"; + #address-cells = <0x01>; + #size-cells = <0x01>; + mboxes = <0x1c>; + dma-ranges; + phandle = <0x1d>; + + clocks { + compatible = "raspberrypi,firmware-clocks"; + #clock-cells = <0x01>; + phandle = <0x10>; + }; + + gpio { + compatible = "raspberrypi,firmware-gpio"; + gpio-controller; + #gpio-cells = <0x02>; + gpio-line-names = "BT_ON\0WL_ON\0PWR_LED_OFF\0GLOBAL_RESET\0VDD_SD_IO_SEL\0CAM_GPIO\0SD_PWR_ON\0"; + status = "okay"; + phandle = <0x09>; + }; + + reset { + compatible = "raspberrypi,firmware-reset"; + #reset-cells = <0x01>; + phandle = <0x22>; + }; + }; + + power { + compatible = "raspberrypi,bcm2835-power"; + firmware = <0x1d>; + #power-domain-cells = <0x01>; + phandle = <0x0b>; + }; + }; + + clocks { + clk-osc { + compatible = "fixed-clock"; + #clock-cells = <0x00>; + clock-output-names = "osc"; + clock-frequency = <0x337f980>; + phandle = <0x03>; + }; + }; + + clk-27M { + #clock-cells = <0x00>; + compatible = "fixed-clock"; + clock-frequency = <0x19bfcc0>; + clock-output-names = "27MHz-clock"; + phandle = <0x1a>; + }; + + clk-108M { + #clock-cells = <0x00>; + compatible = "fixed-clock"; + clock-frequency = <0x66ff300>; + clock-output-names = "108MHz-clock"; + phandle = <0x16>; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <0x01 0x0d 0xf08 0x01 0x0e 0xf08 0x01 0x0b 0xf08 0x01 0x0a 0xf08>; + arm,cpu-registers-not-fw-configured; + }; + + cpus { + #address-cells = <0x01>; + #size-cells = <0x00>; + enable-method = "brcm,bcm2836-smp"; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a72"; + reg = <0x00>; + enable-method = "spin-table"; + cpu-release-addr = <0x00 0xd8>; + phandle = <0x20>; + }; + }; + + leds { + compatible = "gpio-leds"; + + act { + label = "ACT"; + default-state = "keep"; + linux,default-trigger = "heartbeat"; + gpios = <0x24 0x2a 0x00>; + }; + + pwr { + label = "PWR"; + gpios = <0x09 0x02 0x01>; + default-state = "keep"; + linux,default-trigger = "default-on"; + }; + }; + + memory@20000000 { + // trying to use whole memory assigned to VM results in VM crashing + reg = <0x00 0x20000000 0x20000000>; + device_type = "memory"; + }; + + sd_io_1v8_reg { + compatible = "regulator-gpio"; + regulator-name = "vdd-sd-io"; + regulator-min-microvolt = <0x1b7740>; + regulator-max-microvolt = <0x325aa0>; + regulator-boot-on; + regulator-always-on; + regulator-settling-time-us = <0x1388>; + gpios = <0x09 0x04 0x00>; + states = <0x1b7740 0x01 0x325aa0 0x00>; + status = "okay"; + phandle = <0x1e>; + }; + + sd_vcc_reg { + compatible = "regulator-fixed"; + regulator-name = "vcc-sd"; + regulator-min-microvolt = <0x325aa0>; + regulator-max-microvolt = <0x325aa0>; + regulator-boot-on; + enable-active-high; + gpio = <0x09 0x06 0x00>; + phandle = <0x1f>; + }; +}; diff --git a/rpi4-ws/run.sh b/rpi4-ws/run.sh new file mode 100755 index 0000000..94b7f51 --- /dev/null +++ b/rpi4-ws/run.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +SCRIPT_DIR="$(dirname "$(realpath "$0")")" +ROOT_DIR="$(realpath "$SCRIPT_DIR/..")" + +docker run -it --privileged \ + -u "$(id -u)":"$(id -g)" \ + --rm \ + -v "$ROOT_DIR":/work/crosscon \ + -v /dev:/dev \ + crosscon_hv \ + "$@" diff --git a/security_test/Makefile b/security_test/Makefile new file mode 100644 index 0000000..83a03d0 --- /dev/null +++ b/security_test/Makefile @@ -0,0 +1,53 @@ +CC = $(CROSS_COMPILE)gcc + +CFLAGS ?= -Wall -I $(LIBFLUSH) \ + -DDEVICE_CONFIGURATION=\"libflush/eviction/strategies/$(DEVICE_CONFIGURATION).h\" \ + -DLLC_SIZE=$(LLC_SIZE) +ifeq ($(DEBUG), 1) +CFLAGS += -g -Og +endif +LDFLAGS ?= -L $(LIBFLUSH)/build/$(ARCH)/release -Wl,-Bstatic -l flush -Wl,-Bdynamic +DESTDIR ?= bin +O ?= out + +ARCH ?= armv8 +ARMAGEDDON ?= armageddon +LIBFLUSH = $(ARMAGEDDON)/libflush +HAVE_PAGEMAP_ACCESS ?= 1 + +DEVICE_CONFIGURATION ?= rpi4 +LLC_SIZE ?= 1024*1024 + +ifneq ($(USE_EVICTION),) +export USE_EVICTION +endif +ifneq ($(TIME_SOURCE),) +export TIME_SOURCE +endif +# end exports + +BINARIES = $(DESTDIR)/bin/cache_test + +.PHONY: all $(LIBFLUSH) +all: $(BINARIES) + +$(DESTDIR)/bin/%: $(LIBFLUSH) $(O)/%.o $(DESTDIR)/bin + $(CC) $(CFLAGS) $(O)/$*.o -o $@ $(LDFLAGS) $(LDADD) + +$(LIBFLUSH): + $(MAKE) CC=$(CC) ARCH=$(ARCH) DEVICE_CONFIGURATION=$(DEVICE_CONFIGURATION) \ + HAVE_PAGEMAP_ACCESS=$(HAVE_PAGEMAP_ACCESS) -C $@ + +.PHONY: clean run +clean: + rm -rf $(DESTDIR) $(O) + $(MAKE) CC=$(CC) -C $(LIBFLUSH) clean + +$(O)/%.o: %.c $(O) + $(CC) $(CFLAGS) -c -o $@ $< + +$(O): + mkdir -p $(O) + +$(DESTDIR)/bin: + mkdir -p $(DESTDIR)/bin diff --git a/security_test/README.md b/security_test/README.md new file mode 100644 index 0000000..8f597d7 --- /dev/null +++ b/security_test/README.md @@ -0,0 +1,119 @@ +# Cache attack test + +## Preparation + +Copy configuration files: + +```sh +cp files/* armageddon/libflush/libflush/eviction/strategies/ +``` + +## Build + +```sh +BUILDROOT=$ROOT/buildroot/build-aarch64 +export CROSS_COMPILE=$BUILDROOT/host/bin/aarch64-linux- +export DESTDIR=./to_buildroot-aarch64 +export O=$PWD/out-aarch64 +export TIME_SOURCE=perf +export ARCH=armv8 +export DEVICE_CONFIGURATION=rpi4 +export LLC_SIZE=0x100000 + +make +``` + +Additional configuration: + +* TIME_SOURCE - possible values: `register`, `perf`, `monotonic_clock`, + `thread_counter` with `register` being most accurate but requires access to + specific registers e.g. `PMCCNTR_EL0` for ARMv8. +* LLC_SIZE - size of last level cache + +## Run + +`cache_test` works in 2 modes + +* `time` in which it times how long it took to access memory addresses passed as + arguments. Each index should map to different cache line (as long as number is + smaller than number of cache lines e.g. 16384 for rpi4). + `cache_test time 0 1 2` would measure time it took to access + `addr`, `addr+64`, `addr+128` where `addr` is memory allocated by `cache_test` + program. +* `evict` in which program accesses enough addresses to make sure all cache + lines in cache were replaced by its own data. Accepts no arguments. + +To run test: + +1. In VM 1 run + + ```sh + # cache_test time 0 100 56 23 73 12 19 + Libflush init + Calculating median baseline. Don't evict. + Calculated median time: 379 + Median time diff from baseline: 69 + ``` + + Program should display median time to access all passed cache lines. + Program calculates rolling median which should be fairly stable. If it isn't + then test might not work. Wait couple seconds for time diff to stabilize. + +2. In VM 2 run + + ```sh + # cache_test evict + Libflush init + Eviction time: 291.416 ms + ``` + + This should evict everything it can from cache by accessing large amount of + data. It allocates LLC_SIZE bytes of memory and writes to it with + stride of LINE_LENGTH (cache line size). + +Without cache coloring you should see change in median time diff in first VM +after a couple of seconds. How long it takes depends on `TIME_USLEEP` and +`TIMING_SAMPLES` defines in `cache_test.c`, where `TIME_USLEEP` depends on +eviction time (shouldn't be lower than eviction time reported by 2nd VM). +Increasing `TIMING_SAMPLES` will lower variability/spread in reported median +time, but it'll also increase time it takes to report changes. + +## Results + +Example results, acquired on RPI4 on commit +[8f58f780623c](https://github.com/3mdeb/CROSSCON-Hypervisor-and-TEE-Isolation-Demos/commit/8f58f780623c8691c5b8e9f7a434d02cb9b4f13c). +Commands used are exactly the same as in [Run](#run) section. + +### Without cache coloring + +* Before eviction + + ```text + Median time diff from baseline: 48 + ``` + +* After eviction + + ```text + Median time diff from baseline: 458 + ``` + +### With cache coloring + +Eviction time jumped to about 600 ms. Tested with original and modified +`TIME_USLEEP` value. + +* Before eviction + + ```text + Median time diff from baseline: 149 + ``` + +* After eviction + + ```text + Median time diff from baseline: 163 + ``` + +With cache coloring enabled median time had much bigger spread with time diff +sometimes jumping up to 240 (with and without evicting). diff --git a/security_test/armageddon b/security_test/armageddon new file mode 160000 index 0000000..96ebc2d --- /dev/null +++ b/security_test/armageddon @@ -0,0 +1 @@ +Subproject commit 96ebc2d86e0454947a6cb2345cb93e984f5f6d39 diff --git a/security_test/cache_test.c b/security_test/cache_test.c new file mode 100644 index 0000000..ccb751e --- /dev/null +++ b/security_test/cache_test.c @@ -0,0 +1,231 @@ +// set in Makefile +#include DEVICE_CONFIGURATION +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// should be at least as long as the time it takes evict to finish one loop +#define TIME_USLEEP 400*1000 +// how many samples to keep (and calculate median from). More samples results in +// timing jumping less but it takes longer for it to register changes +#define TIMING_SAMPLES 25 + +enum OP { + EVICT, // try to evict everything from cache + TIME, // time accesses +}; + +struct Params { + enum OP op; + size_t *cache_lines; + size_t count; +} params; + +// Moves cursor to beginning of the previous line +const char CPL[] = "\033[F"; +static volatile atomic_bool stop = false; +libflush_session_t* libflush_session; +// printed at the end to stop compiler from optimizing out code without any +// visible use. +uint8_t dummy_value; + +/** Parse params and save them to 'params' global struct */ +int parse_params(int argc, char **argv); +/** Prepare program, initialize libflush library */ +int prepare(); +/** Cleanup everything prepared in prepare() */ +void cleanup(); +/** Writes random byte to each LINE_LENGTH bytes */ +void access_range(volatile uint8_t *addr, size_t size); +/** + * Access all cache lines in params.cache_lines and return how long it took. + * Cache line == addr[n*LINE_LENGTH] + */ +uint64_t time_access(volatile uint8_t *addr); +/** Handle CTRL+C */ +void intHandler(int dummy); +/** Push new element to the top of array, remove last */ +void push(void *arr, size_t count, size_t el_size, void *element); +/** Compare 2 uin64_t values */ +int cmp_uint64(const void* a, const void* b); +/** Return biggest value in array */ +uint64_t max_st(size_t *arr, size_t size); +/** Push new_time to timings array and then return median value */ +uint64_t add_element_get_median(uint64_t *timings, uint64_t new_time); + +int main(int argc, char **argv) { + signal(SIGINT, intHandler); + if (parse_params(argc, argv)) { + return -1; + } + if (prepare()) { + return -1; + } + + uint64_t timings[TIMING_SAMPLES] = { 0 }; + uint64_t median_baseline = 0; + uint64_t median = 0; + uint64_t time = 0; + + volatile uint8_t *vm_mem; + if (params.op == EVICT) { + // allocate LLC_SIZE bytes. Reading all of it should put our data into + // all/most of cache lines in cache + vm_mem = malloc(LLC_SIZE); + } + else { + // allocate enough memory to access highest index passed to program + size_t max_line = max_st(params.cache_lines, params.count); + size_t malloc_size = (max_line + 1)*LINE_LENGTH; + vm_mem = malloc(malloc_size); + } + + // calculate baseline time it takes to access addresses + if (params.op == TIME) { + printf("Calculating median baseline. Don't evict.\n"); + for (int i = 0; i < TIMING_SAMPLES; ++i) { + median_baseline = add_element_get_median(timings, time_access(vm_mem)); + } + printf("Calculated median time: %lu\n", median_baseline); + } + + while(!stop) { + switch(params.op) { + case EVICT: + time = libflush_get_timing(libflush_session); + access_range(vm_mem, LLC_SIZE); + time = libflush_get_timing(libflush_session) - time; + printf("\rEviction time: %0.3f ms ", (float)time / 1000); + break; + case TIME: + time = time_access(vm_mem); + median = add_element_get_median(timings, time); + if (median > median_baseline) + printf("\rMedian time diff from baseline: %lu ", median - median_baseline); + else + printf("\rMedian time diff from baseline: -%lu ", median_baseline - median); + fflush(NULL); + usleep(TIME_USLEEP); + break; + } + } + + printf("\nStopping\n"); + cleanup(); + free((void*)vm_mem); + printf("Dummy value: %u\n", (unsigned int)dummy_value); + return 0; +} + +void intHandler(int dummy) { + if (stop) { + exit(1); + } + stop = true; +} + +int parse_params(int argc, char **argv) { + char usage_str[] = "%s [cache_line]...\n"; + if (argc < 2) { + fprintf(stderr, usage_str, argv[0]); + return -1; + } + + if (strcmp(argv[1], "evict") == 0) { + params.op = EVICT; + } + else if (strcmp(argv[1], "time") == 0) { + if (argc < 3) { + fprintf(stderr, usage_str, argv[0]); + return -1; + } + params.op = TIME; + } + else { + fprintf(stderr, usage_str, argv[0]); + return -1; + } + params.count = argc - 2; + params.cache_lines = malloc((params.count) * sizeof(size_t)); + for (int i = 0; i < params.count; ++i) { + params.cache_lines[i] = (size_t)strtoul(argv[i + 2], NULL, 10); + } + + return 0; +} + +int prepare() { + printf("Libflush init\n"); + if (libflush_init(&libflush_session, NULL) == false) { + return -1; + } + + return 0; +} + +void cleanup() { + free(params.cache_lines); + if (libflush_terminate(libflush_session) == false) { + fprintf(stderr, "libflush_terminate failed\n"); + } +} + +void access_range(volatile uint8_t *addr, size_t size) { + uint8_t rnd = rand() % 256; + for (int i = 0; i < size; i += LINE_LENGTH) { + addr[i] = rnd; + } +} + +uint64_t time_access(volatile uint8_t *addr) { + uint64_t time = libflush_get_timing(libflush_session); + for (int i=0; i arr) { + memcpy(end, end-el_size, el_size); + end -= el_size; + } + memcpy(arr, element, el_size); +} + +int cmp_uint64(const void* a, const void* b) +{ + uint64_t arg1 = *(const uint64_t*)a; + uint64_t arg2 = *(const uint64_t*)b; + return (arg1 > arg2) - (arg1 < arg2); +} + +uint64_t add_element_get_median(uint64_t *timings, uint64_t new_time) { + uint64_t timings_sorted[TIMING_SAMPLES]; + push(timings, TIMING_SAMPLES, sizeof(new_time), &new_time); + memcpy(timings_sorted, timings, TIMING_SAMPLES*sizeof(new_time)); + qsort(timings_sorted, TIMING_SAMPLES, sizeof(new_time), cmp_uint64); + return timings_sorted[TIMING_SAMPLES/2]; +} + +uint64_t max_st(size_t *arr, size_t size) { + size_t max_val = 0; + for (int i = 0; i < size; ++i) { + if (arr[i] > max_val) { + max_val = arr[i]; + } + } + return max_val; +} diff --git a/security_test/files/rpi4.h b/security_test/files/rpi4.h new file mode 100644 index 0000000..2107bba --- /dev/null +++ b/security_test/files/rpi4.h @@ -0,0 +1,6 @@ +#define NUMBER_OF_SETS 1024 +#define LINE_LENGTH_LOG2 6 +#define LINE_LENGTH 64 +#define ES_EVICTION_COUNTER 28 +#define ES_NUMBER_OF_ACCESSES_IN_LOOP 5 +#define ES_DIFFERENT_ADDRESSES_IN_LOOP 4 diff --git a/support/br-aarch64-cba.config b/support/br-aarch64-cba.config new file mode 100644 index 0000000..c2cd06c --- /dev/null +++ b/support/br-aarch64-cba.config @@ -0,0 +1,4443 @@ +# +# Automatically generated file; DO NOT EDIT. +# Buildroot -g29a4eff-dirty Configuration +# +BR2_HAVE_DOT_CONFIG=y +BR2_HOST_GCC_AT_LEAST_4_9=y +BR2_HOST_GCC_AT_LEAST_5=y +BR2_HOST_GCC_AT_LEAST_6=y +BR2_HOST_GCC_AT_LEAST_7=y +BR2_HOST_GCC_AT_LEAST_8=y +BR2_HOST_GCC_AT_LEAST_9=y + +# +# Target options +# +BR2_ARCH_IS_64=y +BR2_USE_MMU=y +# BR2_arcle is not set +# BR2_arceb is not set +# BR2_arm is not set +# BR2_armeb is not set +BR2_aarch64=y +# BR2_aarch64_be is not set +# BR2_i386 is not set +# BR2_m68k is not set +# BR2_microblazeel is not set +# BR2_microblazebe is not set +# BR2_mips is not set +# BR2_mipsel is not set +# BR2_mips64 is not set +# BR2_mips64el is not set +# BR2_nios2 is not set +# BR2_or1k is not set +# BR2_powerpc is not set +# BR2_powerpc64 is not set +# BR2_powerpc64le is not set +# BR2_riscv is not set +# BR2_s390x is not set +# BR2_sh is not set +# BR2_sparc is not set +# BR2_sparc64 is not set +# BR2_x86_64 is not set +# BR2_xtensa is not set +BR2_ARCH_HAS_TOOLCHAIN_BUILDROOT=y +BR2_ARCH="aarch64" +BR2_NORMALIZED_ARCH="arm64" +BR2_ENDIAN="LITTLE" +BR2_GCC_TARGET_ABI="lp64" +BR2_GCC_TARGET_CPU="cortex-a53" +BR2_BINFMT_SUPPORTS_SHARED=y +BR2_READELF_ARCH_NAME="AArch64" +BR2_ARM_CPU_HAS_FPU=y +BR2_ARM_CPU_HAS_VFPV2=y +BR2_ARM_CPU_HAS_VFPV3=y +BR2_ARM_CPU_HAS_VFPV4=y +BR2_ARM_CPU_HAS_FP_ARMV8=y +BR2_ARM_CPU_ARMV8A=y + +# +# armv8 cores +# +# BR2_cortex_a35 is not set +BR2_cortex_a53=y +# BR2_cortex_a57 is not set +# BR2_cortex_a57_a53 is not set +# BR2_cortex_a72 is not set +# BR2_cortex_a72_a53 is not set +# BR2_cortex_a73 is not set +# BR2_cortex_a73_a35 is not set +# BR2_cortex_a73_a53 is not set +# BR2_emag is not set +# BR2_exynos_m1 is not set +# BR2_falkor is not set +# BR2_phecda is not set +# BR2_qdf24xx is not set +# BR2_thunderx is not set +# BR2_thunderxt81 is not set +# BR2_thunderxt83 is not set +# BR2_thunderxt88 is not set +# BR2_thunderxt88p1 is not set +# BR2_xgene1 is not set + +# +# armv8.1a cores +# +# BR2_thunderx2t99 is not set +# BR2_thunderx2t99p1 is not set +# BR2_vulcan is not set + +# +# armv8.2a cores +# +# BR2_cortex_a55 is not set +# BR2_cortex_a75 is not set +# BR2_cortex_a75_a55 is not set +# BR2_cortex_a76 is not set +# BR2_cortex_a76_a55 is not set +# BR2_neoverse_n1 is not set +# BR2_tsv110 is not set + +# +# armv8.4a cores +# +# BR2_saphira is not set +# BR2_ARM_FPU_VFPV2 is not set +# BR2_ARM_FPU_VFPV3 is not set +# BR2_ARM_FPU_VFPV3D16 is not set +# BR2_ARM_FPU_VFPV4 is not set +# BR2_ARM_FPU_VFPV4D16 is not set +BR2_ARM_FPU_FP_ARMV8=y +BR2_ARM64_PAGE_SIZE_4K=y +# BR2_ARM64_PAGE_SIZE_64K is not set +BR2_ARM64_PAGE_SIZE="4K" +BR2_BINFMT_ELF=y + +# +# Toolchain +# +BR2_TOOLCHAIN=y +BR2_TOOLCHAIN_USES_GLIBC=y +BR2_TOOLCHAIN_BUILDROOT=y +# BR2_TOOLCHAIN_EXTERNAL is not set + +# +# Toolchain Buildroot Options +# +BR2_TOOLCHAIN_BUILDROOT_VENDOR="buildroot" +# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +# BR2_TOOLCHAIN_BUILDROOT_MUSL is not set +BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc" + +# +# Kernel Header Options +# +# BR2_KERNEL_HEADERS_4_9 is not set +# BR2_KERNEL_HEADERS_4_14 is not set +# BR2_KERNEL_HEADERS_4_19 is not set +# BR2_KERNEL_HEADERS_5_4 is not set +# BR2_KERNEL_HEADERS_5_10 is not set +BR2_KERNEL_HEADERS_5_15=y +# BR2_KERNEL_HEADERS_5_19 is not set +# BR2_KERNEL_HEADERS_6_0 is not set +# BR2_KERNEL_HEADERS_VERSION is not set +# BR2_KERNEL_HEADERS_CUSTOM_TARBALL is not set +# BR2_KERNEL_HEADERS_CUSTOM_GIT is not set +BR2_DEFAULT_KERNEL_HEADERS="5.15.87" +BR2_PACKAGE_LINUX_HEADERS=y +BR2_PACKAGE_MUSL_ARCH_SUPPORTS=y +BR2_PACKAGE_MUSL_SUPPORTS=y +BR2_PACKAGE_UCLIBC_ARCH_SUPPORTS=y +BR2_PACKAGE_UCLIBC_SUPPORTS=y +BR2_PACKAGE_GLIBC_ARCH_SUPPORTS=y +BR2_PACKAGE_GLIBC_SUPPORTS=y + +# +# Glibc Options +# +BR2_PACKAGE_GLIBC=y +# BR2_PACKAGE_GLIBC_KERNEL_COMPAT is not set +# BR2_PACKAGE_GLIBC_UTILS is not set + +# +# Binutils Options +# +BR2_PACKAGE_HOST_BINUTILS_SUPPORTS_CFI=y +# BR2_BINUTILS_VERSION_2_37_X is not set +BR2_BINUTILS_VERSION_2_38_X=y +# BR2_BINUTILS_VERSION_2_39_X is not set +BR2_BINUTILS_VERSION="2.38" +BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" + +# +# GCC Options +# +# BR2_GCC_VERSION_10_X is not set +BR2_GCC_VERSION_11_X=y +# BR2_GCC_VERSION_12_X is not set +BR2_GCC_SUPPORTS_DLANG=y +BR2_GCC_VERSION="11.3.0" +BR2_EXTRA_GCC_CONFIG_OPTIONS="" +# BR2_TOOLCHAIN_BUILDROOT_CXX is not set +# BR2_TOOLCHAIN_BUILDROOT_FORTRAN is not set +# BR2_TOOLCHAIN_BUILDROOT_DLANG is not set +# BR2_GCC_ENABLE_OPENMP is not set +# BR2_GCC_ENABLE_GRAPHITE is not set +BR2_PACKAGE_HOST_GDB_ARCH_SUPPORTS=y + +# +# Host GDB Options +# +# BR2_PACKAGE_HOST_GDB is not set + +# +# Toolchain Generic Options +# +BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS=y +BR2_TOOLCHAIN_SUPPORTS_VARIADIC_MI_THUNK=y +BR2_USE_WCHAR=y +BR2_ENABLE_LOCALE=y +BR2_TOOLCHAIN_HAS_THREADS=y +BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y +BR2_TOOLCHAIN_HAS_THREADS_NPTL=y +BR2_TOOLCHAIN_HAS_SSP=y +BR2_TOOLCHAIN_HAS_SSP_STRONG=y +BR2_TOOLCHAIN_HAS_UCONTEXT=y +BR2_TOOLCHAIN_SUPPORTS_PIE=y +# BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY is not set +BR2_TOOLCHAIN_EXTRA_LIBS="" +BR2_TOOLCHAIN_HAS_FULL_GETTEXT=y +BR2_TARGET_OPTIMIZATION="" +BR2_TARGET_LDFLAGS="" +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_16=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_1=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_2=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_3=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_5=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_6=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_7=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_8=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_9=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_10=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_11=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_12=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_13=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_14=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_15=y +BR2_TOOLCHAIN_HEADERS_AT_LEAST="5.15" +BR2_TOOLCHAIN_GCC_AT_LEAST_4_3=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_4=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_5=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_6=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_7=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_8=y +BR2_TOOLCHAIN_GCC_AT_LEAST_4_9=y +BR2_TOOLCHAIN_GCC_AT_LEAST_5=y +BR2_TOOLCHAIN_GCC_AT_LEAST_6=y +BR2_TOOLCHAIN_GCC_AT_LEAST_7=y +BR2_TOOLCHAIN_GCC_AT_LEAST_8=y +BR2_TOOLCHAIN_GCC_AT_LEAST_9=y +BR2_TOOLCHAIN_GCC_AT_LEAST_10=y +BR2_TOOLCHAIN_GCC_AT_LEAST_11=y +BR2_TOOLCHAIN_GCC_AT_LEAST="11" +BR2_TOOLCHAIN_HAS_MNAN_OPTION=y +BR2_TOOLCHAIN_HAS_SYNC_1=y +BR2_TOOLCHAIN_HAS_SYNC_2=y +BR2_TOOLCHAIN_HAS_SYNC_4=y +BR2_TOOLCHAIN_HAS_SYNC_8=y +BR2_TOOLCHAIN_HAS_LIBATOMIC=y +BR2_TOOLCHAIN_HAS_ATOMIC=y + +# +# Build options +# + +# +# Commands +# +BR2_WGET="wget --passive-ftp -nd -t 3" +BR2_SVN="svn --non-interactive" +BR2_BZR="bzr" +BR2_GIT="git" +BR2_CVS="cvs" +BR2_LOCALFILES="cp" +BR2_SCP="scp" +BR2_SFTP="sftp" +BR2_HG="hg" +BR2_ZCAT="gzip -d -c" +BR2_BZCAT="bzcat" +BR2_XZCAT="xzcat" +BR2_LZCAT="lzip -d -c" +BR2_TAR_OPTIONS="" +BR2_DEFCONFIG="./configs/qemu_aarch64_virt_defconfig" +BR2_DL_DIR="$(TOPDIR)/dl" +BR2_HOST_DIR="$(BASE_DIR)/host" + +# +# Mirrors and Download locations +# +BR2_PRIMARY_SITE="" +BR2_BACKUP_SITE="http://sources.buildroot.net" +BR2_KERNEL_MIRROR="https://cdn.kernel.org/pub" +BR2_GNU_MIRROR="http://ftpmirror.gnu.org" +BR2_LUAROCKS_MIRROR="http://rocks.moonscript.org" +BR2_CPAN_MIRROR="https://cpan.metacpan.org" +BR2_JLEVEL=0 +# BR2_CCACHE is not set +# BR2_ENABLE_DEBUG is not set +# BR2_ENABLE_RUNTIME_DEBUG is not set +BR2_STRIP_strip=y +BR2_STRIP_EXCLUDE_FILES="" +BR2_STRIP_EXCLUDE_DIRS="" +# BR2_OPTIMIZE_0 is not set +# BR2_OPTIMIZE_1 is not set +# BR2_OPTIMIZE_2 is not set +# BR2_OPTIMIZE_3 is not set +# BR2_OPTIMIZE_G is not set +BR2_OPTIMIZE_S=y +# BR2_OPTIMIZE_FAST is not set +# BR2_ENABLE_LTO is not set + +# +# static only needs a toolchain w/ uclibc or musl +# +BR2_SHARED_LIBS=y +# BR2_SHARED_STATIC_LIBS is not set +BR2_PACKAGE_OVERRIDE_FILE="$(CONFIG_DIR)/local.mk" +BR2_GLOBAL_PATCH_DIR="" + +# +# Advanced +# +BR2_COMPILER_PARANOID_UNSAFE_PATH=y +# BR2_FORCE_HOST_BUILD is not set +# BR2_REPRODUCIBLE is not set +# BR2_PER_PACKAGE_DIRECTORIES is not set + +# +# Security Hardening Options +# +BR2_PIC_PIE_ARCH_SUPPORTS=y +BR2_PIC_PIE=y +# BR2_SSP_NONE is not set +# BR2_SSP_REGULAR is not set +BR2_SSP_STRONG=y +# BR2_SSP_ALL is not set +BR2_SSP_OPTION="-fstack-protector-strong" +# BR2_RELRO_NONE is not set +# BR2_RELRO_PARTIAL is not set +BR2_RELRO_FULL=y +BR2_FORTIFY_SOURCE_ARCH_SUPPORTS=y +# BR2_FORTIFY_SOURCE_NONE is not set +BR2_FORTIFY_SOURCE_1=y +# BR2_FORTIFY_SOURCE_2 is not set + +# +# System configuration +# +BR2_ROOTFS_SKELETON_DEFAULT=y +# BR2_ROOTFS_SKELETON_CUSTOM is not set +BR2_TARGET_GENERIC_HOSTNAME="buildroot" +BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot" +BR2_TARGET_GENERIC_PASSWD_SHA256=y +# BR2_TARGET_GENERIC_PASSWD_SHA512 is not set +BR2_TARGET_GENERIC_PASSWD_METHOD="sha-256" +BR2_INIT_BUSYBOX=y +# BR2_INIT_SYSV is not set +# BR2_INIT_OPENRC is not set +# BR2_INIT_SYSTEMD is not set +# BR2_INIT_NONE is not set +# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set +BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS=y +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set +# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV is not set +BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" +# BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES is not set +# BR2_ROOTFS_MERGED_USR is not set +BR2_TARGET_ENABLE_ROOT_LOGIN=y +BR2_TARGET_GENERIC_ROOT_PASSWD="" +BR2_SYSTEM_BIN_SH_BUSYBOX=y + +# +# bash, dash, mksh, zsh need BR2_PACKAGE_BUSYBOX_SHOW_OTHERS +# +# BR2_SYSTEM_BIN_SH_NONE is not set +BR2_TARGET_GENERIC_GETTY=y +BR2_TARGET_GENERIC_GETTY_PORT="console" +BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP=y +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_38400 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_57600 is not set +# BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200 is not set +BR2_TARGET_GENERIC_GETTY_BAUDRATE="0" +BR2_TARGET_GENERIC_GETTY_TERM="vt100" +BR2_TARGET_GENERIC_GETTY_OPTIONS="" +BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW=y +BR2_SYSTEM_DHCP="" +BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin" +BR2_ENABLE_LOCALE_PURGE=y +BR2_ENABLE_LOCALE_WHITELIST="C en_US" +BR2_GENERATE_LOCALE="" +# BR2_SYSTEM_ENABLE_NLS is not set +# BR2_TARGET_TZ_INFO is not set +BR2_ROOTFS_USERS_TABLES="" +BR2_ROOTFS_OVERLAY="../optee_client/out-aarch64/export ../optee_client/out2-aarch64/export ../optee_test/to_buildroot-aarch64-cba ../optee_test/to_buildroot-aarch64-2 ../support/to_buildroot-aarch64 ../support/to_buildroot ../bitcoin-wallet/to_buildroot-aarch64-2/ ../bitcoin-wallet/to_buildroot-aarch64/ ../malicous_ta/to_buildroot-aarch64/ ../malicous_ta/to_buildroot-aarch64-2/ ../security_test/to_buildroot-aarch64/ ../cba_ta/to_buildroot-aarch64-cba" +BR2_ROOTFS_PRE_BUILD_SCRIPT="" +BR2_ROOTFS_POST_BUILD_SCRIPT="" +BR2_ROOTFS_POST_FAKEROOT_SCRIPT="" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)" + +# +# Kernel +# +# BR2_LINUX_KERNEL is not set + +# +# Target packages +# +BR2_PACKAGE_BUSYBOX=y +BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config" +BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="" +# BR2_PACKAGE_BUSYBOX_SHOW_OTHERS is not set +# BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES is not set +# BR2_PACKAGE_BUSYBOX_WATCHDOG is not set +BR2_PACKAGE_SKELETON=y +BR2_PACKAGE_HAS_SKELETON=y +BR2_PACKAGE_PROVIDES_SKELETON="skeleton-init-sysv" +BR2_PACKAGE_SKELETON_INIT_COMMON=y +BR2_PACKAGE_SKELETON_INIT_SYSV=y + +# +# Audio and video applications +# +# BR2_PACKAGE_ALSA_UTILS is not set +# BR2_PACKAGE_ATEST is not set +# BR2_PACKAGE_AUMIX is not set +# BR2_PACKAGE_BLUEZ_ALSA is not set +# BR2_PACKAGE_DVBLAST is not set +# BR2_PACKAGE_DVDAUTHOR is not set + +# +# dvdrw-tools needs a toolchain w/ threads, C++, wchar +# + +# +# espeak needs a toolchain w/ C++, wchar, threads, dynamic library +# +# BR2_PACKAGE_FAAD2 is not set +BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS=y +# BR2_PACKAGE_FFMPEG is not set +# BR2_PACKAGE_FLAC is not set +# BR2_PACKAGE_FLITE is not set +# BR2_PACKAGE_FLUID_SOUNDFONT is not set + +# +# fluidsynth needs a toolchain w/ threads, wchar, dynamic library, C++ +# +# BR2_PACKAGE_GMRENDER_RESURRECT is not set +# BR2_PACKAGE_GSTREAMER1 is not set +# BR2_PACKAGE_JACK1 is not set + +# +# jack2 needs a toolchain w/ threads, C++, dynamic library +# +BR2_PACKAGE_KODI_ARCH_SUPPORTS=y + +# +# kodi needs python3 w/ .py modules, a uClibc or glibc toolchain w/ C++, threads, wchar, dynamic library, gcc >= 4.9 +# + +# +# kodi needs udev support for gbm +# + +# +# kodi needs an OpenGL EGL backend with OpenGL or GLES support +# +# BR2_PACKAGE_LAME is not set +# BR2_PACKAGE_MADPLAY is not set +# BR2_PACKAGE_MIMIC is not set +# BR2_PACKAGE_MINIMODEM is not set + +# +# miraclecast needs systemd and a glibc toolchain w/ threads and wchar +# + +# +# mjpegtools needs a toolchain w/ C++, threads +# + +# +# modplugtools needs a toolchain w/ C++ +# +# BR2_PACKAGE_MOTION is not set + +# +# mpd needs a toolchain w/ C++, threads, wchar, gcc >= 8, host gcc >= 8 +# +# BR2_PACKAGE_MPD_MPC is not set +# BR2_PACKAGE_MPG123 is not set + +# +# mpv needs a toolchain w/ C++, threads, gcc >= 4.9 +# +# BR2_PACKAGE_MULTICAT is not set +# BR2_PACKAGE_MUSEPACK is not set + +# +# ncmpc needs a toolchain w/ C++, wchar, threads, gcc >= 10 +# +# BR2_PACKAGE_OPUS_TOOLS is not set +# BR2_PACKAGE_PIPEWIRE is not set +BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC=y +# BR2_PACKAGE_PULSEAUDIO is not set +# BR2_PACKAGE_SOX is not set +# BR2_PACKAGE_SQUEEZELITE is not set +# BR2_PACKAGE_TINYCOMPRESS is not set + +# +# tovid needs a toolchain w/ threads, C++, wchar, gcc >= 4.9 +# +# BR2_PACKAGE_TSTOOLS is not set +# BR2_PACKAGE_TWOLAME is not set +# BR2_PACKAGE_UDPXY is not set + +# +# upmpdcli needs a toolchain w/ C++, NPTL, gcc >= 4.9 +# + +# +# v4l2grab needs a toolchain w/ threads, dynamic library, C++ and headers >= 3.0 +# + +# +# v4l2loopback needs a Linux kernel to be built +# + +# +# vlc needs a toolchain w/ C++, dynamic library, wchar, threads, gcc >= 4.9, headers >= 3.7 +# +# BR2_PACKAGE_VORBIS_TOOLS is not set +# BR2_PACKAGE_WAVPACK is not set +# BR2_PACKAGE_YAVTA is not set +# BR2_PACKAGE_YMPD is not set + +# +# zynaddsubfx needs a toolchain w/ C++11 and threads +# + +# +# Compressors and decompressors +# +# BR2_PACKAGE_BROTLI is not set +# BR2_PACKAGE_BZIP2 is not set + +# +# lrzip needs a toolchain w/ wchar, threads, C++ +# + +# +# lzip needs a toolchain w/ C++ +# +# BR2_PACKAGE_LZOP is not set + +# +# p7zip needs a toolchain w/ threads, wchar, C++ +# +# BR2_PACKAGE_PIGZ is not set +# BR2_PACKAGE_PIXZ is not set + +# +# unrar needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_XZ is not set +# BR2_PACKAGE_ZIP is not set +# BR2_PACKAGE_ZSTD is not set + +# +# Debugging, profiling and benchmark +# +# BR2_PACKAGE_BABELTRACE2 is not set +# BR2_PACKAGE_BLKTRACE is not set + +# +# bonnie++ needs a toolchain w/ C++ +# +BR2_PACKAGE_BPFTOOL_ARCH_SUPPORTS=y +# BR2_PACKAGE_BPFTOOL is not set +# BR2_PACKAGE_CACHE_CALIBRATOR is not set + +# +# clinfo needs an OpenCL provider +# + +# +# clpeak needs an OpenCL provider, a toolchain w/ C++, gcc >= 4.8 +# +# BR2_PACKAGE_COREMARK is not set +# BR2_PACKAGE_COREMARK_PRO is not set + +# +# dacapo needs OpenJDK +# +BR2_PACKAGE_DELVE_ARCH_SUPPORTS=y +# BR2_PACKAGE_DELVE is not set +# BR2_PACKAGE_DHRYSTONE is not set +# BR2_PACKAGE_DIEHARDER is not set +# BR2_PACKAGE_DMALLOC is not set +# BR2_PACKAGE_DROPWATCH is not set +# BR2_PACKAGE_DSTAT is not set +# BR2_PACKAGE_DT is not set + +# +# duma needs a toolchain w/ C++, threads, dynamic library +# +# BR2_PACKAGE_FIO is not set +BR2_PACKAGE_FWTS_ARCH_SUPPORTS=y +# BR2_PACKAGE_FWTS is not set +BR2_PACKAGE_GDB_ARCH_SUPPORTS=y + +# +# gdb/gdbserver >= 8.x needs a toolchain w/ C++, gcc >= 4.8 +# +BR2_PACKAGE_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y + +# +# google-breakpad requires a glibc or uClibc toolchain w/ wchar, thread, C++, gcc >= 4.8 +# +# BR2_PACKAGE_HYPERFINE is not set +# BR2_PACKAGE_IOZONE is not set +# BR2_PACKAGE_KEXEC is not set +# BR2_PACKAGE_KMEMD is not set +# BR2_PACKAGE_LATENCYTOP is not set +# BR2_PACKAGE_LIBBPF is not set +# BR2_PACKAGE_LMBENCH is not set +BR2_PACKAGE_LTP_TESTSUITE_ARCH_SUPPORTS=y +# BR2_PACKAGE_LTP_TESTSUITE is not set +BR2_PACKAGE_LTRACE_ARCH_SUPPORTS=y +# BR2_PACKAGE_LTRACE is not set +# BR2_PACKAGE_LTTNG_BABELTRACE is not set + +# +# lttng-modules needs a Linux kernel to be built +# +# BR2_PACKAGE_LTTNG_TOOLS is not set +# BR2_PACKAGE_MBW is not set +# BR2_PACKAGE_MEMSTAT is not set +# BR2_PACKAGE_NETPERF is not set +# BR2_PACKAGE_NETSNIFF_NG is not set +# BR2_PACKAGE_NMON is not set +BR2_PACKAGE_OPROFILE_ARCH_SUPPORTS=y + +# +# oprofile needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_PAX_UTILS is not set +BR2_PACKAGE_PLY_ARCH_SUPPORTS=y +# BR2_PACKAGE_PLY is not set +# BR2_PACKAGE_POKE is not set +BR2_PACKAGE_PTM2HUMAN_ARCH_SUPPORTS=y +# BR2_PACKAGE_PTM2HUMAN is not set +# BR2_PACKAGE_PV is not set +# BR2_PACKAGE_RAMSMP is not set +# BR2_PACKAGE_RAMSPEED is not set +# BR2_PACKAGE_RT_TESTS is not set + +# +# rwmem needs a toolchain w/ C++, wchar, gcc >= 5 +# + +# +# sentry-native needs a glibc toolchain with w/ wchar, thread, C++, gcc >= 4.8 +# + +# +# signal-estimator needs a toochain w/ C++, threads, gcc >= 7 +# +# BR2_PACKAGE_SPIDEV_TEST is not set +# BR2_PACKAGE_STRACE is not set +# BR2_PACKAGE_STRESS is not set +# BR2_PACKAGE_STRESS_NG is not set + +# +# sysdig needs a glibc toolchain w/ C++, threads, gcc >= 5, dynamic library, a Linux kernel, and luajit or lua 5.1 to be built +# +# BR2_PACKAGE_TCF_AGENT is not set +BR2_PACKAGE_TCF_AGENT_ARCH="a64" +BR2_PACKAGE_TCF_AGENT_ARCH_SUPPORTS=y +# BR2_PACKAGE_TINYMEMBENCH is not set +# BR2_PACKAGE_TRACE_CMD is not set +BR2_PACKAGE_TRINITY_ARCH_SUPPORTS=y +# BR2_PACKAGE_TRINITY is not set +# BR2_PACKAGE_UCLIBC_NG_TEST is not set +BR2_PACKAGE_UFTRACE_ARCH_SUPPORTS=y +# BR2_PACKAGE_UFTRACE is not set +BR2_PACKAGE_VALGRIND_ARCH_SUPPORTS=y +# BR2_PACKAGE_VALGRIND is not set +# BR2_PACKAGE_VMTOUCH is not set +# BR2_PACKAGE_WHETSTONE is not set + +# +# Development tools +# +# BR2_PACKAGE_AVOCADO is not set +# BR2_PACKAGE_BINUTILS is not set +# BR2_PACKAGE_BITWISE is not set +# BR2_PACKAGE_BSDIFF is not set +# BR2_PACKAGE_CHECK is not set +BR2_PACKAGE_CMAKE_ARCH_SUPPORTS=y + +# +# ctest needs a toolchain w/ C++, wchar, dynamic library, gcc >= 4.7, NPTL +# + +# +# cppunit needs a toolchain w/ C++, dynamic library +# +# BR2_PACKAGE_CUKINIA is not set +# BR2_PACKAGE_CUNIT is not set +# BR2_PACKAGE_CVS is not set + +# +# cxxtest needs a toolchain w/ C++ support +# +# BR2_PACKAGE_FLEX is not set +# BR2_PACKAGE_GETTEXT is not set +BR2_PACKAGE_PROVIDES_HOST_GETTEXT="host-gettext-tiny" +# BR2_PACKAGE_GIT is not set + +# +# git-crypt needs a toolchain w/ C++, gcc >= 4.9 +# + +# +# gperf needs a toolchain w/ C++ +# +# BR2_PACKAGE_JO is not set +# BR2_PACKAGE_JQ is not set +# BR2_PACKAGE_LIBTOOL is not set +# BR2_PACKAGE_MAKE is not set +# BR2_PACKAGE_MAWK is not set +# BR2_PACKAGE_PKGCONF is not set +# BR2_PACKAGE_RIPGREP is not set +# BR2_PACKAGE_SUBVERSION is not set +# BR2_PACKAGE_TREE is not set + +# +# Filesystem and flash utilities +# +# BR2_PACKAGE_ABOOTIMG is not set + +# +# aufs-util needs a linux kernel and a toolchain w/ threads +# +# BR2_PACKAGE_AUTOFS is not set +# BR2_PACKAGE_BTRFS_PROGS is not set +# BR2_PACKAGE_CIFS_UTILS is not set +# BR2_PACKAGE_CPIO is not set +# BR2_PACKAGE_CRAMFS is not set +# BR2_PACKAGE_CURLFTPFS is not set +# BR2_PACKAGE_DAVFS2 is not set +# BR2_PACKAGE_DOSFSTOOLS is not set +# BR2_PACKAGE_DUST is not set +# BR2_PACKAGE_E2FSPROGS is not set +# BR2_PACKAGE_E2TOOLS is not set +# BR2_PACKAGE_ECRYPTFS_UTILS is not set +# BR2_PACKAGE_EROFS_UTILS is not set +# BR2_PACKAGE_EXFAT is not set +# BR2_PACKAGE_EXFAT_UTILS is not set +# BR2_PACKAGE_EXFATPROGS is not set +# BR2_PACKAGE_F2FS_TOOLS is not set +# BR2_PACKAGE_FIRMWARE_UTILS is not set +# BR2_PACKAGE_FLASHBENCH is not set +# BR2_PACKAGE_FSCRYPTCTL is not set +# BR2_PACKAGE_FUSE_OVERLAYFS is not set +# BR2_PACKAGE_FWUP is not set +# BR2_PACKAGE_GENEXT2FS is not set +# BR2_PACKAGE_GENPART is not set +# BR2_PACKAGE_GENROMFS is not set +# BR2_PACKAGE_GOCRYPTFS is not set +# BR2_PACKAGE_IMX_USB_LOADER is not set +# BR2_PACKAGE_MMC_UTILS is not set +# BR2_PACKAGE_MTD is not set +# BR2_PACKAGE_MTOOLS is not set +# BR2_PACKAGE_NFS_UTILS is not set +# BR2_PACKAGE_NILFS_UTILS is not set +# BR2_PACKAGE_NTFS_3G is not set +# BR2_PACKAGE_SP_OOPS_EXTRACT is not set +# BR2_PACKAGE_SQUASHFS is not set +# BR2_PACKAGE_SSHFS is not set +# BR2_PACKAGE_UDFTOOLS is not set +# BR2_PACKAGE_UNIONFS is not set +# BR2_PACKAGE_XFSPROGS is not set +# BR2_PACKAGE_ZEROFREE is not set + +# +# zfs needs a Linux kernel to be built +# + +# +# Fonts, cursors, icons, sounds and themes +# + +# +# Cursors +# +# BR2_PACKAGE_COMIX_CURSORS is not set +# BR2_PACKAGE_OBSIDIAN_CURSORS is not set + +# +# Fonts +# +# BR2_PACKAGE_BITSTREAM_VERA is not set +# BR2_PACKAGE_CANTARELL is not set +# BR2_PACKAGE_DEJAVU is not set +# BR2_PACKAGE_FONT_AWESOME is not set +# BR2_PACKAGE_GHOSTSCRIPT_FONTS is not set +# BR2_PACKAGE_INCONSOLATA is not set +# BR2_PACKAGE_LIBERATION is not set +# BR2_PACKAGE_WQY_ZENHEI is not set + +# +# Icons +# +# BR2_PACKAGE_GOOGLE_MATERIAL_DESIGN_ICONS is not set +# BR2_PACKAGE_HICOLOR_ICON_THEME is not set + +# +# Sounds +# +# BR2_PACKAGE_SOUND_THEME_BOREALIS is not set +# BR2_PACKAGE_SOUND_THEME_FREEDESKTOP is not set + +# +# Themes +# + +# +# Games +# +# BR2_PACKAGE_ASCII_INVADERS is not set +# BR2_PACKAGE_CHOCOLATE_DOOM is not set + +# +# flare-engine needs a toolchain w/ C++, dynamic library +# +# BR2_PACKAGE_FROTZ is not set + +# +# gnuchess needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_LBREAKOUT2 is not set +# BR2_PACKAGE_LTRIS is not set + +# +# minetest needs a toolchain w/ C++, gcc >= 5.1, threads +# +# BR2_PACKAGE_OPENTYRIAN is not set +# BR2_PACKAGE_PRBOOM is not set +# BR2_PACKAGE_SL is not set + +# +# solarus needs OpenGL and a toolchain w/ C++, gcc >= 4.9, NPTL, dynamic library, and luajit or lua 5.1 +# + +# +# stella needs a toolchain w/ dynamic library, C++, threads, gcc >= 7 +# +# BR2_PACKAGE_XORCURSES is not set + +# +# Graphic libraries and applications (graphic/text) +# + +# +# Graphic applications +# + +# +# cage needs udev, EGL w/ Wayland backend and OpenGL ES support +# + +# +# cog needs wpewebkit and a toolchain w/ threads +# +# BR2_PACKAGE_FSWEBCAM is not set +# BR2_PACKAGE_GHOSTSCRIPT is not set + +# +# glmark2 needs a toolchain w/ C++, gcc >= 4.9 +# + +# +# glslsandbox-player needs openGL ES and EGL driver +# +# BR2_PACKAGE_GNUPLOT is not set +# BR2_PACKAGE_JHEAD is not set + +# +# kmscube needs EGL, GBM and OpenGL ES, and a toolchain w/ thread support +# + +# +# libva-utils needs a toolchain w/ C++, threads, dynamic library +# +BR2_PACKAGE_MIDORI_ARCH_SUPPORTS=y + +# +# midori needs a glibc toolchain w/ C++, wchar, threads, dynamic library, gcc >= 7, host gcc >= 8 +# + +# +# midori needs libgtk3 w/ X11 or wayland backend +# +BR2_PACKAGE_NETSURF_ARCH_SUPPORTS=y +# BR2_PACKAGE_NETSURF is not set +# BR2_PACKAGE_PNGQUANT is not set +# BR2_PACKAGE_RRDTOOL is not set + +# +# stellarium needs Qt5 and an OpenGL provider +# + +# +# tesseract-ocr needs a toolchain w/ threads, C++, gcc >= 7, dynamic library, wchar +# +# BR2_PACKAGE_TINIFIER is not set + +# +# Graphic libraries +# + +# +# cegui needs a toolchain w/ C++, threads, dynamic library, wchar, gcc >= 5 +# + +# +# directfb needs a glibc or uClibc toolchain w/ C++, NPTL, gcc >= 4.5, dynamic library +# + +# +# efl needs a toolchain w/ C++, dynamic library, gcc >= 4.9, host gcc >= 4.9, threads, wchar +# +# BR2_PACKAGE_FB_TEST_APP is not set +# BR2_PACKAGE_FBDUMP is not set +# BR2_PACKAGE_FBGRAB is not set + +# +# fbterm needs a toolchain w/ C++, wchar, locale +# +# BR2_PACKAGE_FBV is not set + +# +# freerdp needs a toolchain w/ wchar, dynamic library, threads, C++ +# +# BR2_PACKAGE_GRAPHICSMAGICK is not set +# BR2_PACKAGE_IMAGEMAGICK is not set +# BR2_PACKAGE_LIBGLVND is not set + +# +# linux-fusion needs a Linux kernel to be built +# + +# +# mesa3d needs a toolchain w/ C++, NPTL, dynamic library +# + +# +# ocrad needs a toolchain w/ C++ +# + +# +# ogre needs a toolchain w/ C++, dynamic library, gcc >= 4.8, threads, wchar +# +# BR2_PACKAGE_PSPLASH is not set +# BR2_PACKAGE_SDL is not set +# BR2_PACKAGE_SDL2 is not set +# BR2_PACKAGE_VULKAN_HEADERS is not set + +# +# Other GUIs +# +BR2_PACKAGE_QT5_JSCORE_AVAILABLE=y + +# +# Qt5 needs host g++ >= 5.0, and a toolchain w/ gcc >= 5.0, wchar, NPTL, C++, dynamic library +# +BR2_PACKAGE_QT6_ARCH_SUPPORTS=y + +# +# qt6 needs a toolchain w/ C++, threads, wchar, dynamic library, gcc >= 8, host gcc >= 8 +# + +# +# tekui needs a Lua interpreter and a toolchain w/ threads, dynamic library +# + +# +# weston needs udev and a toolchain w/ locale, threads, dynamic library, headers >= 3.0 +# +# BR2_PACKAGE_XORG7 is not set + +# +# apitrace needs a toolchain w/ C++, wchar, dynamic library, threads, gcc >= 7 +# + +# +# mupdf needs a toolchain w/ C++, gcc >= 4.9 +# + +# +# vte needs a uClibc or glibc toolchain w/ wchar, threads, C++, gcc >= 10 +# + +# +# vte needs an OpenGL or an OpenGL-EGL/wayland backend +# +# BR2_PACKAGE_XKEYBOARD_CONFIG is not set + +# +# Hardware handling +# + +# +# Firmware +# +# BR2_PACKAGE_ARMBIAN_FIRMWARE is not set +# BR2_PACKAGE_B43_FIRMWARE is not set +# BR2_PACKAGE_BRCMFMAC_SDIO_FIRMWARE_RPI is not set +# BR2_PACKAGE_LINUX_FIRMWARE is not set +# BR2_PACKAGE_MURATA_CYW_FW is not set +# BR2_PACKAGE_ODROIDC2_FIRMWARE is not set +# BR2_PACKAGE_QCOM_DB410C_FIRMWARE is not set +# BR2_PACKAGE_RCW_SMARC_SAL28 is not set +# BR2_PACKAGE_RPI_FIRMWARE is not set +# BR2_PACKAGE_UX500_FIRMWARE is not set +# BR2_PACKAGE_WILC1000_FIRMWARE is not set +# BR2_PACKAGE_WILC3000_FIRMWARE is not set +# BR2_PACKAGE_WILINK_BT_FIRMWARE is not set +# BR2_PACKAGE_ZD1211_FIRMWARE is not set +# BR2_PACKAGE_18XX_TI_UTILS is not set +# BR2_PACKAGE_ACPICA is not set +# BR2_PACKAGE_ACPID is not set + +# +# acpitool needs a toolchain w/ threads, C++, dynamic library +# +# BR2_PACKAGE_AER_INJECT is not set +# BR2_PACKAGE_ALTERA_STAPL is not set + +# +# apcupsd needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_AVRDUDE is not set + +# +# bcache-tools needs udev /dev management +# + +# +# brickd needs udev /dev management, a toolchain w/ threads, wchar +# +# BR2_PACKAGE_BRLTTY is not set + +# +# cc-tool needs a toolchain w/ C++, threads, wchar, gcc >= 4.9 +# +# BR2_PACKAGE_CDRKIT is not set +BR2_PACKAGE_CPUBURN_ARM_ARCH_SUPPORTS=y +# BR2_PACKAGE_CPUBURN_ARM is not set +# BR2_PACKAGE_CRUCIBLE is not set +# BR2_PACKAGE_CRYPTSETUP is not set +# BR2_PACKAGE_CWIID is not set + +# +# dahdi-linux needs a Linux kernel to be built +# + +# +# dahdi-tools needs a toolchain w/ threads and a Linux kernel to be built +# +# BR2_PACKAGE_DBUS is not set + +# +# dbusbroker needs systemd and a toolchain w/ threads +# + +# +# dbus-cxx needs a toolchain w/ C++, threads, gcc >= 7 and dynamic library support +# +# BR2_PACKAGE_DFU_UTIL is not set +# BR2_PACKAGE_DMIDECODE is not set +# BR2_PACKAGE_DMRAID is not set + +# +# dt-utils needs udev /dev management +# + +# +# dtbocfg needs a Linux kernel to be built +# +# BR2_PACKAGE_DTV_SCAN_TABLES is not set +# BR2_PACKAGE_DUMP1090 is not set +# BR2_PACKAGE_DVB_APPS is not set +# BR2_PACKAGE_DVBSNOOP is not set + +# +# eudev needs eudev /dev management +# +# BR2_PACKAGE_EVEMU is not set +# BR2_PACKAGE_EVTEST is not set +# BR2_PACKAGE_FAN_CTRL is not set +# BR2_PACKAGE_FCONFIG is not set +BR2_PACKAGE_FLASHROM_ARCH_SUPPORTS=y +# BR2_PACKAGE_FLASHROM is not set +# BR2_PACKAGE_FMTOOLS is not set +# BR2_PACKAGE_FREEIPMI is not set +# BR2_PACKAGE_FREESCALE_IMX is not set +# BR2_PACKAGE_FXLOAD is not set +# BR2_PACKAGE_GPM is not set +# BR2_PACKAGE_GPSD is not set + +# +# gptfdisk needs a toolchain w/ C++ +# +# BR2_PACKAGE_GVFS is not set +# BR2_PACKAGE_HWDATA is not set +# BR2_PACKAGE_HWLOC is not set +# BR2_PACKAGE_INPUT_EVENT_DAEMON is not set +# BR2_PACKAGE_IPMITOOL is not set +# BR2_PACKAGE_IRDA_UTILS is not set +# BR2_PACKAGE_KBD is not set +# BR2_PACKAGE_LCDPROC is not set + +# +# libiec61850 needs a toolchain w/ C++, threads, dynamic library +# +# BR2_PACKAGE_LIBMANETTE is not set +# BR2_PACKAGE_LIBUBOOTENV is not set +# BR2_PACKAGE_LIBUIO is not set + +# +# linux-backports needs a Linux kernel to be built +# +# BR2_PACKAGE_LINUX_SERIAL_TEST is not set +# BR2_PACKAGE_LINUXCONSOLETOOLS is not set + +# +# lirc-tools needs a toolchain w/ threads, dynamic library, C++ +# +# BR2_PACKAGE_LM_SENSORS is not set + +# +# lshw needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LSSCSI is not set +# BR2_PACKAGE_LSUIO is not set +# BR2_PACKAGE_LUKSMETA is not set +# BR2_PACKAGE_LVM2 is not set + +# +# mali-driver needs a Linux kernel to be built +# +# BR2_PACKAGE_MBPFAN is not set +# BR2_PACKAGE_MDADM is not set +# BR2_PACKAGE_MDEVD is not set + +# +# mdio-tools needs a Linux kernel to be built +# +# BR2_PACKAGE_MEMTESTER is not set +# BR2_PACKAGE_MEMTOOL is not set +# BR2_PACKAGE_MINICOM is not set +# BR2_PACKAGE_NANOCOM is not set +# BR2_PACKAGE_NEARD is not set +# BR2_PACKAGE_NVIDIA_MODPROBE is not set +# BR2_PACKAGE_NVME is not set +# BR2_PACKAGE_OFONO is not set + +# +# ola needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.8 +# +# BR2_PACKAGE_OPEN2300 is not set + +# +# openfpgaloader needs a toolchain w/ threads, C++, gcc >= 4.9 +# +# BR2_PACKAGE_OPENIPMI is not set +# BR2_PACKAGE_OPENOCD is not set +# BR2_PACKAGE_PARTED is not set +# BR2_PACKAGE_PCIUTILS is not set +# BR2_PACKAGE_PDBG is not set +# BR2_PACKAGE_PICOCOM is not set +# BR2_PACKAGE_PIGPIO is not set + +# +# powertop needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_PPS_TOOLS is not set +# BR2_PACKAGE_QORIQ_CADENCE_DP_FIRMWARE is not set +# BR2_PACKAGE_RASPI_GPIO is not set +# BR2_PACKAGE_READ_EDID is not set +# BR2_PACKAGE_RNG_TOOLS is not set +# BR2_PACKAGE_ROCKCHIP_MALI is not set +# BR2_PACKAGE_RS485CONF is not set +# BR2_PACKAGE_RTC_TOOLS is not set + +# +# rtl8188eu needs a Linux kernel to be built +# + +# +# rtl8189es needs a Linux kernel to be built +# + +# +# rtl8189fs needs a Linux kernel to be built +# + +# +# rtl8192eu needs a Linux kernel to be built +# + +# +# rtl8723bu needs a Linux kernel to be built +# + +# +# rtl8723ds needs a Linux kernel to be built +# + +# +# rtl8812au-aircrack-ng needs a Linux kernel to be built +# + +# +# rtl8821au needs a Linux kernel to be built +# +# BR2_PACKAGE_SANE_BACKENDS is not set +# BR2_PACKAGE_SDPARM is not set +BR2_PACKAGE_SEDUTIL_ARCH_SUPPORTS=y + +# +# sedutil needs a toolchain w/ C++, gcc >= 4.8, headers >= 3.12 +# +# BR2_PACKAGE_SETSERIAL is not set +# BR2_PACKAGE_SG3_UTILS is not set +# BR2_PACKAGE_SIGROK_CLI is not set +# BR2_PACKAGE_SISPMCTL is not set + +# +# smartmontools needs a toolchain w/ C++ +# +# BR2_PACKAGE_SMSTOOLS3 is not set +# BR2_PACKAGE_SPI_TOOLS is not set +# BR2_PACKAGE_SREDIRD is not set +# BR2_PACKAGE_STATSERIAL is not set +# BR2_PACKAGE_STM32FLASH is not set +# BR2_PACKAGE_SUNXI_MALI_UTGARD is not set +# BR2_PACKAGE_SYSSTAT is not set + +# +# targetcli-fb depends on Python +# +# BR2_PACKAGE_TI_UIM is not set +# BR2_PACKAGE_TI_UTILS is not set +# BR2_PACKAGE_TIO is not set +# BR2_PACKAGE_TRIGGERHAPPY is not set +# BR2_PACKAGE_UBOOT_TOOLS is not set +# BR2_PACKAGE_UBUS is not set + +# +# uccp420wlan needs a Linux kernel >= 4.2 to be built +# + +# +# udisks needs udev /dev management +# +# BR2_PACKAGE_UHUBCTL is not set +# BR2_PACKAGE_UMTPRD is not set + +# +# upower needs udev /dev management +# +# BR2_PACKAGE_USB_MODESWITCH is not set +# BR2_PACKAGE_USB_MODESWITCH_DATA is not set + +# +# usbguard needs a toolchain w/ C++, threads, dynamic library, gcc >= 8 +# + +# +# usbmount requires udev to be enabled +# + +# +# usbutils needs udev /dev management and toolchain w/ threads, gcc >= 4.9 +# +# BR2_PACKAGE_W_SCAN is not set + +# +# wilc kernel module needs a Linux kernel to be built +# +# BR2_PACKAGE_WIPE is not set +# BR2_PACKAGE_XORRISO is not set + +# +# xr819-xradio driver needs a Linux kernel to be built +# + +# +# Interpreter languages and scripting +# +# BR2_PACKAGE_4TH is not set +# BR2_PACKAGE_ENSCRIPT is not set +BR2_PACKAGE_HOST_ERLANG_ARCH_SUPPORTS=y +BR2_PACKAGE_ERLANG_ARCH_SUPPORTS=y +# BR2_PACKAGE_ERLANG is not set +# BR2_PACKAGE_EXECLINE is not set +# BR2_PACKAGE_FICL is not set +# BR2_PACKAGE_GUILE is not set +# BR2_PACKAGE_HASERL is not set +# BR2_PACKAGE_JANET is not set +# BR2_PACKAGE_JIMTCL is not set +# BR2_PACKAGE_LUA is not set +BR2_PACKAGE_PROVIDES_HOST_LUAINTERPRETER="host-lua" +BR2_PACKAGE_LUAJIT_ARCH_SUPPORTS=y +# BR2_PACKAGE_LUAJIT is not set +# BR2_PACKAGE_MICROPYTHON is not set +# BR2_PACKAGE_MOARVM is not set +BR2_PACKAGE_HOST_MONO_ARCH_SUPPORTS=y +BR2_PACKAGE_NODEJS_ARCH_SUPPORTS=y + +# +# nodejs needs a toolchain w/ C++, dynamic library, NPTL, gcc >= 7, wchar, host gcc >= 8 +# + +# +# octave needs a toolchain w/ C++ and fortran, gcc >= 4.8 +# +BR2_PACKAGE_HOST_OPENJDK_BIN_ARCH_SUPPORTS=y +BR2_PACKAGE_OPENJDK_ARCH_SUPPORTS=y + +# +# openjdk needs X.Org +# + +# +# openjdk needs glibc, and a toolchain w/ wchar, dynamic library, threads, C++, gcc >= 4.9, host gcc >= 4.9 +# +# BR2_PACKAGE_PERL is not set +BR2_PACKAGE_PHP_ARCH_SUPPORTS=y +# BR2_PACKAGE_PHP is not set +# BR2_PACKAGE_PYTHON3 is not set +# BR2_PACKAGE_QUICKJS is not set +# BR2_PACKAGE_RUBY is not set +# BR2_PACKAGE_TCL is not set + +# +# Libraries +# + +# +# Audio/Sound +# +# BR2_PACKAGE_ALSA_LIB is not set + +# +# alure needs a toolchain w/ C++, gcc >= 4.9, NPTL, wchar +# +# BR2_PACKAGE_AUBIO is not set +# BR2_PACKAGE_BCG729 is not set + +# +# caps needs a toolchain w/ C++, dynamic library +# +BR2_PACKAGE_FDK_AAC_ARCH_SUPPORTS=y + +# +# fdk-aac needs a toolchain w/ C++ +# +# BR2_PACKAGE_LIBAO is not set + +# +# asplib needs a toolchain w/ C++ +# +# BR2_PACKAGE_LIBBROADVOICE is not set +# BR2_PACKAGE_LIBCDAUDIO is not set +# BR2_PACKAGE_LIBCDDB is not set +# BR2_PACKAGE_LIBCDIO is not set +# BR2_PACKAGE_LIBCDIO_PARANOIA is not set +# BR2_PACKAGE_LIBCODEC2 is not set +# BR2_PACKAGE_LIBCUE is not set +# BR2_PACKAGE_LIBCUEFILE is not set +# BR2_PACKAGE_LIBEBUR128 is not set +# BR2_PACKAGE_LIBG7221 is not set +# BR2_PACKAGE_LIBGSM is not set +# BR2_PACKAGE_LIBID3TAG is not set +# BR2_PACKAGE_LIBILBC is not set +# BR2_PACKAGE_LIBLO is not set +# BR2_PACKAGE_LIBMAD is not set + +# +# libmodplug needs a toolchain w/ C++ +# +# BR2_PACKAGE_LIBMPD is not set +# BR2_PACKAGE_LIBMPDCLIENT is not set +# BR2_PACKAGE_LIBREPLAYGAIN is not set +# BR2_PACKAGE_LIBSAMPLERATE is not set + +# +# libsidplay2 needs a toolchain w/ C++ +# +# BR2_PACKAGE_LIBSILK is not set +# BR2_PACKAGE_LIBSNDFILE is not set + +# +# libsoundtouch needs a toolchain w/ C++ +# +# BR2_PACKAGE_LIBSOXR is not set +# BR2_PACKAGE_LIBVORBIS is not set +# BR2_PACKAGE_LILV is not set +# BR2_PACKAGE_LV2 is not set + +# +# mp4v2 needs a toolchain w/ C++ +# +BR2_PACKAGE_OPENAL_ARCH_SUPPORTS=y + +# +# openal needs a toolchain w/ NPTL, C++, gcc >= 4.9 +# + +# +# opencore-amr needs a toolchain w/ C++ +# +# BR2_PACKAGE_OPUS is not set +# BR2_PACKAGE_OPUSFILE is not set +# BR2_PACKAGE_PORTAUDIO is not set +# BR2_PACKAGE_SBC is not set +# BR2_PACKAGE_SPANDSP is not set +# BR2_PACKAGE_SPEEX is not set +# BR2_PACKAGE_SPEEXDSP is not set +# BR2_PACKAGE_SRATOM is not set + +# +# taglib needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_TINYALSA is not set +# BR2_PACKAGE_TREMOR is not set +# BR2_PACKAGE_VO_AACENC is not set +BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING_ARCH_SUPPORTS=y + +# +# webrtc-audio-processing needs a toolchain w/ C++, NPTL, gcc >= 4.8 +# + +# +# Compression and decompression +# +# BR2_PACKAGE_LIBARCHIVE is not set +# BR2_PACKAGE_LIBDEFLATE is not set +# BR2_PACKAGE_LIBMSPACK is not set + +# +# libsquish needs a toolchain w/ C++ +# +# BR2_PACKAGE_LIBZIP is not set +# BR2_PACKAGE_LZ4 is not set +# BR2_PACKAGE_LZO is not set +# BR2_PACKAGE_MINIZIP is not set +# BR2_PACKAGE_MINIZIP_ZLIB is not set + +# +# snappy needs a toolchain w/ C++ +# +# BR2_PACKAGE_SZIP is not set +# BR2_PACKAGE_ZCHUNK is not set +BR2_PACKAGE_ZLIB_NG_ARCH_SUPPORTS=y +# BR2_PACKAGE_ZLIB is not set +BR2_PACKAGE_PROVIDES_HOST_ZLIB="host-libzlib" +# BR2_PACKAGE_ZZIPLIB is not set + +# +# Crypto +# +# BR2_PACKAGE_BEARSSL is not set +# BR2_PACKAGE_BEECRYPT is not set +BR2_PACKAGE_BOTAN_ARCH_SUPPORTS=y + +# +# botan needs a toolchain w/ C++, threads, gcc >= 4.8 +# +# BR2_PACKAGE_CA_CERTIFICATES is not set + +# +# cryptodev needs a Linux kernel to be built +# + +# +# cryptopp needs a toolchain w/ C++, dynamic library, wchar +# +# BR2_PACKAGE_GCR is not set +# BR2_PACKAGE_GNUTLS is not set +# BR2_PACKAGE_LIBARGON2 is not set +# BR2_PACKAGE_LIBASSUAN is not set +# BR2_PACKAGE_LIBB2 is not set +# BR2_PACKAGE_LIBGCRYPT is not set +BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBGPG_ERROR is not set +BR2_PACKAGE_LIBGPG_ERROR_SYSCFG="aarch64-unknown-linux-gnu" +# BR2_PACKAGE_LIBGPGME is not set +# BR2_PACKAGE_LIBKCAPI is not set +# BR2_PACKAGE_LIBKSBA is not set +# BR2_PACKAGE_LIBMD is not set +# BR2_PACKAGE_LIBMHASH is not set +# BR2_PACKAGE_LIBNSS is not set + +# +# libolm needs a toolchain w/ C++, gcc >= 4.8 +# +# BR2_PACKAGE_LIBP11 is not set +# BR2_PACKAGE_LIBSCRYPT is not set +# BR2_PACKAGE_LIBSECRET is not set +# BR2_PACKAGE_LIBSHA1 is not set +# BR2_PACKAGE_LIBSODIUM is not set +# BR2_PACKAGE_LIBSSH is not set +# BR2_PACKAGE_LIBSSH2 is not set +# BR2_PACKAGE_LIBTOMCRYPT is not set +# BR2_PACKAGE_LIBUECC is not set +# BR2_PACKAGE_LIBXCRYPT is not set +# BR2_PACKAGE_MBEDTLS is not set +# BR2_PACKAGE_NETTLE is not set +# BR2_PACKAGE_OPENSSL is not set +BR2_PACKAGE_PROVIDES_HOST_OPENSSL="host-libopenssl" +# BR2_PACKAGE_PKCS11_HELPER is not set +# BR2_PACKAGE_RHASH is not set +# BR2_PACKAGE_TINYDTLS is not set +# BR2_PACKAGE_TPM2_PKCS11 is not set +# BR2_PACKAGE_TPM2_TSS is not set +# BR2_PACKAGE_TROUSERS is not set +# BR2_PACKAGE_USTREAM_SSL is not set +# BR2_PACKAGE_WOLFSSL is not set +# BR2_PACKAGE_WOLFTPM is not set + +# +# Database +# +# BR2_PACKAGE_BERKELEYDB is not set +# BR2_PACKAGE_GDBM is not set +# BR2_PACKAGE_HIREDIS is not set + +# +# kompexsqlite needs a toolchain w/ C++, wchar, threads, dynamic library +# + +# +# leveldb needs a toolchain w/ C++, threads, gcc >= 4.8 +# +# BR2_PACKAGE_LIBDBI is not set +# BR2_PACKAGE_LIBDBI_DRIVERS is not set +# BR2_PACKAGE_LIBGIT2 is not set +# BR2_PACKAGE_LIBMDBX is not set + +# +# libodb needs a toolchain w/ C++, threads +# +BR2_PACKAGE_MONGODB_ARCH_SUPPORTS=y + +# +# mongodb needs a glibc toolchain w/ wchar, threads, C++, gcc >= 7 +# + +# +# mysql needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_POSTGRESQL is not set +# BR2_PACKAGE_REDIS is not set +BR2_PACKAGE_ROCKSDB_ARCH_SUPPORTS=y + +# +# rocksdb needs a toolchain w/ C++, threads, wchar, gcc >= 4.8 +# +# BR2_PACKAGE_SQLCIPHER is not set +# BR2_PACKAGE_SQLITE is not set +# BR2_PACKAGE_UNIXODBC is not set + +# +# Filesystem +# +# BR2_PACKAGE_GAMIN is not set +# BR2_PACKAGE_LIBCONFIG is not set +# BR2_PACKAGE_LIBCONFUSE is not set +# BR2_PACKAGE_LIBFUSE is not set +# BR2_PACKAGE_LIBFUSE3 is not set +# BR2_PACKAGE_LIBLOCKFILE is not set +# BR2_PACKAGE_LIBNFS is not set +# BR2_PACKAGE_LIBSYSFS is not set +# BR2_PACKAGE_LOCKDEV is not set + +# +# physfs needs a toolchain w/ C++, threads +# + +# +# Graphics +# + +# +# assimp needs a toolchain w/ C++, wchar +# + +# +# at-spi2-atk depends on X.org +# + +# +# at-spi2-core depends on X.org +# +# BR2_PACKAGE_ATK is not set + +# +# atkmm needs a toolchain w/ C++, wchar, threads, gcc >= 7 +# +BR2_PACKAGE_BAYER2RGB_NEON_ARCH_SUPPORTS=y + +# +# bayer2rgb-neon needs a toolchain w/ C++, dynamic library, gcc >= 4.9 +# + +# +# bullet needs a toolchain w/ C++, dynamic library, threads, wchar +# +# BR2_PACKAGE_CAIRO is not set + +# +# cairomm needs a toolchain w/ C++, wchar, threads, gcc >= 7 +# + +# +# chipmunk needs an OpenGL backend +# + +# +# exempi needs a toolchain w/ C++, dynamic library, threads, wchar +# + +# +# exiv2 needs a uClibc or glibc toolchain w/ C++, wchar, dynamic library, threads +# +# BR2_PACKAGE_FONTCONFIG is not set +# BR2_PACKAGE_FREETYPE is not set +# BR2_PACKAGE_GD is not set +# BR2_PACKAGE_GDK_PIXBUF is not set +# BR2_PACKAGE_GIFLIB is not set + +# +# granite needs libgtk3 and a toolchain w/ wchar, threads, gcc >= 4.9 +# + +# +# graphite2 needs a toolchain w/ C++ +# + +# +# gtkmm3 needs libgtk3 and a toolchain w/ C++, wchar, threads, gcc >= 7 +# + +# +# harfbuzz needs a toolchain w/ C++, gcc >= 4.9 +# +# BR2_PACKAGE_IJS is not set +# BR2_PACKAGE_IMLIB2 is not set + +# +# intel-gmmlib needs a toolchain w/ dynamic library, C++ +# + +# +# irrlicht needs a toolchain w/ C++ +# +# BR2_PACKAGE_JASPER is not set +# BR2_PACKAGE_JBIG2DEC is not set +BR2_PACKAGE_JPEG_SIMD_SUPPORT=y +# BR2_PACKAGE_JPEG is not set + +# +# kms++ needs a toolchain w/ threads, C++, gcc >= 4.8, headers >= 4.11, wchar +# +# BR2_PACKAGE_LCMS2 is not set + +# +# lensfun needs a toolchain w/ C++, threads, wchar +# +# BR2_PACKAGE_LEPTONICA is not set +# BR2_PACKAGE_LIBART is not set +# BR2_PACKAGE_LIBDMTX is not set +# BR2_PACKAGE_LIBDRM is not set + +# +# libepoxy needs an OpenGL and/or OpenGL EGL backend +# +# BR2_PACKAGE_LIBEXIF is not set + +# +# libfm needs X.org and a toolchain w/ wchar, threads, C++, gcc >= 4.9 +# +# BR2_PACKAGE_LIBFM_EXTRA is not set + +# +# libfreeglut depends on X.org and needs an OpenGL backend +# + +# +# libfreeimage needs a toolchain w/ C++, dynamic library, wchar +# + +# +# libgeotiff needs a toolchain w/ C++, gcc >= 4.7, threads, wchar +# + +# +# libglew depends on X.org and needs an OpenGL backend +# + +# +# libglfw depends on X.org or Wayland and an OpenGL or GLES backend +# + +# +# libglu needs an OpenGL backend +# +# BR2_PACKAGE_LIBGTA is not set + +# +# libgtk3 needs a toolchain w/ wchar, threads, C++, gcc >= 4.9 +# + +# +# libgtk3 needs an OpenGL or an OpenGL-EGL/wayland backend +# +# BR2_PACKAGE_LIBMEDIAART is not set +# BR2_PACKAGE_LIBMNG is not set +# BR2_PACKAGE_LIBPNG is not set +# BR2_PACKAGE_LIBQRENCODE is not set + +# +# libraw needs a toolchain w/ C++ +# + +# +# librsvg needs a toolchain w/ wchar, threads, C++, gcc >= 4.9 +# +# BR2_PACKAGE_LIBSVG is not set +# BR2_PACKAGE_LIBSVG_CAIRO is not set +# BR2_PACKAGE_LIBSVGTINY is not set +# BR2_PACKAGE_LIBVA is not set + +# +# libvips needs a toolchain w/ wchar, threads, C++ +# + +# +# libwpe needs a toolchain w/ C++, dynamic library and an OpenEGL-capable backend +# +# BR2_PACKAGE_MENU_CACHE is not set + +# +# opencv3 needs a toolchain w/ C++, NPTL, wchar, dynamic library +# + +# +# opencv4 needs a toolchain w/ C++, NPTL, wchar, dynamic library, gcc >= 4.8 +# +# BR2_PACKAGE_OPENJPEG is not set + +# +# pango needs a toolchain w/ wchar, threads, C++, gcc >= 4.9 +# + +# +# pangomm needs a toolchain w/ C++, wchar, threads, gcc >= 7 +# +# BR2_PACKAGE_PIXMAN is not set + +# +# poppler needs a toolchain w/ wchar, C++, threads, dynamic library, gcc >= 7 +# +# BR2_PACKAGE_TIFF is not set +# BR2_PACKAGE_WAYLAND is not set +BR2_PACKAGE_WEBKITGTK_ARCH_SUPPORTS=y + +# +# webkitgtk needs libgtk3 and a toolchain w/ C++, wchar, threads, dynamic library, gcc >= 7, host gcc >= 4.9 +# +# BR2_PACKAGE_WEBP is not set + +# +# wlroots needs udev, EGL w/ Wayland backend and OpenGL ES support +# + +# +# woff2 needs a toolchain w/ C++ +# + +# +# wpebackend-fdo needs a toolchain w/ C++, wchar, threads, dynamic library and an OpenEGL-capable Wayland backend +# +BR2_PACKAGE_WPEWEBKIT_ARCH_SUPPORTS=y + +# +# wpewebkit needs a toolchain w/ C++, wchar, threads, dynamic library, gcc >= 7, host gcc >= 4.9 +# + +# +# wpewebkit needs an OpenGL ES w/ EGL-capable Wayland backend +# + +# +# zbar needs a toolchain w/ threads, C++ and headers >= 3.0 +# + +# +# zxing-cpp needs a toolchain w/ C++, dynamic library +# + +# +# Hardware handling +# +# BR2_PACKAGE_ACSCCID is not set +# BR2_PACKAGE_C_PERIPHERY is not set +# BR2_PACKAGE_CCID is not set +# BR2_PACKAGE_DTC is not set +BR2_PACKAGE_GNU_EFI_ARCH_SUPPORTS=y +# BR2_PACKAGE_GNU_EFI is not set +# BR2_PACKAGE_HACKRF is not set + +# +# hidapi needs udev /dev management and a toolchain w/ NPTL, threads, gcc >= 4.9 +# +# BR2_PACKAGE_JITTERENTROPY_LIBRARY is not set + +# +# lcdapi needs a toolchain w/ C++, threads +# + +# +# let-me-create needs a toolchain w/ C++, threads, dynamic library +# +# BR2_PACKAGE_LIBAIO is not set + +# +# libatasmart requires udev to be enabled +# + +# +# libblockdev needs udev /dev management and a toolchain w/ wchar, threads, dynamic library +# + +# +# libcec needs a toolchain w/ C++, wchar, threads, dynamic library, gcc >= 4.7 +# +# BR2_PACKAGE_LIBFREEFARE is not set +# BR2_PACKAGE_LIBFTDI is not set +# BR2_PACKAGE_LIBFTDI1 is not set +# BR2_PACKAGE_LIBGPHOTO2 is not set +# BR2_PACKAGE_LIBGPIOD is not set + +# +# libgudev needs udev /dev handling and a toolchain w/ wchar, threads +# +# BR2_PACKAGE_LIBHID is not set +# BR2_PACKAGE_LIBIIO is not set + +# +# libinput needs udev /dev management +# +# BR2_PACKAGE_LIBIQRF is not set +# BR2_PACKAGE_LIBLLCP is not set +# BR2_PACKAGE_LIBMBIM is not set +# BR2_PACKAGE_LIBNFC is not set +# BR2_PACKAGE_LIBPCIACCESS is not set +# BR2_PACKAGE_LIBPHIDGET is not set + +# +# libpri needs a Linux kernel to be built +# +# BR2_PACKAGE_LIBQMI is not set +# BR2_PACKAGE_LIBQRTR_GLIB is not set +# BR2_PACKAGE_LIBRAW1394 is not set +# BR2_PACKAGE_LIBRTLSDR is not set + +# +# libserial needs a toolchain w/ C++, gcc >= 5, threads, wchar +# +# BR2_PACKAGE_LIBSERIALPORT is not set +# BR2_PACKAGE_LIBSIGROK is not set +# BR2_PACKAGE_LIBSIGROKDECODE is not set +# BR2_PACKAGE_LIBSOC is not set + +# +# libss7 needs a Linux kernel to be built +# +# BR2_PACKAGE_LIBUSB is not set +# BR2_PACKAGE_LIBUSBGX is not set + +# +# libv4l needs a toolchain w/ threads, C++ and headers >= 3.0 +# +# BR2_PACKAGE_LIBXKBCOMMON is not set +BR2_PACKAGE_MRAA_ARCH_SUPPORTS=y +# BR2_PACKAGE_MRAA is not set +# BR2_PACKAGE_MTDEV is not set +BR2_PACKAGE_NE10_ARCH_SUPPORTS=y +# BR2_PACKAGE_NE10 is not set +# BR2_PACKAGE_NEARDAL is not set +# BR2_PACKAGE_OPENSC is not set +# BR2_PACKAGE_OWFS is not set +# BR2_PACKAGE_PCSC_LITE is not set + +# +# rpi-rgb-led-matrix needs a toolchain w/ C++, threads, dynamic library +# +# BR2_PACKAGE_TSLIB is not set + +# +# uhd needs a toolchain w/ C++, NPTL, wchar, dynamic library +# + +# +# urg needs a toolchain w/ C++ +# + +# +# Javascript +# +# BR2_PACKAGE_ANGULARJS is not set +# BR2_PACKAGE_BOOTSTRAP is not set +# BR2_PACKAGE_CHARTJS is not set +# BR2_PACKAGE_DATATABLES is not set +# BR2_PACKAGE_DUKTAPE is not set +# BR2_PACKAGE_EXPLORERCANVAS is not set +# BR2_PACKAGE_FLOT is not set +# BR2_PACKAGE_FORGE is not set +# BR2_PACKAGE_JQUERY is not set +# BR2_PACKAGE_JSMIN is not set +# BR2_PACKAGE_JSON_JAVASCRIPT is not set +# BR2_PACKAGE_JSZIP is not set +# BR2_PACKAGE_OPENLAYERS is not set +# BR2_PACKAGE_POPPERJS is not set +# BR2_PACKAGE_VIS_NETWORK is not set +# BR2_PACKAGE_VUEJS is not set + +# +# JSON/XML +# + +# +# benejson needs a toolchain w/ C++ +# +# BR2_PACKAGE_CJSON is not set +# BR2_PACKAGE_EXPAT is not set +# BR2_PACKAGE_JANSSON is not set +# BR2_PACKAGE_JOSE is not set +# BR2_PACKAGE_JSMN is not set +# BR2_PACKAGE_JSON_C is not set + +# +# json-for-modern-cpp needs a toolchain w/ C++, gcc >= 4.9 +# +# BR2_PACKAGE_JSON_GLIB is not set + +# +# jsoncpp needs a toolchain w/ C++, gcc >= 4.7 +# +# BR2_PACKAGE_LIBBSON is not set +# BR2_PACKAGE_LIBFASTJSON is not set + +# +# libjson needs a toolchain w/ C++ +# +# BR2_PACKAGE_LIBROXML is not set +# BR2_PACKAGE_LIBUCL is not set +# BR2_PACKAGE_LIBXML2 is not set + +# +# libxml++ needs a toolchain w/ C++, wchar, threads, gcc >= 7 +# +# BR2_PACKAGE_LIBXMLRPC is not set +# BR2_PACKAGE_LIBXSLT is not set +# BR2_PACKAGE_LIBYAML is not set +# BR2_PACKAGE_MXML is not set + +# +# pugixml needs a toolchain w/ C++ +# + +# +# rapidjson needs a toolchain w/ C++ +# +# BR2_PACKAGE_RAPIDXML is not set +# BR2_PACKAGE_RAPTOR is not set +# BR2_PACKAGE_SERD is not set +# BR2_PACKAGE_SORD is not set + +# +# tinyxml needs a toolchain w/ C++ +# + +# +# tinyxml2 needs a toolchain w/ C++ +# + +# +# valijson needs a toolchain w/ C++ +# + +# +# xerces-c++ needs a toolchain w/ C++, dynamic library, wchar +# + +# +# xml-security-c needs a toolchain w/ C++, wchar, dynamic library, threads, gcc >= 4.7 +# +# BR2_PACKAGE_YAJL is not set + +# +# yaml-cpp needs a toolchain w/ C++, gcc >= 4.7 +# + +# +# Logging +# + +# +# glog needs a toolchain w/ C++ +# + +# +# hawktracer needs a toolchain w/ C++, gcc >= 4.8 +# +# BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set +# BR2_PACKAGE_LIBLOGGING is not set + +# +# log4cplus needs a toolchain w/ C++, wchar, threads, gcc >= 4.8 +# + +# +# log4cpp needs a toolchain w/ C++, threads +# + +# +# log4cxx needs a toolchain w/ C++, threads, dynamic library +# + +# +# log4qt needs qt5 +# + +# +# opentracing-cpp needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.8 +# + +# +# spdlog needs a toolchain w/ C++, threads, wchar +# + +# +# ulog needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_ZLOG is not set + +# +# Multimedia +# + +# +# bento4 support needs a toolchain with C++ +# +# BR2_PACKAGE_BITSTREAM is not set +# BR2_PACKAGE_DAV1D is not set + +# +# kvazaar needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_LIBAACS is not set + +# +# libass needs a toolchain w/ C++, gcc >= 4.9 +# +# BR2_PACKAGE_LIBBDPLUS is not set +# BR2_PACKAGE_LIBBLURAY is not set +BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS=y + +# +# libcamera needs a toolchain w/ C++, threads, wchar, dynamic library, gcc >= 8 +# + +# +# libcamera-apps needs a toolchain w/ C++, threads, wchar, dynamic library, gcc >= 8 +# +# BR2_PACKAGE_LIBDVBCSA is not set +# BR2_PACKAGE_LIBDVBPSI is not set + +# +# libdvbsi++ needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_LIBDVDCSS is not set +# BR2_PACKAGE_LIBDVDNAV is not set +# BR2_PACKAGE_LIBDVDREAD is not set + +# +# libebml needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LIBHDHOMERUN is not set + +# +# libmatroska needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LIBMMS is not set +# BR2_PACKAGE_LIBMPEG2 is not set +# BR2_PACKAGE_LIBOGG is not set +# BR2_PACKAGE_LIBOPENAPTX is not set +BR2_PACKAGE_LIBOPENH264_ARCH_SUPPORTS=y + +# +# libopenh264 needs a toolchain w/ C++, dynamic library, threads +# +# BR2_PACKAGE_LIBOPUSENC is not set +# BR2_PACKAGE_LIBTHEORA is not set +# BR2_PACKAGE_LIBUDFREAD is not set +# BR2_PACKAGE_LIBVPX is not set + +# +# libyuv needs a toolchain w/ C++, dynamic library +# + +# +# live555 needs a toolchain w/ C++ +# + +# +# mediastreamer needs a toolchain w/ threads, C++, dynamic library, gcc >= 5 +# +# BR2_PACKAGE_X264 is not set + +# +# x265 needs a toolchain w/ C++, threads, dynamic library +# + +# +# Networking +# + +# +# agent++ needs a toolchain w/ threads, C++, dynamic library +# + +# +# azmq needs a toolchain w/ C++11, wchar and threads +# + +# +# azure-iot-sdk-c needs a toolchain w/ C++, NPTL and wchar +# + +# +# batman-adv needs a Linux kernel to be built +# + +# +# belle-sip needs a toolchain w/ threads, C++, dynamic library, wchar +# +# BR2_PACKAGE_C_ARES is not set +# BR2_PACKAGE_CGIC is not set +# BR2_PACKAGE_CNI_PLUGINS is not set + +# +# cppzmq needs a toolchain w/ C++, threads +# + +# +# curlpp needs a toolchain w/ C++, dynamic library +# + +# +# czmq needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_DAQ is not set +# BR2_PACKAGE_DAQ3 is not set +# BR2_PACKAGE_DAVICI is not set +# BR2_PACKAGE_DHT is not set +# BR2_PACKAGE_ENET is not set + +# +# filemq needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_FLICKCURL is not set +# BR2_PACKAGE_FREERADIUS_CLIENT is not set +# BR2_PACKAGE_GENSIO is not set +# BR2_PACKAGE_GEOIP is not set +# BR2_PACKAGE_GLIB_NETWORKING is not set + +# +# grpc needs a toolchain w/ C++, threads, dynamic library, gcc >= 5 +# +# BR2_PACKAGE_GSSDP is not set +# BR2_PACKAGE_GUPNP is not set +# BR2_PACKAGE_GUPNP_AV is not set +# BR2_PACKAGE_GUPNP_DLNA is not set + +# +# ibrcommon needs a toolchain w/ C++, threads +# + +# +# ibrdtn needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_LIBCGI is not set + +# +# libcgicc needs a toolchain w/ C++ +# +# BR2_PACKAGE_LIBCOAP is not set + +# +# libcpprestsdk needs a toolchain w/ NPTL, C++, wchar, locale +# +# BR2_PACKAGE_LIBCURL is not set +# BR2_PACKAGE_LIBDNET is not set +# BR2_PACKAGE_LIBEXOSIP2 is not set +# BR2_PACKAGE_LIBEST is not set +# BR2_PACKAGE_LIBFCGI is not set +# BR2_PACKAGE_LIBGSASL is not set +# BR2_PACKAGE_LIBHTP is not set +# BR2_PACKAGE_LIBHTTPPARSER is not set + +# +# libhttpserver needs a toolchain w/ C++, threads, gcc >= 5 +# +# BR2_PACKAGE_LIBIDN is not set +# BR2_PACKAGE_LIBIDN2 is not set +# BR2_PACKAGE_LIBISCSI is not set +# BR2_PACKAGE_LIBKRB5 is not set +# BR2_PACKAGE_LIBLDNS is not set +# BR2_PACKAGE_LIBMAXMINDDB is not set +# BR2_PACKAGE_LIBMBUS is not set + +# +# libmemcached needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_LIBMICROHTTPD is not set +# BR2_PACKAGE_LIBMINIUPNPC is not set +# BR2_PACKAGE_LIBMNL is not set +# BR2_PACKAGE_LIBMODBUS is not set + +# +# libmodsecurity needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_LIBNATPMP is not set +# BR2_PACKAGE_LIBNDP is not set +# BR2_PACKAGE_LIBNET is not set +# BR2_PACKAGE_LIBNETCONF2 is not set +# BR2_PACKAGE_LIBNETFILTER_ACCT is not set +# BR2_PACKAGE_LIBNETFILTER_CONNTRACK is not set +# BR2_PACKAGE_LIBNETFILTER_CTHELPER is not set +# BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT is not set +# BR2_PACKAGE_LIBNETFILTER_LOG is not set +# BR2_PACKAGE_LIBNETFILTER_QUEUE is not set +# BR2_PACKAGE_LIBNFNETLINK is not set +# BR2_PACKAGE_LIBNFTNL is not set +# BR2_PACKAGE_LIBNICE is not set +# BR2_PACKAGE_LIBNIDS is not set +# BR2_PACKAGE_LIBNL is not set + +# +# libnpupnp needs a toolchain w/ C++, threads, gcc >= 4.9 +# +# BR2_PACKAGE_LIBOAUTH is not set +# BR2_PACKAGE_LIBOPING is not set +# BR2_PACKAGE_LIBOSIP2 is not set +# BR2_PACKAGE_LIBPAGEKITE is not set +# BR2_PACKAGE_LIBPCAP is not set + +# +# libpjsip needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_LIBPSL is not set +# BR2_PACKAGE_LIBRELP is not set +# BR2_PACKAGE_LIBRSYNC is not set +# BR2_PACKAGE_LIBSHAIRPLAY is not set +# BR2_PACKAGE_LIBSHOUT is not set +# BR2_PACKAGE_LIBSOCKETCAN is not set +# BR2_PACKAGE_LIBSOUP is not set +# BR2_PACKAGE_LIBSRTP is not set +# BR2_PACKAGE_LIBSTROPHE is not set +# BR2_PACKAGE_LIBTEAM is not set +# BR2_PACKAGE_LIBTELNET is not set +# BR2_PACKAGE_LIBTIRPC is not set + +# +# libtorrent needs a toolchain w/ C++, threads +# + +# +# libtorrent-rasterbar needs a toolchain w/ C++, threads, wchar, gcc >= 4.9 +# +# BR2_PACKAGE_LIBUEV is not set +# BR2_PACKAGE_LIBUHTTPD is not set + +# +# libuhttpd needs a toolchain w/ gcc >= 4.9 +# +# BR2_PACKAGE_LIBUPNP is not set + +# +# libupnpp needs a toolchain w/ C++, threads, gcc >= 4.9 +# +# BR2_PACKAGE_LIBURIPARSER is not set + +# +# libutp support needs a toolchain with C++ +# +# BR2_PACKAGE_LIBUWSC is not set +# BR2_PACKAGE_LIBVNCSERVER is not set +# BR2_PACKAGE_LIBWEBSOCK is not set +# BR2_PACKAGE_LIBWEBSOCKETS is not set +# BR2_PACKAGE_LIBYANG is not set +# BR2_PACKAGE_LKSCTP_TOOLS is not set +# BR2_PACKAGE_MBUFFER is not set +# BR2_PACKAGE_MONGOOSE is not set +# BR2_PACKAGE_NANOMSG is not set +# BR2_PACKAGE_NEON is not set + +# +# netopeer2 needs a toolchain w/ gcc >= 4.8, C++, threads, dynamic library +# +# BR2_PACKAGE_NGHTTP2 is not set + +# +# norm needs a toolchain w/ C++, threads, dynamic library +# +# BR2_PACKAGE_NSS_MYHOSTNAME is not set +# BR2_PACKAGE_NSS_PAM_LDAPD is not set + +# +# omniORB needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_OPEN_ISNS is not set +# BR2_PACKAGE_OPEN62541 is not set +# BR2_PACKAGE_OPENLDAP is not set + +# +# openmpi needs a toolchain w/ dynamic library, NPTL, wchar, C++ +# +# BR2_PACKAGE_OPENPGM is not set + +# +# openzwave needs a toolchain w/ C++, dynamic library, NPTL, wchar +# + +# +# ortp needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_PAHO_MQTT_C is not set + +# +# paho-mqtt-cpp needs a toolchain w/ threads, C++ +# + +# +# pistache needs a toolchain w/ C++, gcc >= 7, threads, wchar, not binutils bug 27597 +# +# BR2_PACKAGE_QDECODER is not set + +# +# qpid-proton needs a toolchain w/ C++, dynamic library, threads +# +# BR2_PACKAGE_RABBITMQ_C is not set + +# +# resiprocate needs a toolchain w/ C++, threads, wchar +# + +# +# restclient-cpp needs a toolchain w/ C++, gcc >= 4.8 +# +# BR2_PACKAGE_RTMPDUMP is not set +# BR2_PACKAGE_SIPROXD is not set +# BR2_PACKAGE_SLIRP is not set +# BR2_PACKAGE_SLIRP4NETNS is not set + +# +# snmp++ needs a toolchain w/ threads, C++, dynamic library +# +# BR2_PACKAGE_SOFIA_SIP is not set + +# +# sysrepo needs a toolchain w/ C++, NPTL, dynamic library, gcc >= 4.8 +# + +# +# thrift needs a toolchain w/ C++, wchar, threads +# +# BR2_PACKAGE_USBREDIR is not set + +# +# wampcc needs a toolchain w/ C++, NPTL, dynamic library +# + +# +# websocketpp needs a toolchain w/ C++ and gcc >= 4.8 +# + +# +# zeromq needs a toolchain w/ C++, threads +# + +# +# zmqpp needs a toolchain w/ C++, threads, gcc >= 4.7 +# + +# +# zyre needs a toolchain w/ C++, threads +# + +# +# Other +# + +# +# ACE needs a glibc toolchain, dynamic library, C++, gcc >= 4.8 +# +# BR2_PACKAGE_APR is not set +# BR2_PACKAGE_APR_UTIL is not set + +# +# armadillo needs a toolchain w/ C++ +# + +# +# atf needs a toolchain w/ C++ +# +# BR2_PACKAGE_AVRO_C is not set + +# +# bctoolbox needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_BDWGC is not set + +# +# belr needs a toolchain w/ threads, C++ +# + +# +# boost needs a toolchain w/ C++, threads, wchar +# + +# +# c-capnproto needs host and target gcc >= 5 w/ C++14, threads, atomic, ucontext and not gcc bug 64735 +# + +# +# capnproto needs host and target gcc >= 5 w/ C++14, threads, atomic, ucontext and not gcc bug 64735 +# + +# +# cctz needs a toolchain w/ C++, threads, gcc >= 4.8 +# + +# +# cereal needs a toolchain w/ C++, gcc >= 4.7, threads, wchar +# + +# +# clang needs a toolchain w/ wchar, threads, C++, gcc >= 5, dynamic library, host gcc >= 5 +# +# BR2_PACKAGE_CMOCKA is not set + +# +# cppcms needs a toolchain w/ C++, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_CRACKLIB is not set + +# +# dawgdic needs a toolchain w/ C++, gcc >= 4.6 +# +# BR2_PACKAGE_DING_LIBS is not set + +# +# double-conversion needs a toolchain w/ C++ +# + +# +# eigen needs a toolchain w/ C++ +# +# BR2_PACKAGE_ELFUTILS is not set +# BR2_PACKAGE_ELL is not set +# BR2_PACKAGE_FFTW is not set + +# +# flann needs a toolchain w/ C++, dynamic library +# + +# +# flatbuffers needs a toolchain w/ C++, gcc >= 4.7 +# +# BR2_PACKAGE_FLATCC is not set +# BR2_PACKAGE_GCONF is not set + +# +# gdal needs a toolchain w/ C++, dynamic library, gcc >= 4.7, not binutils bug 27597, threads, wchar +# + +# +# gflags needs a toolchain w/ C++ +# + +# +# gli needs a toolchain w/ C++ +# + +# +# glibmm needs a toolchain w/ C++, wchar, threads, gcc >= 7 +# + +# +# glm needs a toolchain w/ C++ +# +# BR2_PACKAGE_GMP is not set +BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS=y + +# +# gobject-introspection needs python3 +# +# BR2_PACKAGE_GSL is not set + +# +# gtest needs a toolchain w/ C++, wchar, threads, gcc >= 5 +# +# BR2_PACKAGE_GUMBO_PARSER is not set +BR2_PACKAGE_JEMALLOC_ARCH_SUPPORTS=y +# BR2_PACKAGE_JEMALLOC is not set +BR2_PACKAGE_LAPACK_ARCH_SUPPORTS=y + +# +# lapack/blas needs a toolchain w/ fortran +# +BR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS=y + +# +# libabseil-cpp needs a toolchain w/ gcc >= 4.9, C++, threads, dynamic library +# +# BR2_PACKAGE_LIBARGTABLE2 is not set +BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBATOMIC_OPS is not set +# BR2_PACKAGE_LIBAVL is not set +# BR2_PACKAGE_LIBB64 is not set +# BR2_PACKAGE_LIBBACKTRACE is not set +BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBBSD is not set +# BR2_PACKAGE_LIBBYTESIZE is not set +# BR2_PACKAGE_LIBCAP is not set +# BR2_PACKAGE_LIBCAP_NG is not set + +# +# libcgroup needs a glibc toolchain w/ C++ +# +# BR2_PACKAGE_LIBCLC is not set +# BR2_PACKAGE_LIBCORRECT is not set + +# +# libcrossguid needs a toolchain w/ C++, gcc >= 4.7 +# +# BR2_PACKAGE_LIBCSV is not set +# BR2_PACKAGE_LIBDAEMON is not set +# BR2_PACKAGE_LIBDILL is not set +BR2_PACKAGE_LIBEASTL_ARCH_SUPPORTS=y + +# +# libeastl needs a toolchain w/ C++, threads, gcc >= 4.9 +# +# BR2_PACKAGE_LIBEE is not set +# BR2_PACKAGE_LIBEV is not set +# BR2_PACKAGE_LIBEVDEV is not set +# BR2_PACKAGE_LIBEVENT is not set + +# +# libexecinfo needs a musl or uclibc toolchain w/ dynamic library +# +# BR2_PACKAGE_LIBFFI is not set + +# +# libfutils needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_LIBGEE is not set + +# +# libgeos needs a toolchain w/ C++, wchar, threads not binutils bug 27597 +# +# BR2_PACKAGE_LIBGLIB2 is not set +# BR2_PACKAGE_LIBGLOB is not set + +# +# libical needs a toolchain w/ C++, dynamic library, wchar +# +# BR2_PACKAGE_LIBITE is not set + +# +# libks needs a toolchain w/ C++, NPTL, dynamic library +# + +# +# liblinear needs a toolchain w/ C++ +# + +# +# libloki needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_LIBNPTH is not set +BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y +# BR2_PACKAGE_LIBNSPR is not set + +# +# libosmium needs a toolchain w/ C++, wchar, threads, gcc >= 4.7 +# + +# +# libpeas needs python3 +# +# BR2_PACKAGE_LIBPFM4 is not set + +# +# libplist needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_LIBPTHREAD_STUBS is not set +# BR2_PACKAGE_LIBPTHSEM is not set +# BR2_PACKAGE_LIBPWQUALITY is not set +# BR2_PACKAGE_LIBQB is not set +BR2_PACKAGE_LIBSECCOMP_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBSECCOMP is not set + +# +# libshdata needs a toolchain w/ C++, threads +# + +# +# libsigc++ needs a toolchain w/ C++, gcc >= 7 +# +BR2_PACKAGE_LIBSIGSEGV_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBSIGSEGV is not set + +# +# libspatialindex needs a toolchain w/ C++, gcc >= 4.7 +# +# BR2_PACKAGE_LIBTALLOC is not set +# BR2_PACKAGE_LIBTASN1 is not set +# BR2_PACKAGE_LIBTOMMATH is not set +# BR2_PACKAGE_LIBTPL is not set +# BR2_PACKAGE_LIBUBOX is not set +# BR2_PACKAGE_LIBUCI is not set +BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBUNWIND is not set +BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS=y +# BR2_PACKAGE_LIBURCU is not set +# BR2_PACKAGE_LIBURING is not set +# BR2_PACKAGE_LIBUV is not set +# BR2_PACKAGE_LINUX_PAM is not set +# BR2_PACKAGE_LIQUID_DSP is not set +BR2_PACKAGE_LLVM_ARCH_SUPPORTS=y +BR2_PACKAGE_LLVM_TARGET_ARCH="AArch64" + +# +# llvm needs a toolchain w/ wchar, threads, C++, gcc >= 5, dynamic library, host gcc >= 5 +# +# BR2_PACKAGE_LTTNG_LIBUST is not set +# BR2_PACKAGE_MATIO is not set +# BR2_PACKAGE_MPC is not set +# BR2_PACKAGE_MPDECIMAL is not set +# BR2_PACKAGE_MPFR is not set +# BR2_PACKAGE_MPIR is not set + +# +# msgpack needs a toolchain w/ C++ +# +BR2_PACKAGE_OPENBLAS_DEFAULT_TARGET="ARMV8" +BR2_PACKAGE_OPENBLAS_ARCH_SUPPORTS=y +# BR2_PACKAGE_OPENBLAS is not set +# BR2_PACKAGE_ORC is not set +# BR2_PACKAGE_P11_KIT is not set +BR2_PACKAGE_POCO_ARCH_SUPPORTS=y + +# +# poco needs a toolchain w/ wchar, NPTL, C++, dynamic library, gcc >= 5 w/ C++14 +# +BR2_PACKAGE_HOST_PROTOBUF_ARCH_SUPPORTS=y +BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS=y + +# +# protobuf needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.8 +# + +# +# protobuf-c needs a toolchain w/ C++, threads +# + +# +# protozero needs a toolchain w/ C++, gcc >= 4.7 +# + +# +# qhull needs a toolchain w/ C++, gcc >= 4.4 +# +# BR2_PACKAGE_QLIBC is not set + +# +# riemann-c-client needs a toolchain w/ C++, threads +# + +# +# shapelib needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_SKALIBS is not set +# BR2_PACKAGE_SPHINXBASE is not set + +# +# tbb needs a glibc or musl toolchain w/ dynamic library, threads, C++ +# +# BR2_PACKAGE_TINYCBOR is not set + +# +# uvw needs a toolchain w/ NPTL, dynamic library, C++, gcc >= 7 +# + +# +# volk needs a toolchain w/ C++, NPTL, wchar, dynamic library +# + +# +# xapian needs a toolchain w/ C++ +# + +# +# Security +# +# BR2_PACKAGE_LIBAPPARMOR is not set +# BR2_PACKAGE_LIBSELINUX is not set +# BR2_PACKAGE_LIBSEMANAGE is not set +# BR2_PACKAGE_LIBSEPOL is not set +# BR2_PACKAGE_SAFECLIB is not set + +# +# softhsm2 needs a toolchain w/ C++, threads, gcc >= 4.8 and dynamic library support +# + +# +# Text and terminal handling +# +# BR2_PACKAGE_AUGEAS is not set + +# +# docopt-cpp needs a toolchain w/ C++, gcc >= 4.7 +# + +# +# enchant needs a toolchain w/ C++, threads, wchar +# + +# +# fmt needs a toolchain w/ C++, wchar +# +# BR2_PACKAGE_FSTRCMP is not set + +# +# icu needs a toolchain w/ C++, wchar, threads, gcc >= 4.9, host gcc >= 4.9 +# +# BR2_PACKAGE_INIH is not set +# BR2_PACKAGE_LIBCLI is not set +# BR2_PACKAGE_LIBEDIT is not set +# BR2_PACKAGE_LIBENCA is not set +# BR2_PACKAGE_LIBESTR is not set +# BR2_PACKAGE_LIBFRIBIDI is not set +# BR2_PACKAGE_LIBUNISTRING is not set +# BR2_PACKAGE_LINENOISE is not set +# BR2_PACKAGE_NCURSES is not set +# BR2_PACKAGE_NEWT is not set +# BR2_PACKAGE_ONIGURUMA is not set +# BR2_PACKAGE_PCRE is not set +# BR2_PACKAGE_PCRE2 is not set +# BR2_PACKAGE_POPT is not set + +# +# re2 needs a toolchain w/ C++, threads, gcc >= 4.8 +# +# BR2_PACKAGE_READLINE is not set +# BR2_PACKAGE_SLANG is not set + +# +# tclap needs a toolchain w/ C++ +# +# BR2_PACKAGE_UTF8PROC is not set + +# +# Mail +# +# BR2_PACKAGE_DOVECOT is not set +# BR2_PACKAGE_EXIM is not set +# BR2_PACKAGE_FETCHMAIL is not set +# BR2_PACKAGE_HEIRLOOM_MAILX is not set +# BR2_PACKAGE_LIBESMTP is not set +# BR2_PACKAGE_MSMTP is not set +# BR2_PACKAGE_MUTT is not set + +# +# Miscellaneous +# +# BR2_PACKAGE_AESPIPE is not set +# BR2_PACKAGE_BC is not set +BR2_PACKAGE_BITCOIN_ARCH_SUPPORTS=y + +# +# bitcoin needs a toolchain w/ C++, threads, wchar +# + +# +# clamav needs a toolchain w/ C++, dynamic library, threads, wchar +# +# BR2_PACKAGE_COLLECTD is not set +# BR2_PACKAGE_COLLECTL is not set + +# +# domoticz needs lua 5.3 and a toolchain w/ C++, gcc >= 6, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_EMPTY is not set +# BR2_PACKAGE_GITLAB_RUNNER is not set + +# +# gnuradio needs a toolchain w/ C++, NPTL, wchar, dynamic library +# +# BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set + +# +# gqrx needs a toolchain w/ C++, threads, wchar, dynamic library +# + +# +# gqrx needs qt5 +# +# BR2_PACKAGE_GSETTINGS_DESKTOP_SCHEMAS is not set +# BR2_PACKAGE_HAVEGED is not set +# BR2_PACKAGE_LINUX_SYSCALL_SUPPORT is not set +# BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set +# BR2_PACKAGE_NETDATA is not set + +# +# proj needs a toolchain w/ C++, gcc >= 4.7, threads, wchar +# +BR2_PACKAGE_QEMU_ARCH_SUPPORTS_TARGET=y +# BR2_PACKAGE_QEMU is not set + +# +# qpdf needs a toolchain w/ C++, gcc >= 5 +# +# BR2_PACKAGE_RTL_433 is not set +# BR2_PACKAGE_SHARED_MIME_INFO is not set + +# +# sunwait needs a toolchain w/ C++ +# + +# +# taskd needs a toolchain w/ C++, wchar, dynamic library +# +BR2_PACKAGE_XMRIG_ARCH_SUPPORTS=y + +# +# xmrig needs a glibc or musl toolchain w/ NPTL, dynamic library, C++ +# +# BR2_PACKAGE_XUTIL_UTIL_MACROS is not set + +# +# Networking applications +# + +# +# aircrack-ng needs a toolchain w/ dynamic library, threads, C++ +# +# BR2_PACKAGE_ALFRED is not set +# BR2_PACKAGE_AOETOOLS is not set +# BR2_PACKAGE_APACHE is not set +# BR2_PACKAGE_ARGUS is not set +# BR2_PACKAGE_ARP_SCAN is not set +# BR2_PACKAGE_ARPTABLES is not set + +# +# asterisk needs a glibc or uClibc toolchain w/ C++, dynamic library, threads, wchar +# +# BR2_PACKAGE_ATFTP is not set +# BR2_PACKAGE_AVAHI is not set +# BR2_PACKAGE_AXEL is not set +# BR2_PACKAGE_BABELD is not set +# BR2_PACKAGE_BANDWIDTHD is not set +# BR2_PACKAGE_BATCTL is not set + +# +# bcusdk needs a toolchain w/ C++ +# +# BR2_PACKAGE_BIND is not set +# BR2_PACKAGE_BIRD is not set +# BR2_PACKAGE_BLUEZ5_UTILS is not set +# BR2_PACKAGE_BMON is not set +# BR2_PACKAGE_BMX7 is not set + +# +# boinc needs a toolchain w/ dynamic library, C++, threads, gcc >= 4.8 +# +# BR2_PACKAGE_BRCM_PATCHRAM_PLUS is not set +# BR2_PACKAGE_BRIDGE_UTILS is not set +# BR2_PACKAGE_BWM_NG is not set +# BR2_PACKAGE_C_ICAP is not set +# BR2_PACKAGE_CAN_UTILS is not set + +# +# cannelloni needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.8 +# +# BR2_PACKAGE_CASYNC is not set +# BR2_PACKAGE_CFM is not set +# BR2_PACKAGE_CHRONY is not set +# BR2_PACKAGE_CIVETWEB is not set +# BR2_PACKAGE_CONNMAN is not set + +# +# connman-gtk needs libgtk3 and a glibc or uClibc toolchain w/ wchar, threads, resolver, dynamic library +# +# BR2_PACKAGE_CONNTRACK_TOOLS is not set +# BR2_PACKAGE_CORKSCREW is not set +# BR2_PACKAGE_CRDA is not set + +# +# ctorrent needs a toolchain w/ C++ +# + +# +# cups needs a toolchain w/ C++, threads +# + +# +# cups-filters needs a toolchain w/ wchar, C++, threads and dynamic library, gcc >= 5 +# +# BR2_PACKAGE_DANTE is not set +# BR2_PACKAGE_DARKHTTPD is not set +# BR2_PACKAGE_DEHYDRATED is not set +# BR2_PACKAGE_DHCPCD is not set +# BR2_PACKAGE_DHCPDUMP is not set +# BR2_PACKAGE_DNSMASQ is not set +# BR2_PACKAGE_DRBD_UTILS is not set +# BR2_PACKAGE_DROPBEAR is not set +# BR2_PACKAGE_EASYFRAMES is not set +# BR2_PACKAGE_EBTABLES is not set + +# +# ejabberd needs erlang, toolchain w/ C++ +# +# BR2_PACKAGE_ETHTOOL is not set +# BR2_PACKAGE_FAIFA is not set +# BR2_PACKAGE_FASTD is not set +# BR2_PACKAGE_FCGIWRAP is not set +# BR2_PACKAGE_FLANNEL is not set +# BR2_PACKAGE_FPING is not set +# BR2_PACKAGE_FREERADIUS_SERVER is not set + +# +# freeswitch needs a toolchain w/ C++, dynamic library, threads, wchar +# +# BR2_PACKAGE_FRR is not set + +# +# gerbera needs a toolchain w/ C++, dynamic library, threads, wchar, gcc >= 8 +# +# BR2_PACKAGE_GESFTPSERVER is not set + +# +# gloox needs a toolchain w/ C++ +# +# BR2_PACKAGE_GLORYTUN is not set + +# +# gupnp-tools needs libgtk3 +# + +# +# hans needs a toolchain w/ C++ +# +BR2_PACKAGE_HAPROXY_ARCH_SUPPORTS=y +# BR2_PACKAGE_HAPROXY is not set +# BR2_PACKAGE_HIAWATHA is not set +# BR2_PACKAGE_HOSTAPD is not set +# BR2_PACKAGE_HTPDATE is not set +# BR2_PACKAGE_HTTPING is not set + +# +# i2pd needs a toolchain w/ C++, NPTL, wchar +# + +# +# ibrdtn-tools needs a toolchain w/ C++, threads +# + +# +# ibrdtnd needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_IFMETRIC is not set +# BR2_PACKAGE_IFTOP is not set +BR2_PACKAGE_IFUPDOWN_SCRIPTS=y +# BR2_PACKAGE_IGD2_FOR_LINUX is not set + +# +# igh-ethercat needs a Linux kernel to be built +# +# BR2_PACKAGE_IGMPPROXY is not set +# BR2_PACKAGE_INADYN is not set +# BR2_PACKAGE_IODINE is not set + +# +# iperf needs a toolchain w/ C++ +# +# BR2_PACKAGE_IPERF3 is not set +# BR2_PACKAGE_IPROUTE2 is not set +# BR2_PACKAGE_IPSET is not set +# BR2_PACKAGE_IPTABLES is not set +# BR2_PACKAGE_IPTRAF_NG is not set +# BR2_PACKAGE_IPUTILS is not set +# BR2_PACKAGE_IRSSI is not set +# BR2_PACKAGE_IW is not set +# BR2_PACKAGE_IWD is not set +# BR2_PACKAGE_JANUS_GATEWAY is not set +# BR2_PACKAGE_KEEPALIVED is not set + +# +# kismet needs a toolchain w/ threads, C++, gcc >= 5 +# +# BR2_PACKAGE_KNOCK is not set +# BR2_PACKAGE_KSMBD_TOOLS is not set +# BR2_PACKAGE_LEAFNODE2 is not set +# BR2_PACKAGE_LFT is not set + +# +# lftp requires a toolchain w/ C++, wchar +# +# BR2_PACKAGE_LIGHTTPD is not set + +# +# linknx needs a toolchain w/ C++ +# +# BR2_PACKAGE_LINKS is not set + +# +# linphone needs a toolchain w/ threads, C++, dynamic library, wchar, gcc >= 5 +# +# BR2_PACKAGE_LINUX_ZIGBEE is not set +# BR2_PACKAGE_LINUXPTP is not set +# BR2_PACKAGE_LLDPD is not set +# BR2_PACKAGE_LRZSZ is not set +# BR2_PACKAGE_LYNX is not set +# BR2_PACKAGE_MACCHANGER is not set +# BR2_PACKAGE_MEMCACHED is not set +# BR2_PACKAGE_MII_DIAG is not set +# BR2_PACKAGE_MINI_SNMPD is not set +# BR2_PACKAGE_MINIDLNA is not set +# BR2_PACKAGE_MINISSDPD is not set +# BR2_PACKAGE_MJPG_STREAMER is not set +# BR2_PACKAGE_MODEM_MANAGER is not set +BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS=y + +# +# mongrel2 needs a uClibc or glibc toolchain w/ C++, threads, dynamic library +# + +# +# mosh needs a toolchain w/ C++, threads, dynamic library, wchar, gcc >= 4.8 +# +# BR2_PACKAGE_MOSQUITTO is not set +# BR2_PACKAGE_MROUTED is not set +# BR2_PACKAGE_MRP is not set +# BR2_PACKAGE_MSTPD is not set +# BR2_PACKAGE_MTR is not set +# BR2_PACKAGE_NBD is not set +# BR2_PACKAGE_NCFTP is not set +# BR2_PACKAGE_NDISC6 is not set +# BR2_PACKAGE_NETATALK is not set +# BR2_PACKAGE_NETCALC is not set +# BR2_PACKAGE_NETPLUG is not set +# BR2_PACKAGE_NETSNMP is not set +# BR2_PACKAGE_NETSTAT_NAT is not set + +# +# NetworkManager needs udev /dev management and a glibc toolchain w/ headers >= 4.6, dynamic library, wchar, threads, gcc >= 4.9 +# +# BR2_PACKAGE_NFACCT is not set +# BR2_PACKAGE_NFTABLES is not set +# BR2_PACKAGE_NGINX is not set +# BR2_PACKAGE_NGIRCD is not set +# BR2_PACKAGE_NGREP is not set + +# +# nload needs a toolchain w/ C++ +# + +# +# nmap-nmap needs a toolchain w/ C++, threads +# +# BR2_PACKAGE_NOIP is not set +# BR2_PACKAGE_NTP is not set +# BR2_PACKAGE_NTPSEC is not set +# BR2_PACKAGE_NUTTCP is not set +# BR2_PACKAGE_ODHCP6C is not set +# BR2_PACKAGE_ODHCPLOC is not set +# BR2_PACKAGE_OLSR is not set +# BR2_PACKAGE_OPEN_LLDP is not set +# BR2_PACKAGE_OPEN_PLC_UTILS is not set +# BR2_PACKAGE_OPENNTPD is not set +# BR2_PACKAGE_OPENOBEX is not set +# BR2_PACKAGE_OPENRESOLV is not set +# BR2_PACKAGE_OPENSSH is not set +# BR2_PACKAGE_OPENSWAN is not set +# BR2_PACKAGE_OPENVPN is not set +# BR2_PACKAGE_P910ND is not set +# BR2_PACKAGE_PARPROUTED is not set +# BR2_PACKAGE_PHIDGETWEBSERVICE is not set +# BR2_PACKAGE_PHYTOOL is not set +# BR2_PACKAGE_PIMD is not set +# BR2_PACKAGE_PIXIEWPS is not set +# BR2_PACKAGE_POUND is not set +# BR2_PACKAGE_PPPD is not set +# BR2_PACKAGE_PPTP_LINUX is not set +# BR2_PACKAGE_PRIVOXY is not set +# BR2_PACKAGE_PROFTPD is not set + +# +# prosody needs the lua interpreter, dynamic library +# +# BR2_PACKAGE_PROXYCHAINS_NG is not set +# BR2_PACKAGE_PTPD is not set +# BR2_PACKAGE_PTPD2 is not set +# BR2_PACKAGE_PURE_FTPD is not set +# BR2_PACKAGE_PUTTY is not set +# BR2_PACKAGE_QUAGGA is not set +# BR2_PACKAGE_RADVD is not set +# BR2_PACKAGE_REAVER is not set +# BR2_PACKAGE_REDIR is not set +# BR2_PACKAGE_RP_PPPOE is not set +# BR2_PACKAGE_RPCBIND is not set +# BR2_PACKAGE_RSH_REDONE is not set +# BR2_PACKAGE_RSYNC is not set + +# +# rtorrent needs a toolchain w/ C++, threads, wchar, gcc >= 4.9 +# +# BR2_PACKAGE_RTPTOOLS is not set +# BR2_PACKAGE_S6_DNS is not set +# BR2_PACKAGE_S6_NETWORKING is not set +# BR2_PACKAGE_SAMBA4 is not set + +# +# sconeserver needs a toolchain with dynamic library, C++, NPTL +# +# BR2_PACKAGE_SER2NET is not set +# BR2_PACKAGE_SHADOWSOCKS_LIBEV is not set + +# +# shairport-sync needs a toolchain w/ C++, NPTL +# +# BR2_PACKAGE_SHELLINABOX is not set +# BR2_PACKAGE_SMCROUTE is not set +# BR2_PACKAGE_SNGREP is not set +# BR2_PACKAGE_SNORT is not set + +# +# snort3 needs a toolchain w/ C++, wchar, threads, dynamic library, gcc >= 4.9 +# +# BR2_PACKAGE_SOCAT is not set +# BR2_PACKAGE_SOCKETCAND is not set +# BR2_PACKAGE_SOFTETHER is not set +# BR2_PACKAGE_SPAWN_FCGI is not set +# BR2_PACKAGE_SPICE_PROTOCOL is not set + +# +# squid needs a toolchain w/ C++, threads, gcc >= 4.8 not affected by bug 64735 +# +# BR2_PACKAGE_SSDP_RESPONDER is not set +# BR2_PACKAGE_SSHGUARD is not set +# BR2_PACKAGE_SSHPASS is not set +# BR2_PACKAGE_SSLH is not set +# BR2_PACKAGE_STRONGSWAN is not set +# BR2_PACKAGE_STUNNEL is not set +# BR2_PACKAGE_SURICATA is not set +# BR2_PACKAGE_TCPDUMP is not set +# BR2_PACKAGE_TCPING is not set +# BR2_PACKAGE_TCPREPLAY is not set +# BR2_PACKAGE_THTTPD is not set +# BR2_PACKAGE_TINC is not set +# BR2_PACKAGE_TINYPROXY is not set +# BR2_PACKAGE_TINYSSH is not set +# BR2_PACKAGE_TOR is not set +# BR2_PACKAGE_TRACEROUTE is not set +# BR2_PACKAGE_TRANSMISSION is not set +# BR2_PACKAGE_TUNCTL is not set +# BR2_PACKAGE_TVHEADEND is not set +# BR2_PACKAGE_UACME is not set +# BR2_PACKAGE_UDPCAST is not set +# BR2_PACKAGE_UFTP is not set +# BR2_PACKAGE_UHTTPD is not set +# BR2_PACKAGE_ULOGD is not set +# BR2_PACKAGE_UNBOUND is not set +# BR2_PACKAGE_UQMI is not set +# BR2_PACKAGE_UREDIR is not set +# BR2_PACKAGE_USHARE is not set +# BR2_PACKAGE_USSP_PUSH is not set +# BR2_PACKAGE_VDE2 is not set + +# +# vdr needs a toolchain w/ C++, dynamic library, NPTL, wchar, headers >= 3.9 +# +# BR2_PACKAGE_VNSTAT is not set +# BR2_PACKAGE_VPNC is not set +# BR2_PACKAGE_VSFTPD is not set +# BR2_PACKAGE_VTUN is not set +# BR2_PACKAGE_WAVEMON is not set + +# +# wireguard-linux-compat needs a Linux kernel to be built +# +# BR2_PACKAGE_WIREGUARD_TOOLS is not set +# BR2_PACKAGE_WIRELESS_REGDB is not set +# BR2_PACKAGE_WIRELESS_TOOLS is not set + +# +# wireshark needs a toolchain w/ wchar, threads, dynamic library, C++ +# +# BR2_PACKAGE_WPA_SUPPLICANT is not set +# BR2_PACKAGE_WPAN_TOOLS is not set +# BR2_PACKAGE_XINETD is not set +# BR2_PACKAGE_XL2TP is not set + +# +# xtables-addons needs a Linux kernel to be built +# +# BR2_PACKAGE_ZABBIX is not set + +# +# zeek needs a toolchain w/ C++, wchar, threads, dynamic library, gcc >= 7, host gcc >= 7 +# + +# +# znc needs a toolchain w/ C++, dynamic library, gcc >= 4.8, threads +# + +# +# Package managers +# + +# +# ------------------------------------------------------- +# + +# +# Please note: +# + +# +# - Buildroot does *not* generate binary packages, +# + +# +# - Buildroot does *not* install any package database. +# + +# +# * +# + +# +# It is up to you to provide those by yourself if you +# + +# +# want to use any of those package managers. +# + +# +# * +# + +# +# See the manual: +# + +# +# http://buildroot.org/manual.html#faq-no-binary-packages +# + +# +# ------------------------------------------------------- +# +# BR2_PACKAGE_OPKG is not set +# BR2_PACKAGE_OPKG_UTILS is not set + +# +# Real-Time +# +# BR2_PACKAGE_XENOMAI is not set + +# +# Security +# + +# +# apparmor needs a toolchain w/ headers >= 3.16, threads, C++ +# +# BR2_PACKAGE_CHECKPOLICY is not set +# BR2_PACKAGE_IMA_EVM_UTILS is not set +# BR2_PACKAGE_OPTEE_BENCHMARK is not set +# BR2_PACKAGE_OPTEE_CLIENT is not set +# BR2_PACKAGE_PAXTEST is not set +# BR2_PACKAGE_POLICYCOREUTILS is not set +# BR2_PACKAGE_REFPOLICY is not set +# BR2_PACKAGE_RESTORECOND is not set +# BR2_PACKAGE_SELINUX_PYTHON is not set +# BR2_PACKAGE_SEMODULE_UTILS is not set + +# +# setools needs python3 +# +BR2_PACKAGE_URANDOM_SCRIPTS=y + +# +# Shell and utilities +# + +# +# Shells +# +# BR2_PACKAGE_MKSH is not set +# BR2_PACKAGE_ZSH is not set + +# +# Utilities +# +# BR2_PACKAGE_APG is not set +# BR2_PACKAGE_AT is not set +# BR2_PACKAGE_CATATONIT is not set +# BR2_PACKAGE_CCRYPT is not set +# BR2_PACKAGE_DIALOG is not set +# BR2_PACKAGE_DTACH is not set +# BR2_PACKAGE_EASY_RSA is not set +# BR2_PACKAGE_FILE is not set +# BR2_PACKAGE_GNUPG is not set +BR2_PACKAGE_GNUPG2_DEPENDS=y +# BR2_PACKAGE_GNUPG2 is not set +# BR2_PACKAGE_INOTIFY_TOOLS is not set +# BR2_PACKAGE_LOCKFILE_PROGS is not set +# BR2_PACKAGE_LOGROTATE is not set +# BR2_PACKAGE_LOGSURFER is not set +# BR2_PACKAGE_PDMENU is not set +# BR2_PACKAGE_PINENTRY is not set +# BR2_PACKAGE_QPRINT is not set +# BR2_PACKAGE_RANGER is not set +# BR2_PACKAGE_RTTY is not set +# BR2_PACKAGE_SCREEN is not set +# BR2_PACKAGE_SUDO is not set +# BR2_PACKAGE_TINI is not set +# BR2_PACKAGE_TMUX is not set +# BR2_PACKAGE_TTYD is not set +# BR2_PACKAGE_WTFUTIL is not set +# BR2_PACKAGE_XMLSTARLET is not set +# BR2_PACKAGE_XXHASH is not set +# BR2_PACKAGE_YTREE is not set + +# +# System tools +# +# BR2_PACKAGE_ACL is not set +# BR2_PACKAGE_ANDROID_TOOLS is not set +# BR2_PACKAGE_ATOP is not set +# BR2_PACKAGE_ATTR is not set +BR2_PACKAGE_AUDIT_ARCH_SUPPORTS=y +# BR2_PACKAGE_AUDIT is not set +# BR2_PACKAGE_BALENA_ENGINE is not set +# BR2_PACKAGE_BUBBLEWRAP is not set +# BR2_PACKAGE_CGROUPFS_MOUNT is not set + +# +# circus needs Python 3 and a toolchain w/ C++, threads +# +# BR2_PACKAGE_CONTAINERD is not set +# BR2_PACKAGE_CPULIMIT is not set +# BR2_PACKAGE_CPULOAD is not set +# BR2_PACKAGE_CRUN is not set +# BR2_PACKAGE_DAEMON is not set +# BR2_PACKAGE_DC3DD is not set + +# +# ddrescue needs a toolchain w/ C++ +# +# BR2_PACKAGE_DOCKER_CLI is not set + +# +# docker-compose needs docker-cli and a toolchain w/ threads +# +# BR2_PACKAGE_DOCKER_ENGINE is not set +# BR2_PACKAGE_DOCKER_PROXY is not set +# BR2_PACKAGE_EARLYOOM is not set +# BR2_PACKAGE_EFIBOOTMGR is not set +BR2_PACKAGE_EFIVAR_ARCH_SUPPORTS=y +# BR2_PACKAGE_EFIVAR is not set +# BR2_PACKAGE_EMBIGGEN_DISK is not set + +# +# emlog needs a Linux kernel to be built +# +# BR2_PACKAGE_FTOP is not set +# BR2_PACKAGE_GETENT is not set +# BR2_PACKAGE_GKRELLM is not set +# BR2_PACKAGE_HTOP is not set +# BR2_PACKAGE_IBM_SW_TPM2 is not set +BR2_PACKAGE_INITSCRIPTS=y + +# +# iotop depends on python3 +# +# BR2_PACKAGE_IPRUTILS is not set +# BR2_PACKAGE_IRQBALANCE is not set + +# +# jailhouse needs a Linux kernel to be built +# +# BR2_PACKAGE_KEYUTILS is not set +# BR2_PACKAGE_KMOD is not set +# BR2_PACKAGE_KVMTOOL is not set +# BR2_PACKAGE_LIBOSTREE is not set +BR2_PACKAGE_LIBVIRT_ARCH_SUPPORTS=y + +# +# libvirt needs udev /dev management, a toolchain w/ threads, dynamic library, wchar, kernel headers >= 3.12 (4.11 for AArch64) +# +# BR2_PACKAGE_LXC is not set +BR2_PACKAGE_MAKEDUMPFILE_ARCH_SUPPORTS=y +# BR2_PACKAGE_MAKEDUMPFILE is not set +# BR2_PACKAGE_MENDER is not set +# BR2_PACKAGE_MENDER_CONNECT is not set +# BR2_PACKAGE_MFOC is not set +# BR2_PACKAGE_MOBY_BUILDKIT is not set +# BR2_PACKAGE_MONIT is not set + +# +# multipath-tools needs udev and a uClibc or glibc toolchain w/ threads, dynamic library +# +# BR2_PACKAGE_NCDU is not set +# BR2_PACKAGE_NERDCTL is not set + +# +# netifrc needs openrc as init system +# +# BR2_PACKAGE_NUMACTL is not set + +# +# nut needs a toolchain w/ C++ +# +BR2_PACKAGE_OPENVMTOOLS_ARCH_SUPPORTS=y +# BR2_PACKAGE_OPENVMTOOLS is not set + +# +# pamtester depends on linux-pam +# +# BR2_PACKAGE_POLKIT is not set +# BR2_PACKAGE_PROCRANK_LINUX is not set +# BR2_PACKAGE_PWGEN is not set +# BR2_PACKAGE_QUOTA is not set +# BR2_PACKAGE_QUOTATOOL is not set +# BR2_PACKAGE_RAUC is not set +# BR2_PACKAGE_RUNC is not set +# BR2_PACKAGE_S6 is not set +# BR2_PACKAGE_S6_LINUX_INIT is not set +# BR2_PACKAGE_S6_LINUX_UTILS is not set +# BR2_PACKAGE_S6_PORTABLE_UTILS is not set +# BR2_PACKAGE_S6_RC is not set +# BR2_PACKAGE_SCRUB is not set +# BR2_PACKAGE_SCRYPT is not set + +# +# sdbus-c++ needs systemd and a toolchain w/ C++, gcc >= 7 +# + +# +# sdbusplus needs systemd and a toolchain w/ C++, gcc >= 7 +# +# BR2_PACKAGE_SEATD is not set +# BR2_PACKAGE_SMACK is not set + +# +# supervisor needs a python interpreter +# +# BR2_PACKAGE_SWUPDATE is not set +BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +BR2_PACKAGE_SYSTEMD_BOOTCHART_ARCH_SUPPORTS=y +# BR2_PACKAGE_TEALDEER is not set +# BR2_PACKAGE_TPM_TOOLS is not set +# BR2_PACKAGE_TPM2_ABRMD is not set +# BR2_PACKAGE_TPM2_TOOLS is not set +# BR2_PACKAGE_TPM2_TOTP is not set +# BR2_PACKAGE_UNSCD is not set +# BR2_PACKAGE_UTIL_LINUX is not set +# BR2_PACKAGE_WATCHDOG is not set +# BR2_PACKAGE_WATCHDOGD is not set +# BR2_PACKAGE_XDG_DBUS_PROXY is not set +# BR2_PACKAGE_XEN is not set +BR2_PACKAGE_XVISOR_ARCH_SUPPORTS=y +# BR2_PACKAGE_XVISOR is not set + +# +# Text editors and viewers +# +# BR2_PACKAGE_BAT is not set +# BR2_PACKAGE_ED is not set +# BR2_PACKAGE_JOE is not set +# BR2_PACKAGE_MC is not set +# BR2_PACKAGE_MG is not set +# BR2_PACKAGE_MOST is not set +# BR2_PACKAGE_NANO is not set +# BR2_PACKAGE_UEMACS is not set + +# +# Filesystem images +# +# BR2_TARGET_ROOTFS_AXFS is not set +# BR2_TARGET_ROOTFS_BTRFS is not set +# BR2_TARGET_ROOTFS_CLOOP is not set +BR2_TARGET_ROOTFS_CPIO=y +BR2_TARGET_ROOTFS_CPIO_FULL=y +# BR2_TARGET_ROOTFS_CPIO_DRACUT is not set +BR2_TARGET_ROOTFS_CPIO_NONE=y +# BR2_TARGET_ROOTFS_CPIO_GZIP is not set +# BR2_TARGET_ROOTFS_CPIO_BZIP2 is not set +# BR2_TARGET_ROOTFS_CPIO_LZ4 is not set +# BR2_TARGET_ROOTFS_CPIO_LZMA is not set +# BR2_TARGET_ROOTFS_CPIO_LZO is not set +# BR2_TARGET_ROOTFS_CPIO_XZ is not set +# BR2_TARGET_ROOTFS_CPIO_ZSTD is not set +# BR2_TARGET_ROOTFS_CPIO_UIMAGE is not set +# BR2_TARGET_ROOTFS_CRAMFS is not set +# BR2_TARGET_ROOTFS_EROFS is not set +# BR2_TARGET_ROOTFS_EXT2 is not set +# BR2_TARGET_ROOTFS_F2FS is not set + +# +# initramfs needs a Linux kernel to be built +# +# BR2_TARGET_ROOTFS_JFFS2 is not set +# BR2_TARGET_ROOTFS_OCI is not set +# BR2_TARGET_ROOTFS_ROMFS is not set +# BR2_TARGET_ROOTFS_SQUASHFS is not set +# BR2_TARGET_ROOTFS_TAR is not set +# BR2_TARGET_ROOTFS_UBI is not set +# BR2_TARGET_ROOTFS_UBIFS is not set +# BR2_TARGET_ROOTFS_YAFFS2 is not set + +# +# Bootloaders +# +# BR2_TARGET_ARM_TRUSTED_FIRMWARE is not set +# BR2_TARGET_BAREBOX is not set +# BR2_TARGET_BINARIES_MARVELL is not set + +# +# boot-wrapper-aarch64 needs a Linux kernel to be built +# +BR2_TARGET_EDK2_ARCH_SUPPORTS=y +# BR2_TARGET_EDK2 is not set +BR2_TARGET_GRUB2_ARCH_SUPPORTS=y +# BR2_TARGET_GRUB2 is not set +# BR2_TARGET_MV_DDR_MARVELL is not set +# BR2_TARGET_OPTEE_OS is not set +BR2_PACKAGE_SHIM_ARCH_SUPPORTS=y +# BR2_TARGET_SHIM is not set +# BR2_TARGET_UBOOT is not set +# BR2_TARGET_VEXPRESS_FIRMWARE is not set + +# +# Host utilities +# +# BR2_PACKAGE_HOST_ABOOTIMG is not set +# BR2_PACKAGE_HOST_AESPIPE is not set +# BR2_PACKAGE_HOST_AGENT_PROXY is not set +# BR2_PACKAGE_HOST_ANDROID_TOOLS is not set +# BR2_PACKAGE_HOST_ASN1C is not set +# BR2_PACKAGE_HOST_BABELTRACE2 is not set +# BR2_PACKAGE_HOST_BMAP_TOOLS is not set +# BR2_PACKAGE_HOST_BOOTGEN is not set +# BR2_PACKAGE_HOST_BTRFS_PROGS is not set +# BR2_PACKAGE_HOST_CHECKPOLICY is not set +# BR2_PACKAGE_HOST_CHECKSEC is not set +# BR2_PACKAGE_HOST_CMAKE is not set +# BR2_PACKAGE_HOST_CRAMFS is not set +# BR2_PACKAGE_HOST_CRYPTSETUP is not set +# BR2_PACKAGE_HOST_DBUS_PYTHON is not set +# BR2_PACKAGE_HOST_DELVE is not set +# BR2_PACKAGE_HOST_DFU_UTIL is not set +# BR2_PACKAGE_HOST_DOS2UNIX is not set +# BR2_PACKAGE_HOST_DOSFSTOOLS is not set +# BR2_PACKAGE_HOST_DOXYGEN is not set +# BR2_PACKAGE_HOST_DTC is not set +BR2_PACKAGE_HOST_E2FSPROGS=y +# BR2_PACKAGE_HOST_E2TOOLS is not set +# BR2_PACKAGE_HOST_ENVIRONMENT_SETUP is not set +# BR2_PACKAGE_HOST_EROFS_UTILS is not set +# BR2_PACKAGE_HOST_EXFATPROGS is not set +# BR2_PACKAGE_HOST_F2FS_TOOLS is not set +# BR2_PACKAGE_HOST_FAKETIME is not set +# BR2_PACKAGE_HOST_FATCAT is not set +# BR2_PACKAGE_HOST_FIRMWARE_UTILS is not set +# BR2_PACKAGE_HOST_FWUP is not set +# BR2_PACKAGE_HOST_GENEXT2FS is not set +# BR2_PACKAGE_HOST_GENIMAGE is not set +# BR2_PACKAGE_HOST_GENPART is not set +# BR2_PACKAGE_HOST_GNUPG is not set +BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS=y +BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_GO_BOOTSTRAP_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_GOOGLE_BREAKPAD_ARCH_SUPPORTS=y +# BR2_PACKAGE_HOST_GPTFDISK is not set +# BR2_PACKAGE_HOST_IMAGEMAGICK is not set +# BR2_PACKAGE_HOST_IMX_MKIMAGE is not set +# BR2_PACKAGE_HOST_IMX_USB_LOADER is not set +# BR2_PACKAGE_HOST_JQ is not set +# BR2_PACKAGE_HOST_JSMIN is not set +BR2_PACKAGE_HOST_KMOD=y +# BR2_PACKAGE_HOST_KMOD_GZ is not set +# BR2_PACKAGE_HOST_KMOD_ZSTD is not set +# BR2_PACKAGE_HOST_KMOD_XZ is not set +# BR2_PACKAGE_HOST_LIBP11 is not set +# BR2_PACKAGE_HOST_LLD is not set +# BR2_PACKAGE_HOST_LPC3250LOADER is not set +# BR2_PACKAGE_HOST_LTTNG_BABELTRACE is not set +# BR2_PACKAGE_HOST_LZMA_ALONE is not set +# BR2_PACKAGE_HOST_MENDER_ARTIFACT is not set +# BR2_PACKAGE_HOST_MESON_TOOLS is not set +# BR2_PACKAGE_HOST_MKPASSWD is not set +# BR2_PACKAGE_HOST_MOBY_BUILDKIT is not set +# BR2_PACKAGE_HOST_MOSQUITTO is not set +# BR2_PACKAGE_HOST_MTD is not set +# BR2_PACKAGE_HOST_MTOOLS is not set +# BR2_PACKAGE_HOST_NODEJS is not set +# BR2_PACKAGE_HOST_ODB is not set +# BR2_PACKAGE_HOST_OPENOCD is not set +# BR2_PACKAGE_HOST_OPKG_UTILS is not set +# BR2_PACKAGE_HOST_PAHOLE is not set +# BR2_PACKAGE_HOST_PARTED is not set +BR2_PACKAGE_HOST_PATCHELF=y +# BR2_PACKAGE_HOST_PIGZ is not set +# BR2_PACKAGE_HOST_PKGCONF is not set +# BR2_PACKAGE_HOST_PWGEN is not set +# BR2_PACKAGE_HOST_PYTHON_CYTHON is not set +# BR2_PACKAGE_HOST_PYTHON_GREENLET is not set +# BR2_PACKAGE_HOST_PYTHON_LXML is not set +# BR2_PACKAGE_HOST_PYTHON_PYYAML is not set +# BR2_PACKAGE_HOST_PYTHON_SIX is not set +# BR2_PACKAGE_HOST_PYTHON_XLRD is not set +# BR2_PACKAGE_HOST_PYTHON3 is not set +BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS=y +# BR2_PACKAGE_HOST_QEMU is not set +# BR2_PACKAGE_HOST_QORIQ_RCW is not set +# BR2_PACKAGE_HOST_RASPBERRYPI_USBBOOT is not set +# BR2_PACKAGE_HOST_RAUC is not set +# BR2_PACKAGE_HOST_RISCV_ISA_SIM is not set +# BR2_PACKAGE_HOST_RUNC is not set +BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_RUSTC_TARGET_TIER1_PLATFORMS=y +BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS=y +BR2_PACKAGE_HOST_RUSTC_ARCH="aarch64" +# BR2_PACKAGE_HOST_RUSTC is not set +BR2_PACKAGE_PROVIDES_HOST_RUSTC="host-rust-bin" +# BR2_PACKAGE_HOST_SAM_BA is not set +# BR2_PACKAGE_HOST_SDBUSPLUS is not set +# BR2_PACKAGE_HOST_SENTRY_CLI is not set +# BR2_PACKAGE_HOST_SLOCI_IMAGE is not set +# BR2_PACKAGE_HOST_SQUASHFS is not set +# BR2_PACKAGE_HOST_SWIG is not set +# BR2_PACKAGE_HOST_UBOOT_TOOLS is not set +BR2_PACKAGE_HOST_UTIL_LINUX=y +# BR2_PACKAGE_HOST_UTP_COM is not set +# BR2_PACKAGE_HOST_UUU is not set +# BR2_PACKAGE_HOST_VBOOT_UTILS is not set +# BR2_PACKAGE_HOST_XORRISO is not set +# BR2_PACKAGE_HOST_ZIP is not set +# BR2_PACKAGE_HOST_ZSTD is not set + +# +# Legacy config options +# + +# +# Legacy options removed in 2022.11 +# +# BR2_PACKAGE_RABBITMQ_SERVER is not set +# BR2_PACKAGE_LIBOPENSSL_ENABLE_RC5 is not set +# BR2_PACKAGE_LIBDCADEC is not set +# BR2_KERNEL_HEADERS_5_17 is not set +# BR2_iwmmxt is not set +# BR2_PACKAGE_UHD_N230 is not set +# BR2_PACKAGE_UHD_RFNOC is not set +# BR2_PACKAGE_GPSD_OLDSTYLE is not set +# BR2_GDB_VERSION_9_2 is not set + +# +# Legacy options removed in 2022.08 +# +# BR2_ECLIPSE_REGISTER is not set +# BR2_csky is not set +# BR2_PACKAGE_MESA3D_DRI_DRIVER_I915 is not set +# BR2_PACKAGE_MESA3D_DRI_DRIVER_I965 is not set +# BR2_PACKAGE_MESA3D_DRI_DRIVER_NOUVEAU is not set +# BR2_PACKAGE_MESA3D_DRI_DRIVER_RADEON is not set +# BR2_GCC_VERSION_9_X is not set +# BR2_PACKAGE_PHP_EXT_WDDX is not set +# BR2_nds32 is not set +# BR2_PACKAGE_RTL8723BS is not set + +# +# Legacy options removed in 2022.05 +# +# BR2_PACKAGE_KTAP is not set +# BR2_KERNEL_HEADERS_5_16 is not set +# BR2_KERNEL_HEADERS_4_4 is not set +# BR2_BINUTILS_VERSION_2_32_X is not set +# BR2_sh2a is not set +# BR2_BINUTILS_VERSION_2_35_X is not set +# BR2_PACKAGE_BOOST_LAYOUT_TAGGED is not set +# BR2_PACKAGE_BOOST_LAYOUT_VERSIONED is not set + +# +# Legacy options removed in 2022.02 +# +BR2_TARGET_ROOTFS_OCI_ENTRYPOINT_ARGS="" +# BR2_PACKAGE_LIBCURL_LIBNSS is not set +# BR2_PACKAGE_WESTON_DEFAULT_FBDEV is not set +# BR2_PACKAGE_WESTON_FBDEV is not set +# BR2_PACKAGE_PYTHON_PYCLI is not set +# BR2_PACKAGE_LINUX_TOOLS_BPFTOOL is not set +# BR2_TARGET_UBOOT_NEEDS_PYTHON2 is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_LIBMMS is not set +# BR2_PACKAGE_PYTHON_FUNCTOOLS32 is not set +# BR2_PACKAGE_PYTHON_ENUM34 is not set +# BR2_PACKAGE_PYTHON_ENUM is not set +# BR2_PACKAGE_PYTHON_DIALOG is not set +# BR2_PACKAGE_PYTHON_CONFIGOBJ is not set +# BR2_PACKAGE_PYTHON_YIELDFROM is not set +# BR2_PACKAGE_PYTHON_TYPING is not set +# BR2_PACKAGE_PYTHON_SUBPROCESS32 is not set +# BR2_PACKAGE_PYTHON_SINGLEDISPATCH is not set +# BR2_PACKAGE_PYTHON_PYRO is not set +# BR2_PACKAGE_PYTHON_PYPCAP is not set +# BR2_PACKAGE_PYTHON_PATHLIB2 is not set +# BR2_PACKAGE_PYTHON_PAM is not set +# BR2_PACKAGE_PYTHON_NFC is not set +# BR2_PACKAGE_PYTHON_MAD is not set +# BR2_PACKAGE_PYTHON_IPADDRESS is not set +# BR2_PACKAGE_PYTHON_IPADDR is not set +# BR2_PACKAGE_PYTHON_ID3 is not set +# BR2_PACKAGE_PYTHON_FUTURES is not set +# BR2_PACKAGE_PYTHON_BACKPORTS_SSL_MATCH_HOSTNAME is not set +# BR2_PACKAGE_PYTHON_BACKPORTS_SHUTIL_GET_TERMINAL_SIZE is not set +# BR2_PACKAGE_PYTHON_BACKPORTS_ABC is not set +# BR2_PACKAGE_PYTHON is not set +# BR2_TARGET_UBOOT_ZYNQ_IMAGE is not set +# BR2_PACKAGE_RPI_BT_FIRMWARE is not set +# BR2_PACKAGE_RPI_WIFI_FIRMWARE is not set +# BR2_PACKAGE_HOST_GDB_PYTHON is not set +# BR2_PACKAGE_GSTREAMER1_MM is not set +# BR2_KERNEL_HEADERS_5_14 is not set +# BR2_PACKAGE_PYTHON_BACKPORTS_FUNCTOOLS_LRU_CACHE is not set +# BR2_PACKAGE_CIVETWEB_WITH_LUA is not set +# BR2_PACKAGE_SUNXI_MALI_MAINLINE_DRIVER is not set +# BR2_PACKAGE_SUNXI_MALI_MAINLINE is not set +# BR2_PACKAGE_SUNXI_MALI_MAINLINE_R6P2 is not set +# BR2_PACKAGE_SUNXI_MALI_MAINLINE_R8P1 is not set +# BR2_PACKAGE_QT5WEBKIT_EXAMPLES is not set +# BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_RISCV64_GLIBC_BLEEDING_EDGE is not set +# BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_RISCV64_MUSL_BLEEDING_EDGE is not set +# BR2_PACKAGE_IPUTILS_TFTPD is not set +# BR2_PACKAGE_IPUTILS_TRACEROUTE6 is not set +# BR2_PACKAGE_LIBMEDIAART_BACKEND_NONE is not set +# BR2_PACKAGE_MPD_UPNP is not set + +# +# Legacy options removed in 2021.11 +# +# BR2_OPENJDK_VERSION_LTS is not set +# BR2_OPENJDK_VERSION_LATEST is not set +# BR2_PACKAGE_MPD_TIDAL is not set +# BR2_PACKAGE_MROUTED_RSRR is not set +# BR2_BINUTILS_VERSION_CSKY is not set +# BR2_GCC_VERSION_CSKY is not set +# BR2_PACKAGE_CANFESTIVAL is not set +# BR2_PACKAGE_NMAP_NDIFF is not set +# BR2_GDB_VERSION_8_3 is not set +# BR2_PACKAGE_PYTHON_MELD3 is not set +# BR2_PACKAGE_STRONGSWAN_EAP is not set +# BR2_PACKAGE_GNURADIO_PAGER is not set +# BR2_KERNEL_HEADERS_5_11 is not set +# BR2_KERNEL_HEADERS_5_12 is not set +# BR2_KERNEL_HEADERS_5_13 is not set + +# +# Legacy options removed in 2021.08 +# +BR2_TARGET_GRUB2_BUILTIN_MODULES="" +BR2_TARGET_GRUB2_BUILTIN_CONFIG="" +# BR2_PACKAGE_LIBMCRYPT is not set +# BR2_PACKAGE_MCRYPT is not set +# BR2_PACKAGE_PHP_EXT_MCRYPT is not set +# BR2_BINUTILS_VERSION_2_34_X is not set +# BR2_PACKAGE_LIBSOIL is not set +# BR2_PACKAGE_CLAPACK is not set +# BR2_PACKAGE_SPIDERMONKEY is not set +# BR2_PACKAGE_KODI_LIBVA is not set +# BR2_PACKAGE_PYTHON_COHERENCE is not set +# BR2_PACKAGE_PHP_EXT_XMLRPC is not set +# BR2_GCC_VERSION_8_X is not set + +# +# Legacy options removed in 2021.05 +# +# BR2_PACKAGE_UDISKS_LVM2 is not set +# BR2_PACKAGE_LVM2_APP_LIBRARY is not set +# BR2_PACKAGE_LVM2_LVMETAD is not set +# BR2_PACKAGE_MONKEY is not set +# BR2_PACKAGE_DOCKER_CONTAINERD is not set +# BR2_PACKAGE_IOSTAT is not set +# BR2_PACKAGE_SCONESERVER_HTTP_SCONESITE_IMAGE is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_EVDEV is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_KBD is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_MOUSE is not set +# BR2_PACKAGE_MESA3D_OSMESA_CLASSIC is not set +# BR2_PACKAGE_MESA3D_DRI_DRIVER_SWRAST is not set +# BR2_PACKAGE_KODI_SCREENSAVER_CRYSTALMORPH is not set + +# +# Legacy options removed in 2021.02 +# +# BR2_PACKAGE_MPD_AUDIOFILE is not set +# BR2_PACKAGE_AUDIOFILE is not set +# BR2_BINUTILS_VERSION_2_33_X is not set +# BR2_PACKAGE_LIBUPNP18 is not set +# BR2_PACKAGE_BOA is not set +# BR2_PACKAGE_LINUX_FIRMWARE_IMX_SDMA is not set +# BR2_GDB_VERSION_8_2 is not set +# BR2_PACKAGE_HOST_RCW is not set +# BR2_KERNEL_HEADERS_5_9 is not set +# BR2_KERNEL_HEADERS_5_8 is not set +# BR2_powerpc_601 is not set +# BR2_PACKAGE_TI_SGX_LIBGBM is not set +# BR2_PACKAGE_IPSEC_TOOLS is not set + +# +# Legacy options removed in 2020.11 +# +# BR2_PACKAGE_GPSD_FIXED_PORT_SPEED is not set +# BR2_PACKAGE_GPSD_RECONFIGURE is not set +# BR2_PACKAGE_GPSD_CONTROLSEND is not set +# BR2_PACKAGE_OPENCV is not set +# BR2_PACKAGE_LIBCROCO is not set +# BR2_PACKAGE_BELLAGIO is not set +# BR2_PACKAGE_SYSTEMD_JOURNAL_GATEWAY is not set +# BR2_TARGET_UBOOT_BOOT_SCRIPT is not set +# BR2_TARGET_UBOOT_ENVIMAGE is not set +# BR2_PACKAGE_KISMET_CLIENT is not set +# BR2_PACKAGE_KISMET_DRONE is not set +# BR2_GCC_VERSION_7_X is not set +# BR2_PACKAGE_GST1_VALIDATE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_YADIF is not set +# BR2_PACKAGE_GQVIEW is not set +# BR2_PACKAGE_WESTON_IMX is not set +# BR2_KERNEL_HEADERS_5_7 is not set +# BR2_PACKAGE_TINYHTTPD is not set +# BR2_PACKAGE_XSERVER_XORG_SERVER_AIGLX is not set +# BR2_PACKAGE_AMD_CATALYST is not set +# BR2_PACKAGE_NVIDIA_TEGRA23 is not set +# BR2_GDB_VERSION_8_1 is not set + +# +# Legacy options removed in 2020.08 +# +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_AMD64 is not set +# BR2_KERNEL_HEADERS_5_6 is not set +# BR2_KERNEL_HEADERS_5_5 is not set +# BR2_BINUTILS_VERSION_2_31_X is not set +# BR2_PACKAGE_KODI_PERIPHERAL_STEAMCONTROLLER is not set + +# +# Legacy options removed in 2020.05 +# +# BR2_PACKAGE_WIRINGPI is not set +# BR2_PACKAGE_PYTHON_PYCRYPTO is not set +# BR2_PACKAGE_MTDEV2TUIO is not set +# BR2_PACKAGE_EZXML is not set +# BR2_PACKAGE_COLLECTD_LVM is not set +# BR2_PACKAGE_PYTHON_PYASN is not set +# BR2_PACKAGE_PYTHON_PYASN_MODULES is not set +# BR2_PACKAGE_LINUX_FIRMWARE_ATHEROS_10K_QCA6174 is not set +# BR2_PACKAGE_QT5CANVAS3D is not set +# BR2_PACKAGE_KODI_LIBTHEORA is not set +# BR2_PACKAGE_CEGUI06 is not set +# BR2_GCC_VERSION_5_X is not set + +# +# Legacy options removed in 2020.02 +# +# BR2_PACKAGE_JAMVM is not set +# BR2_PACKAGE_CLASSPATH is not set +# BR2_PACKAGE_QT5_VERSION_5_6 is not set +# BR2_PACKAGE_CURL is not set +# BR2_PACKAGE_GSTREAMER is not set +# BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_GSTREAMER_PLUGINS is not set +# BR2_PACKAGE_NVIDIA_TEGRA23_BINARIES_NV_SAMPLE_APPS is not set +# BR2_PACKAGE_FREERDP_GSTREAMER is not set +# BR2_PACKAGE_OPENCV3_WITH_GSTREAMER is not set +# BR2_PACKAGE_OPENCV_WITH_GSTREAMER is not set +# BR2_PACKAGE_LIBPLAYER is not set +# BR2_GCC_VERSION_OR1K is not set +# BR2_PACKAGE_BLUEZ_UTILS is not set +# BR2_PACKAGE_GADGETFS_TEST is not set +# BR2_PACKAGE_FIS is not set +BR2_PACKAGE_REFPOLICY_POLICY_VERSION="" +# BR2_PACKAGE_CELT051 is not set +# BR2_PACKAGE_WIREGUARD is not set +# BR2_PACKAGE_PERL_NET_PING is not set +# BR2_PACKAGE_PERL_MIME_BASE64 is not set +# BR2_PACKAGE_PERL_DIGEST_MD5 is not set +# BR2_PACKAGE_ERLANG_P1_ICONV is not set +# BR2_KERNEL_HEADERS_5_3 is not set +# BR2_PACKAGE_PYTHON_SCAPY3K is not set +# BR2_BINUTILS_VERSION_2_30_X is not set +# BR2_PACKAGE_RPI_USERLAND_START_VCFILED is not set + +# +# Legacy options removed in 2019.11 +# +# BR2_PACKAGE_OPENVMTOOLS_PROCPS is not set +# BR2_PACKAGE_ALLJOYN is not set +# BR2_PACKAGE_ALLJOYN_BASE is not set +# BR2_PACKAGE_ALLJOYN_BASE_CONTROLPANEL is not set +# BR2_PACKAGE_ALLJOYN_BASE_NOTIFICATION is not set +# BR2_PACKAGE_ALLJOYN_BASE_ONBOARDING is not set +# BR2_PACKAGE_ALLJOYN_TCL_BASE is not set +# BR2_PACKAGE_ALLJOYN_TCL is not set +BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS="" +# BR2_PACKAGE_PYTHON_PYSNMP_APPS is not set +# BR2_KERNEL_HEADERS_5_2 is not set +# BR2_TARGET_RISCV_PK is not set +# BR2_PACKAGE_SQLITE_STAT3 is not set +# BR2_KERNEL_HEADERS_5_1 is not set +# BR2_PACKAGE_DEVMEM2 is not set +# BR2_PACKAGE_USTR is not set +# BR2_PACKAGE_KODI_SCREENSAVER_PLANESTATE is not set +# BR2_PACKAGE_KODI_VISUALISATION_WAVEFORHUE is not set +# BR2_PACKAGE_KODI_AUDIODECODER_OPUS is not set +# BR2_PACKAGE_MESA3D_OSMESA is not set +# BR2_PACKAGE_HOSTAPD_DRIVER_RTW is not set +# BR2_PACKAGE_WPA_SUPPLICANT_DBUS_NEW is not set +# BR2_PACKAGE_WPA_SUPPLICANT_DBUS_OLD is not set + +# +# Legacy options removed in 2019.08 +# +# BR2_TARGET_TS4800_MBRBOOT is not set +# BR2_PACKAGE_LIBAMCODEC is not set +# BR2_PACKAGE_ODROID_SCRIPTS is not set +# BR2_PACKAGE_ODROID_MALI is not set +# BR2_PACKAGE_KODI_PLATFORM_AML is not set +# BR2_GCC_VERSION_6_X is not set +# BR2_GCC_VERSION_4_9_X is not set +# BR2_GDB_VERSION_7_12 is not set +# BR2_PACKAGE_XAPP_MKFONTDIR is not set +# BR2_GDB_VERSION_8_0 is not set +# BR2_KERNEL_HEADERS_4_20 is not set +# BR2_KERNEL_HEADERS_5_0 is not set + +# +# Legacy options removed in 2019.05 +# +# BR2_CSKY_DSP is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_COMPOSITOR is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_IQA is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_OPENCV is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_STEREO is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VCD is not set +# BR2_PACKAGE_LUNIT is not set +# BR2_PACKAGE_FFMPEG_FFSERVER is not set +# BR2_PACKAGE_LIBUMP is not set +# BR2_PACKAGE_SUNXI_MALI is not set +# BR2_BINUTILS_VERSION_2_29_X is not set +# BR2_BINUTILS_VERSION_2_28_X is not set +# BR2_PACKAGE_GST_PLUGINS_BAD_PLUGIN_APEXSINK is not set + +# +# Legacy options removed in 2019.02 +# +# BR2_PACKAGE_QT is not set +# BR2_PACKAGE_QTUIO is not set +# BR2_PACKAGE_PINENTRY_QT4 is not set +# BR2_PACKAGE_POPPLER_QT is not set +# BR2_PACKAGE_OPENCV3_WITH_QT is not set +# BR2_PACKAGE_OPENCV_WITH_QT is not set +# BR2_PACKAGE_AMD_CATALYST_CCCLE is not set +# BR2_PACKAGE_SDL_QTOPIA is not set +# BR2_PACKAGE_PYTHON_PYQT is not set +# BR2_PACKAGE_LUACRYPTO is not set +# BR2_PACKAGE_TN5250 is not set +# BR2_PACKAGE_BOOST_SIGNALS is not set +# BR2_PACKAGE_FFTW_PRECISION_SINGLE is not set +# BR2_PACKAGE_FFTW_PRECISION_DOUBLE is not set +# BR2_PACKAGE_FFTW_PRECISION_LONG_DOUBLE is not set +# BR2_PACKAGE_LUA_5_2 is not set +# BR2_TARGET_GENERIC_PASSWD_MD5 is not set + +# +# Legacy options removed in 2018.11 +# +# BR2_TARGET_XLOADER is not set +# BR2_PACKAGE_TIDSP_BINARIES is not set +# BR2_PACKAGE_DSP_TOOLS is not set +# BR2_PACKAGE_GST_DSP is not set +# BR2_PACKAGE_BOOTUTILS is not set +# BR2_PACKAGE_EXPEDITE is not set +# BR2_PACKAGE_MESA3D_OPENGL_TEXTURE_FLOAT is not set +# BR2_KERNEL_HEADERS_4_10 is not set +# BR2_KERNEL_HEADERS_4_11 is not set +# BR2_KERNEL_HEADERS_4_12 is not set +# BR2_KERNEL_HEADERS_4_13 is not set +# BR2_KERNEL_HEADERS_4_15 is not set +# BR2_KERNEL_HEADERS_4_17 is not set +# BR2_PACKAGE_LIBNFTNL_XML is not set +# BR2_KERNEL_HEADERS_3_2 is not set +# BR2_KERNEL_HEADERS_4_1 is not set +# BR2_KERNEL_HEADERS_4_16 is not set +# BR2_KERNEL_HEADERS_4_18 is not set + +# +# Legacy options removed in 2018.08 +# +# BR2_PACKAGE_DOCKER_ENGINE_STATIC_CLIENT is not set +# BR2_PACKAGE_XPROTO_APPLEWMPROTO is not set +# BR2_PACKAGE_XPROTO_BIGREQSPROTO is not set +# BR2_PACKAGE_XPROTO_COMPOSITEPROTO is not set +# BR2_PACKAGE_XPROTO_DAMAGEPROTO is not set +# BR2_PACKAGE_XPROTO_DMXPROTO is not set +# BR2_PACKAGE_XPROTO_DRI2PROTO is not set +# BR2_PACKAGE_XPROTO_DRI3PROTO is not set +# BR2_PACKAGE_XPROTO_FIXESPROTO is not set +# BR2_PACKAGE_XPROTO_FONTCACHEPROTO is not set +# BR2_PACKAGE_XPROTO_FONTSPROTO is not set +# BR2_PACKAGE_XPROTO_GLPROTO is not set +# BR2_PACKAGE_XPROTO_INPUTPROTO is not set +# BR2_PACKAGE_XPROTO_KBPROTO is not set +# BR2_PACKAGE_XPROTO_PRESENTPROTO is not set +# BR2_PACKAGE_XPROTO_RANDRPROTO is not set +# BR2_PACKAGE_XPROTO_RECORDPROTO is not set +# BR2_PACKAGE_XPROTO_RENDERPROTO is not set +# BR2_PACKAGE_XPROTO_RESOURCEPROTO is not set +# BR2_PACKAGE_XPROTO_SCRNSAVERPROTO is not set +# BR2_PACKAGE_XPROTO_VIDEOPROTO is not set +# BR2_PACKAGE_XPROTO_WINDOWSWMPROTO is not set +# BR2_PACKAGE_XPROTO_XCMISCPROTO is not set +# BR2_PACKAGE_XPROTO_XEXTPROTO is not set +# BR2_PACKAGE_XPROTO_XF86BIGFONTPROTO is not set +# BR2_PACKAGE_XPROTO_XF86DGAPROTO is not set +# BR2_PACKAGE_XPROTO_XF86DRIPROTO is not set +# BR2_PACKAGE_XPROTO_XF86VIDMODEPROTO is not set +# BR2_PACKAGE_XPROTO_XINERAMAPROTO is not set +# BR2_PACKAGE_XPROTO_XPROTO is not set +# BR2_PACKAGE_XPROTO_XPROXYMANAGEMENTPROTOCOL is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_OPENGL is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_GLES2 is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_GLX is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_EGL is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_X11 is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_WAYLAND is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_LIB_OPENGL_DISPMANX is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOMIXER is not set +# BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_LAME is not set +# BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_MPG123 is not set +# BR2_GDB_VERSION_7_11 is not set +# BR2_GDB_VERSION_7_10 is not set + +# +# Legacy options removed in 2018.05 +# +# BR2_PACKAGE_MEDIAART_BACKEND_NONE is not set +# BR2_PACKAGE_MEDIAART_BACKEND_GDK_PIXBUF is not set +# BR2_PACKAGE_TI_SGX_AM335X is not set +# BR2_PACKAGE_TI_SGX_AM437X is not set +# BR2_PACKAGE_TI_SGX_AM4430 is not set +# BR2_PACKAGE_TI_SGX_AM5430 is not set +# BR2_PACKAGE_JANUS_AUDIO_BRIDGE is not set +# BR2_PACKAGE_JANUS_ECHO_TEST is not set +# BR2_PACKAGE_JANUS_RECORDPLAY is not set +# BR2_PACKAGE_JANUS_SIP_GATEWAY is not set +# BR2_PACKAGE_JANUS_STREAMING is not set +# BR2_PACKAGE_JANUS_TEXT_ROOM is not set +# BR2_PACKAGE_JANUS_VIDEO_CALL is not set +# BR2_PACKAGE_JANUS_VIDEO_ROOM is not set +# BR2_PACKAGE_JANUS_MQTT is not set +# BR2_PACKAGE_JANUS_RABBITMQ is not set +# BR2_PACKAGE_JANUS_REST is not set +# BR2_PACKAGE_JANUS_UNIX_SOCKETS is not set +# BR2_PACKAGE_JANUS_WEBSOCKETS is not set +# BR2_PACKAGE_IPSEC_SECCTX_DISABLE is not set +# BR2_PACKAGE_IPSEC_SECCTX_ENABLE is not set +# BR2_PACKAGE_IPSEC_SECCTX_KERNEL is not set +# BR2_PACKAGE_LIBTFDI_CPP is not set +# BR2_PACKAGE_JQUERY_UI_THEME_BLACK_TIE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_BLITZER is not set +# BR2_PACKAGE_JQUERY_UI_THEME_CUPERTINO is not set +# BR2_PACKAGE_JQUERY_UI_THEME_DARK_HIVE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_DOT_LUV is not set +# BR2_PACKAGE_JQUERY_UI_THEME_EGGPLANT is not set +# BR2_PACKAGE_JQUERY_UI_THEME_EXCITE_BIKE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_FLICK is not set +# BR2_PACKAGE_JQUERY_UI_THEME_HOT_SNEAKS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_HUMANITY is not set +# BR2_PACKAGE_JQUERY_UI_THEME_LE_FROG is not set +# BR2_PACKAGE_JQUERY_UI_THEME_MINT_CHOC is not set +# BR2_PACKAGE_JQUERY_UI_THEME_OVERCAST is not set +# BR2_PACKAGE_JQUERY_UI_THEME_PEPPER_GRINDER is not set +# BR2_PACKAGE_JQUERY_UI_THEME_REDMOND is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SMOOTHNESS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SOUTH_STREET is not set +# BR2_PACKAGE_JQUERY_UI_THEME_START is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SUNNY is not set +# BR2_PACKAGE_JQUERY_UI_THEME_SWANKY_PURSE is not set +# BR2_PACKAGE_JQUERY_UI_THEME_TRONTASTIC is not set +# BR2_PACKAGE_JQUERY_UI_THEME_UI_DARKNESS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_UI_LIGHTNESS is not set +# BR2_PACKAGE_JQUERY_UI_THEME_VADER is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_HEALTH is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_MIDI is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_NFC is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_SAP is not set +# BR2_PACKAGE_BLUEZ5_PLUGINS_SIXAXIS is not set +# BR2_PACKAGE_TRANSMISSION_REMOTE is not set +# BR2_PACKAGE_LIBKCAPI_APPS is not set +# BR2_PACKAGE_MPLAYER is not set +# BR2_PACKAGE_MPLAYER_MPLAYER is not set +# BR2_PACKAGE_MPLAYER_MENCODER is not set +# BR2_PACKAGE_LIBPLAYER_MPLAYER is not set +# BR2_PACKAGE_IQVLINUX is not set +# BR2_BINFMT_FLAT_SEP_DATA is not set +# BR2_bfin is not set +# BR2_PACKAGE_KODI_ADSP_BASIC is not set +# BR2_PACKAGE_KODI_ADSP_FREESURROUND is not set + +# +# Legacy options removed in 2018.02 +# +# BR2_KERNEL_HEADERS_3_4 is not set +# BR2_KERNEL_HEADERS_3_10 is not set +# BR2_KERNEL_HEADERS_3_12 is not set +# BR2_BINUTILS_VERSION_2_27_X is not set +# BR2_PACKAGE_EEPROG is not set +# BR2_PACKAGE_GNUPG2_GPGV2 is not set +# BR2_PACKAGE_IMX_GPU_VIV_APITRACE is not set +# BR2_PACKAGE_IMX_GPU_VIV_G2D is not set + +# +# Legacy options removed in 2017.11 +# +# BR2_PACKAGE_RFKILL is not set +# BR2_PACKAGE_UTIL_LINUX_RESET is not set +# BR2_PACKAGE_POLICYCOREUTILS_AUDIT2ALLOW is not set +# BR2_PACKAGE_POLICYCOREUTILS_RESTORECOND is not set +# BR2_PACKAGE_SEPOLGEN is not set +# BR2_PACKAGE_OPENOBEX_BLUEZ is not set +# BR2_PACKAGE_OPENOBEX_LIBUSB is not set +# BR2_PACKAGE_OPENOBEX_APPS is not set +# BR2_PACKAGE_OPENOBEX_SYSLOG is not set +# BR2_PACKAGE_OPENOBEX_DUMP is not set +# BR2_PACKAGE_AICCU is not set +# BR2_PACKAGE_UTIL_LINUX_LOGIN_UTILS is not set + +# +# Legacy options removed in 2017.08 +# +# BR2_TARGET_GRUB is not set +# BR2_PACKAGE_SIMICSFS is not set +# BR2_BINUTILS_VERSION_2_26_X is not set +BR2_XTENSA_OVERLAY_DIR="" +BR2_XTENSA_CUSTOM_NAME="" +# BR2_PACKAGE_HOST_MKE2IMG is not set +BR2_TARGET_ROOTFS_EXT2_BLOCKS=0 +BR2_TARGET_ROOTFS_EXT2_EXTRA_INODES=0 +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_CDXAPARSE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DATAURISRC is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DCCP is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_HDVPARSE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MVE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_NUVDEMUX is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_PATCHDETECT is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SDI is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_TTA is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOMEASURE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_APEXSINK is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SDL is not set +# BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_MAD is not set +# BR2_STRIP_none is not set +# BR2_PACKAGE_BEECRYPT_CPP is not set +# BR2_PACKAGE_SPICE_CLIENT is not set +# BR2_PACKAGE_SPICE_GUI is not set +# BR2_PACKAGE_SPICE_TUNNEL is not set +# BR2_PACKAGE_INPUT_TOOLS is not set +# BR2_PACKAGE_INPUT_TOOLS_INPUTATTACH is not set +# BR2_PACKAGE_INPUT_TOOLS_JSCAL is not set +# BR2_PACKAGE_INPUT_TOOLS_JSTEST is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86 is not set +# BR2_GCC_VERSION_4_8_X is not set + +# +# Legacy options removed in 2017.05 +# +# BR2_PACKAGE_SUNXI_MALI_R2P4 is not set +# BR2_PACKAGE_NODEJS_MODULES_COFFEESCRIPT is not set +# BR2_PACKAGE_NODEJS_MODULES_EXPRESS is not set +# BR2_PACKAGE_BLUEZ5_UTILS_GATTTOOL is not set +# BR2_PACKAGE_OPENOCD_FT2XXX is not set +# BR2_PACKAGE_KODI_RTMPDUMP is not set +# BR2_PACKAGE_KODI_VISUALISATION_FOUNTAIN is not set +# BR2_PACKAGE_PORTMAP is not set +# BR2_BINUTILS_VERSION_2_25_X is not set +# BR2_TOOLCHAIN_BUILDROOT_INET_RPC is not set +BR2_TARGET_ROOTFS_EXT2_EXTRA_BLOCKS=0 +# BR2_PACKAGE_SYSTEMD_KDBUS is not set +# BR2_PACKAGE_POLARSSL is not set +# BR2_NBD_CLIENT is not set +# BR2_NBD_SERVER is not set +# BR2_PACKAGE_GMOCK is not set +# BR2_KERNEL_HEADERS_4_8 is not set +# BR2_KERNEL_HEADERS_3_18 is not set +# BR2_GLIBC_VERSION_2_22 is not set + +# +# Legacy options removed in 2017.02 +# +# BR2_PACKAGE_PERL_DB_FILE is not set +# BR2_KERNEL_HEADERS_4_7 is not set +# BR2_KERNEL_HEADERS_4_6 is not set +# BR2_KERNEL_HEADERS_4_5 is not set +# BR2_KERNEL_HEADERS_3_14 is not set +# BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS is not set +# BR2_UCLIBC_INSTALL_TEST_SUITE is not set +# BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX is not set +# BR2_PACKAGE_MAKEDEVS is not set +# BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV7A is not set +# BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV5TE is not set +# BR2_PACKAGE_SNOWBALL_HDMISERVICE is not set +# BR2_PACKAGE_SNOWBALL_INIT is not set +# BR2_GDB_VERSION_7_9 is not set + +# +# Legacy options removed in 2016.11 +# +# BR2_PACKAGE_PHP_SAPI_CLI_CGI is not set +# BR2_PACKAGE_PHP_SAPI_CLI_FPM is not set +# BR2_PACKAGE_WVSTREAMS is not set +# BR2_PACKAGE_WVDIAL is not set +# BR2_PACKAGE_WEBKITGTK24 is not set +# BR2_PACKAGE_TORSMO is not set +# BR2_PACKAGE_SSTRIP is not set +# BR2_KERNEL_HEADERS_4_3 is not set +# BR2_KERNEL_HEADERS_4_2 is not set +# BR2_PACKAGE_KODI_ADDON_XVDR is not set +# BR2_PACKAGE_IPKG is not set +# BR2_GCC_VERSION_4_7_X is not set +# BR2_BINUTILS_VERSION_2_24_X is not set +# BR2_PACKAGE_WESTON_RPI is not set +# BR2_GCC_VERSION_4_8_ARC is not set +# BR2_KERNEL_HEADERS_4_0 is not set +# BR2_KERNEL_HEADERS_3_19 is not set +# BR2_PACKAGE_LIBEVAS_GENERIC_LOADERS is not set +# BR2_PACKAGE_ELEMENTARY is not set +# BR2_LINUX_KERNEL_CUSTOM_LOCAL is not set + +# +# Legacy options removed in 2016.08 +# +# BR2_PACKAGE_EFL_JP2K is not set +# BR2_PACKAGE_SYSTEMD_COMPAT is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_LIVEADDER is not set +# BR2_PACKAGE_LIBFSLVPUWRAP is not set +# BR2_PACKAGE_LIBFSLPARSER is not set +# BR2_PACKAGE_LIBFSLCODEC is not set +# BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE_FIT_SIGNATURE_SUPPORT is not set +# BR2_PTHREADS_OLD is not set +# BR2_BINUTILS_VERSION_2_23_X is not set +# BR2_TOOLCHAIN_BUILDROOT_EGLIBC is not set +# BR2_GDB_VERSION_7_8 is not set + +# +# Legacy options removed in 2016.05 +# +# BR2_PACKAGE_OPENVPN_CRYPTO_POLARSSL is not set +# BR2_PACKAGE_NGINX_HTTP_SPDY_MODULE is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RTP is not set +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPG123 is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC is not set +# BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC_E500V2 is not set +# BR2_x86_i386 is not set +# BR2_PACKAGE_QT5QUICK1 is not set +BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR="" +# BR2_PACKAGE_XDRIVER_XF86_INPUT_VOID is not set +# BR2_KERNEL_HEADERS_3_17 is not set +# BR2_GDB_VERSION_7_7 is not set +# BR2_PACKAGE_FOOMATIC_FILTERS is not set +# BR2_PACKAGE_SAMBA is not set +# BR2_PACKAGE_KODI_WAVPACK is not set +# BR2_PACKAGE_KODI_RSXS is not set +# BR2_PACKAGE_KODI_GOOM is not set +# BR2_PACKAGE_SYSTEMD_ALL_EXTRAS is not set +# BR2_GCC_VERSION_4_5_X is not set +# BR2_PACKAGE_SQLITE_READLINE is not set + +# +# Legacy options removed in 2016.02 +# +# BR2_PACKAGE_DOVECOT_BZIP2 is not set +# BR2_PACKAGE_DOVECOT_ZLIB is not set +# BR2_PACKAGE_E2FSPROGS_FINDFS is not set +# BR2_PACKAGE_OPENPOWERLINK_DEBUG_LEVEL is not set +# BR2_PACKAGE_OPENPOWERLINK_KERNEL_MODULE is not set +# BR2_PACKAGE_OPENPOWERLINK_LIBPCAP is not set +# BR2_LINUX_KERNEL_SAME_AS_HEADERS is not set +# BR2_PACKAGE_CUPS_PDFTOPS is not set +# BR2_KERNEL_HEADERS_3_16 is not set +# BR2_PACKAGE_PYTHON_PYXML is not set +# BR2_ENABLE_SSP is not set +# BR2_PACKAGE_DIRECTFB_CLE266 is not set +# BR2_PACKAGE_DIRECTFB_UNICHROME is not set +# BR2_PACKAGE_LIBELEMENTARY is not set +# BR2_PACKAGE_LIBEINA is not set +# BR2_PACKAGE_LIBEET is not set +# BR2_PACKAGE_LIBEVAS is not set +# BR2_PACKAGE_LIBECORE is not set +# BR2_PACKAGE_LIBEDBUS is not set +# BR2_PACKAGE_LIBEFREET is not set +# BR2_PACKAGE_LIBEIO is not set +# BR2_PACKAGE_LIBEMBRYO is not set +# BR2_PACKAGE_LIBEDJE is not set +# BR2_PACKAGE_LIBETHUMB is not set +# BR2_PACKAGE_INFOZIP is not set +# BR2_BR2_PACKAGE_NODEJS_0_10_X is not set +# BR2_BR2_PACKAGE_NODEJS_0_12_X is not set +# BR2_BR2_PACKAGE_NODEJS_4_X is not set + +# +# Legacy options removed in 2015.11 +# +# BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_REAL is not set +# BR2_PACKAGE_MEDIA_CTL is not set +# BR2_PACKAGE_SCHIFRA is not set +# BR2_PACKAGE_ZXING is not set +# BR2_PACKAGE_BLACKBOX is not set +# BR2_KERNEL_HEADERS_3_0 is not set +# BR2_KERNEL_HEADERS_3_11 is not set +# BR2_KERNEL_HEADERS_3_13 is not set +# BR2_KERNEL_HEADERS_3_15 is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_ANDI is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_BLTLOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_CPULOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DATABUFFER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DIOLOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DOK is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_DRIVERTEST is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_FIRE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_FLIP is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_FONTS is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_INPUT is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_JOYSTICK is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_KNUCKLES is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_LAYER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_MATRIX is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_MATRIX_WATER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_NEO is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_NETLOAD is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_PALETTE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_PARTICLE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_PORTER is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_STRESS is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_TEXTURE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_VIDEO is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_VIDEO_PARTICLE is not set +# BR2_PACKAGE_DIRECTFB_EXAMPLES_WINDOW is not set +# BR2_PACKAGE_KOBS_NG is not set +# BR2_PACKAGE_SAWMAN is not set +# BR2_PACKAGE_DIVINE is not set + +# +# Legacy options removed in 2015.08 +# +# BR2_PACKAGE_KODI_PVR_ADDONS is not set +# BR2_BINUTILS_VERSION_2_23_2 is not set +# BR2_BINUTILS_VERSION_2_24 is not set +# BR2_BINUTILS_VERSION_2_25 is not set +# BR2_PACKAGE_PERF is not set +# BR2_BINUTILS_VERSION_2_22 is not set +# BR2_PACKAGE_GPU_VIV_BIN_MX6Q is not set +# BR2_TARGET_UBOOT_NETWORK is not set diff --git a/support/br-aarch64.config b/support/br-aarch64.config index 72a1423..3603e84 100644 --- a/support/br-aarch64.config +++ b/support/br-aarch64.config @@ -425,7 +425,7 @@ BR2_GENERATE_LOCALE="" # BR2_SYSTEM_ENABLE_NLS is not set # BR2_TARGET_TZ_INFO is not set BR2_ROOTFS_USERS_TABLES="" -BR2_ROOTFS_OVERLAY="../optee_client/out-aarch64/export ../optee_client/out2-aarch64/export ../optee_test/to_buildroot-aarch64 ../optee_test/to_buildroot-aarch64-2 ../support/to_buildroot-aarch64 ../support/to_buildroot ../bitcoin-wallet/to_buildroot-aarch64-2/ ../bitcoin-wallet/to_buildroot-aarch64/ ../malicous_ta/to_buildroot-aarch64/ ../malicous_ta/to_buildroot-aarch64-2/" +BR2_ROOTFS_OVERLAY="../optee_client/out-aarch64/export ../optee_client/out2-aarch64/export ../optee_test/to_buildroot-aarch64 ../optee_test/to_buildroot-aarch64-2 ../support/to_buildroot-aarch64 ../support/to_buildroot ../bitcoin-wallet/to_buildroot-aarch64-2/ ../bitcoin-wallet/to_buildroot-aarch64/ ../malicous_ta/to_buildroot-aarch64/ ../malicous_ta/to_buildroot-aarch64-2/ ../security_test/to_buildroot-aarch64/" BR2_ROOTFS_PRE_BUILD_SCRIPT="" BR2_ROOTFS_POST_BUILD_SCRIPT="" BR2_ROOTFS_POST_FAKEROOT_SCRIPT="" @@ -1087,7 +1087,7 @@ BR2_PACKAGE_QT6_ARCH_SUPPORTS=y # BR2_PACKAGE_BRLTTY is not set # -# cc-tool needs a toolchain w/ C++, threads, wchar, gcc >= 4.9 +# cc-tool needs a toolchain w/ C++, threads, wchar, gcc >= 4.9 # # BR2_PACKAGE_CDRKIT is not set BR2_PACKAGE_CPUBURN_ARM_ARCH_SUPPORTS=y @@ -3289,35 +3289,35 @@ BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS=y # # -# Please note: +# Please note: # # -# - Buildroot does *not* generate binary packages, +# - Buildroot does *not* generate binary packages, # # -# - Buildroot does *not* install any package database. +# - Buildroot does *not* install any package database. # # -# * +# * # # -# It is up to you to provide those by yourself if you +# It is up to you to provide those by yourself if you # # -# want to use any of those package managers. +# want to use any of those package managers. # # -# * +# * # # -# See the manual: +# See the manual: # # diff --git a/support/linux-aarch64.config b/support/linux-aarch64.config index 4f01768..9755eb0 100644 --- a/support/linux-aarch64.config +++ b/support/linux-aarch64.config @@ -2360,7 +2360,7 @@ CONFIG_NET_VENDOR_AURORA=y # CONFIG_AURORA_NB8800 is not set CONFIG_NET_VENDOR_BROADCOM=y # CONFIG_B44 is not set -CONFIG_BCMGENET=m +CONFIG_BCMGENET=y # CONFIG_BNX2 is not set # CONFIG_CNIC is not set # CONFIG_TIGON3 is not set @@ -7979,6 +7979,7 @@ CONFIG_INTERCONNECT_QCOM_SMD_RPM=m # CONFIG_MOST is not set CONFIG_CROSSCON_ENCLAVE=y CONFIG_CMA_MALLOC=y +CONFIG_CROSSCONHYP_SHMEM=y # end of Device Drivers # @@ -8911,4 +8912,3 @@ CONFIG_RUNTIME_TESTING_MENU=y CONFIG_MEMTEST=y # end of Kernel Testing and Coverage # end of Kernel hacking -