• ARMv8-A QEMU运行OP-TEE/ATF环境搭建


    关键词:OP-TEE、ATF、xtest、Linux等等。

    下面记录通过ARMv8-A QEMU运行OP-TEE、ARM Trusted Firmware、Linux环境搭建过程。

    1. 编译环境准备

    sudo apt-get install android-tools-adb android-tools-fastboot autoconf automake bc bison build-essential ccache cscope curl device-tree-compiler 
            expect flex ftp-upload gdisk iasl libattr1-dev libcap-dev libfdt-dev libftdi-dev libglib2.0-dev libhidapi-dev libncurses5-dev 
            libpixman-1-dev libssl-dev libtool make mtools netcat python-crypto python3-crypto python-pyelftools 
            python3-pyelftools python-serial python3-serial rsync unzip uuid-dev xdg-utils xterm xz-utils zlib1g-dev

    安装pycryptodome:

    pip install pycryptodome

    2. 代码下载

    由于访问github.com速度非常慢,并且连接不稳定。

    所已经github.com相关仓库,镜像到gitee.com;并且手动下载toolchains;手动下载linaro-swg/linux.git。 

    2.1 镜像github.com相库到gitee.com

    repo init -u https://gitee.com/arnoldlu/manifest.git -m qemu_v8.xml --repo-url=git://codeaurora.org/tools/repo.git -b 3.6.0
    repo sync -j4

    修改manifest.xml:

    sed -i "s/.git//g" .repo/manifest.xml

    2.2 下载linaro-swg/linux.git

    https://hub.fastgit.org/linaro-swg/linux

    选择Download ZIP下载压缩包。

    2.3 创建Makefile软链接

    ln -s build/qemu_v8.xml build/Makefile

    2.4 下载toolchains

    通过下载工具可以加速工具链下载:

    https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
    https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz

    修改build/toolchains.mk,执行make toolchains。

    diff --git a/toolchain.mk b/toolchain.mk
    index 8bc4b16..fc36394 100644
    --- a/toolchain.mk
    +++ b/toolchain.mk
    @@ -21,8 +21,6 @@ SRC_AARCH64_GCC               ?= https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3
     define dltc
            @if [ ! -d "$(1)" ]; then 
                    mkdir -p $(1); 
    -               echo "Downloading $(3) ..."; 
    -               curl -s -L $(2) -o $(TOOLCHAIN_ROOT)/$(3).tar.xz; 
                    tar xf $(TOOLCHAIN_ROOT)/$(3).tar.xz -C $(1) --strip-components=1; 
            fi
     endef

    3. 编译运行

    在build目录下编译:

    make -j8
    或者
    make -f qemu_v8.mk -j8

    在build目录下运行:

    make run-only
    make -f qemu_v8.mk run-only

     在shell中输入“c”,可以看到弹出两个shell,分别是安全的OP-TEE和非安全的Linux。

     

     在Linux终端中输入root登录,然后执行xtest进行OP-TEE测试。

     

    4. 其他问题

    在某些版本上生成optee镜像脚本write_header_v1/write_header_v2的init_size参数为float,需要转化成int:

    project optee_os/
    diff --git a/scripts/gen_hashed_bin.py b/scripts/gen_hashed_bin.py
    index 32350a4..3788983 100755
    --- a/scripts/gen_hashed_bin.py
    +++ b/scripts/gen_hashed_bin.py
    @@ -18,7 +18,7 @@ def write_header_v1(outf, init_size, args, paged_size):
            magic = 0x4554504f # 'OPTE'
            version = 1;
            outf.write(struct.pack('<IBBHIIIII', 
    -               magic, version, arch_id[args.arch], args.flags, init_size, 
    +               magic, version, arch_id[args.arch], args.flags, int(init_size), 
                    args.init_load_addr_hi, args.init_load_addr_lo, 
                    args.init_mem_usage, paged_size))
     
    @@ -30,7 +30,7 @@ def write_header_v2(outf, init_size, args, paged_size):
                    magic, version, arch_id[args.arch], args.flags, nb_images))
            outf.write(struct.pack('<IIII', 
                    args.init_load_addr_hi, args.init_load_addr_lo, 
    -               image_id['pager'], init_size))
    +               image_id['pager'], int(init_size)))
            if nb_images == 2:
                    outf.write(struct.pack('<IIII', 
                    0xffffffff, 0xffffffff, image_id['paged'], paged_size))
  • 相关阅读:
    POJ 1182 食物链
    HDU 1385 Minimum Transport Cost
    HDU_2544 最短路
    HDU 2066 一个人的旅行
    poj3090
    poj3157
    poj3169
    poj3125
    poj3187
    VMware Workstation 8的简明使用教程
  • 原文地址:https://www.cnblogs.com/arnoldlu/p/14245834.html
Copyright © 2020-2023  润新知