Skip to content

Commit

Permalink
feat: working on aarch64 TEE
Browse files Browse the repository at this point in the history
Signed-off-by: Zone.N <[email protected]>
  • Loading branch information
MRNIU committed Feb 11, 2025
1 parent aca94c8 commit b96c2c0
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 59 deletions.
13 changes: 6 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ ELSEIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
APPEND
QEMU_FLAGS
-machine
virt
virt,secure=on,gic_version=3
-cpu
cortex-a72
-m
Expand All @@ -92,13 +92,10 @@ ELSEIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
4
-net
none
-bios
${arm-trusted-firmware_BINARY_DIR}/flash.bin
-kernel
$<TARGET_FILE:kernel>
# -bios
# ${ovmf_BINARY_DIR}/OVMF_${CMAKE_SYSTEM_PROCESSOR}.fd
# -hda
# fat:rw:./image/
)
$<TARGET_FILE:kernel>)
ENDIF()

# 添加要编译的目录
Expand All @@ -114,6 +111,8 @@ ADD_RUN_TARGET (
$<$<STREQUAL:${CMAKE_SYSTEM_PROCESSOR},x86_64>:boot>
$<$<STREQUAL:${CMAKE_SYSTEM_PROCESSOR},riscv64>:boot>
$<$<STREQUAL:${CMAKE_SYSTEM_PROCESSOR},aarch64>:boot>
$<$<STREQUAL:${CMAKE_SYSTEM_PROCESSOR},aarch64>:optee_os>
$<$<STREQUAL:${CMAKE_SYSTEM_PROCESSOR},aarch64>:arm-trusted-firmware>
kernel
WORKING_DIRECTORY
${PROJECT_BINARY_DIR}
Expand Down
63 changes: 47 additions & 16 deletions cmake/3rd.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,20 @@ ADD_CUSTOM_TARGET (
SET_DIRECTORY_PROPERTIES (PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
${CMAKE_SOURCE_DIR}/.gdbinit)

# ovmf
# @todo 使用互联网连接或从 edk2 编译
# https://efi.akeo.ie/QEMU_EFI/QEMU_EFI-AA64.zip
SET (ovmf_SOURCE_DIR ${CMAKE_SOURCE_DIR}/tools/ovmf)
SET (ovmf_BINARY_DIR ${CMAKE_BINARY_DIR}/3rd/ovmf)
ADD_CUSTOM_TARGET (
ovmf
COMMENT "build ovmf ..."
# make 时编译
ALL
WORKING_DIRECTORY ${ovmf_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} -E make_directory ${ovmf_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${ovmf_SOURCE_DIR}/* ${ovmf_BINARY_DIR})

# https://github.com/MRNIU/printf_bare_metal.git
ADD_SUBDIRECTORY (3rd/printf_bare_metal)

Expand All @@ -98,6 +112,24 @@ ADD_SUBDIRECTORY (3rd/cpu_io)
ADD_SUBDIRECTORY (3rd/smccc)

IF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")
# https://github.com/OP-TEE/optee_os.git
SET (optee_os_SOURCE_DIR ${CMAKE_SOURCE_DIR}/3rd/optee/optee_os)
SET (optee_os_BINARY_DIR ${CMAKE_BINARY_DIR}/3rd/optee/optee_os)
ADD_CUSTOM_TARGET (
optee_os
COMMENT "build optee_os..."
# make 时编译
ALL
WORKING_DIRECTORY ${optee_os_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} -E make_directory ${optee_os_BINARY_DIR}
COMMAND
make CFG_ARM64_core=y CFG_TEE_BENCHMARK=n CFG_TEE_CORE_LOG_LEVEL=3
CROSS_COMPILE=${TOOLCHAIN_PREFIX}
CROSS_COMPILE_core=${TOOLCHAIN_PREFIX}
CROSS_COMPILE_ta_arm32=${TOOLCHAIN_PREFIX32}
CROSS_COMPILE_ta_arm64=${TOOLCHAIN_PREFIX} DEBUG=1
O=${optee_os_BINARY_DIR} PLATFORM=vexpress-qemu_armv8a)

# https://github.com/ARM-software/arm-trusted-firmware
# 编译 atf
SET (arm-trusted-firmware_SOURCE_DIR
Expand All @@ -112,8 +144,21 @@ IF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")
WORKING_DIRECTORY ${arm-trusted-firmware_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} -E make_directory
${arm-trusted-firmware_BINARY_DIR}
COMMAND make CROSS_COMPILE=${TOOLCHAIN_PREFIX} PLAT=qemu
BUILD_BASE=${arm-trusted-firmware_BINARY_DIR} all)
COMMAND
make DEBUG=1 CROSS_COMPILE=${TOOLCHAIN_PREFIX} PLAT=qemu
BUILD_BASE=${arm-trusted-firmware_BINARY_DIR}
BL32=${optee_os_BINARY_DIR}/core/tee-header_v2.bin
BL32_EXTRA1=${optee_os_BINARY_DIR}/core/tee-pager_v2.bin
BL32_EXTRA2=${optee_os_BINARY_DIR}/core/tee-pageable_v2.bin
BL33=${ovmf_BINARY_DIR}/OVMF_aarch64.fd BL32_RAM_LOCATION=tdram
QEMU_USE_GIC_DRIVER=QEMU_GICV3 SPD=opteed all fip
COMMAND
dd if=${arm-trusted-firmware_BINARY_DIR}/qemu/debug/bl1.bin
of=${arm-trusted-firmware_BINARY_DIR}/flash.bin bs=4096 conv=notrunc
COMMAND
dd if=${arm-trusted-firmware_BINARY_DIR}/qemu/debug/fip.bin
of=${arm-trusted-firmware_BINARY_DIR}/flash.bin seek=64 bs=4096
conv=notrunc)
ENDIF()

IF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "riscv64")
Expand Down Expand Up @@ -231,20 +276,6 @@ TARGET_LINK_LIBRARIES (
${gnu-efi_BINARY_DIR}/gnuefi/libgnuefi.a
${gnu-efi_BINARY_DIR}/lib/libefi.a)

# ovmf
# @todo 使用互联网连接或从 edk2 编译
# https://efi.akeo.ie/QEMU_EFI/QEMU_EFI-AA64.zip
SET (ovmf_SOURCE_DIR ${CMAKE_SOURCE_DIR}/tools/ovmf)
SET (ovmf_BINARY_DIR ${CMAKE_BINARY_DIR}/3rd/ovmf)
ADD_CUSTOM_TARGET (
ovmf
COMMENT "build ovmf ..."
# make 时编译
ALL
WORKING_DIRECTORY ${ovmf_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} -E make_directory ${ovmf_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${ovmf_SOURCE_DIR}/* ${ovmf_BINARY_DIR})

# gdb
FIND_PROGRAM (GDB_EXE gdb)
IF(NOT GDB_EXE)
Expand Down
72 changes: 39 additions & 33 deletions cmake/aarch64-gcc.cmake
Original file line number Diff line number Diff line change
@@ -1,39 +1,45 @@

# This file is a part of Simple-XX/SimpleKernel
# (https://github.com/Simple-XX/SimpleKernel).
#
#
# aarch64-gcc.cmake for Simple-XX/SimpleKernel.

if (NOT UNIX)
message(FATAL_ERROR "Only support Linux.")
endif ()
IF(NOT UNIX)
MESSAGE (FATAL_ERROR "Only support Linux.")
ENDIF()

IF(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
FIND_PROGRAM (Compiler_gcc g++)
IF(NOT Compiler_gcc)
MESSAGE (
FATAL_ERROR "g++ not found.\n"
"Run `sudo apt-get install -y gcc g++` to install.")
ELSE()
MESSAGE (STATUS "Found g++ ${Compiler_gcc}")
ENDIF()

if (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
find_program(Compiler_gcc g++)
if (NOT Compiler_gcc)
message(FATAL_ERROR "g++ not found.\n"
"Run `sudo apt-get install -y gcc g++` to install.")
else ()
message(STATUS "Found g++ ${Compiler_gcc}")
endif ()
elseif (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64")
find_program(Compiler_gcc aarch64-linux-gnu-g++)
if (NOT Compiler_gcc)
message(FATAL_ERROR "aarch64-linux-gnu-g++ not found.\n"
"Run `sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu` to install.")
else ()
message(STATUS "Found aarch64-linux-gnu-g++ ${Compiler_gcc}")
endif ()
SET (TOOLCHAIN_PREFIX32 arm-linux-gnueabihf-)
ELSEIF(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64")
FIND_PROGRAM (Compiler_gcc aarch64-linux-gnu-g++)
IF(NOT Compiler_gcc)
MESSAGE (
FATAL_ERROR
"aarch64-linux-gnu-g++ not found.\n"
"Run `sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu` to install."
)
ELSE()
MESSAGE (STATUS "Found aarch64-linux-gnu-g++ ${Compiler_gcc}")
ENDIF()

set(TOOLCHAIN_PREFIX aarch64-linux-gnu-)
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++)
set(CMAKE_READELF ${TOOLCHAIN_PREFIX}readelf)
set(CMAKE_AR ${TOOLCHAIN_PREFIX}ar)
set(CMAKE_LINKER ${TOOLCHAIN_PREFIX}ld)
set(CMAKE_NM ${TOOLCHAIN_PREFIX}nm)
set(CMAKE_OBJDUMP ${TOOLCHAIN_PREFIX}objdump)
set(CMAKE_RANLIB ${TOOLCHAIN_PREFIX}ranlib)
else ()
message(FATAL_ERROR "NOT support ${CMAKE_HOST_SYSTEM_PROCESSOR}")
endif ()
SET (TOOLCHAIN_PREFIX aarch64-linux-gnu-)
SET (CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc)
SET (CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++)
SET (CMAKE_READELF ${TOOLCHAIN_PREFIX}readelf)
SET (CMAKE_AR ${TOOLCHAIN_PREFIX}ar)
SET (CMAKE_LINKER ${TOOLCHAIN_PREFIX}ld)
SET (CMAKE_NM ${TOOLCHAIN_PREFIX}nm)
SET (CMAKE_OBJDUMP ${TOOLCHAIN_PREFIX}objdump)
SET (CMAKE_RANLIB ${TOOLCHAIN_PREFIX}ranlib)
SET (TOOLCHAIN_PREFIX32 arm-linux-gnueabihf-)
ELSE()
MESSAGE (FATAL_ERROR "NOT support ${CMAKE_HOST_SYSTEM_PROCESSOR}")
ENDIF()
8 changes: 5 additions & 3 deletions tools/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -71,16 +71,18 @@ RUN apt install --no-install-recommends --fix-missing -y \
pkg-config \
flex \
bison \
device-tree-compiler
device-tree-compiler \
python3-cryptography \
python3-pyelftools
RUN apt install --no-install-recommends --fix-missing -y \
gcc \
g++ \
gcc-riscv64-linux-gnu \
g++-riscv64-linux-gnu \
gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu \
gcc-riscv64-linux-gnu \
g++-riscv64-linux-gnu \
gcc-arm-linux-gnueabihf \
g++-arm-linux-gnueabihf \
gcc-x86-64-linux-gnu \
g++-x86-64-linux-gnu

Expand Down

0 comments on commit b96c2c0

Please sign in to comment.