类似的文章看到

https://blog.csdn.net/shuaifengyun/article/details/71499619

得到很大的启发。一步一步跟着作者去运行OP-TEE,也确实成功了。
但是,因为随着github.com代码的更新,导致我做了一大堆的额外的动作。把代码库各个代码返回到2017年5月底。
这个现在不是重点,重点是我基于原作者,发现了不需要额外的动作,利用最新(2018/06/23)代码库,成功运行了ARMv8的OP-TEE。
特此记录下过程。赠人玫瑰,手有余香。

第一步,准备开发环境并安装开发工具:
使用如下指令安装搭建时需要的工具和库:

$ sudo apt-get install android-tools-fastboot autoconf bison cscope curl \
flex gdisk libc6:i386 libfdt-dev libglib2.0-dev \
libpixman-1-dev libstdc++6:i386 libz1:i386 netcat \
python-crypto python-serial uuid-dev xz-utils zlib1g-dev

第二步,下载OP-TEE的源代码
在系统中创建存放OP-TEE的目录,并建立初始化repo,指令操作如下:

$ mkdir opentee.v8        //创建目录
$ cd opentee.v8           //切换到创建的目录
$ repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml --repo-url=git://codeaurora.org/tools/repo.git
$ sed -i “s/.git//g” .repo/manifest.xml  //解决repo sync错误的方法,将manifest.xml文件中的所有的.git都删除
//初始化repo,
$repo sync -j22     //开始获取OP-TEE源代码 

第三步, 获取 toolchain

$ cd build
$ make -f toolchain.mk toolchains

这一步,会下载工具链。所以需要一直保证网络畅通

第四步,开始编译使用qemu运行OP-TEE的工程
准备好toolchain和source code之后,下一步就是编译工程,具体操作如下:

$ cd build      //切换到build目录
$ make -f qemu_v8.mk all       //编译工程  (注意到这里不是qemu.mk. 这个是以前的旧文件,是ARMv7的)

第五步, 启动qemu

$cd build       //切换到build目录
$make -f qemu_v8.mk run-only       //启动qemu v8并运行OP-TEE

第六步, 运行OP-TEE和linux

在qemu界面中输入字母“c”回车之后,就会启动两个terminal,一个是OP-TEE的terminal,端口号是54321,另外一个是linux的terminal。端口号是54320

第七步, 启动运行qemu

1)qemu的console

opentee.v8/build$ make -f qemu_v8.mk run-only
  • QEMU is now waiting to start the execution … cd /data/kernel/opentee.v8/build/…/arm-trusted-firmware/build/qemu/release
    &&
    /data/kernel/opentee.v8/build/…/qemu/aarch64-softmmu/qemu-system-aarch64

    -nographic
    -serial tcp:localhost:54320 -serial tcp:localhost:54321
    -smp 1
    -machine virt,secure=on -cpu cortex-a57 -m 1057 -bios /data/kernel/opentee.v8/build/…/arm-trusted-firmware/build/qemu/release/bl1.bin

    -s -S -semihosting-config enable,target=native -d unimp
    -initrd /data/kernel/opentee.v8/build/…/out-br/images/rootfs.cpio.gz
    -kernel /data/kernel/opentee.v8/build/…/linux/arch/arm64/boot/Image -no-acpi

    -append ‘console=ttyAMA0,38400 keep_bootcon root=/dev/vda2’ \

QEMU 2.12.0 monitor - type ‘help’ for more information (qemu)

2) 端口号54320的打印

listening on port 54320
soc_term: accepted fd 4
soc_term: read fd EOF
soc_term: accepted fd 4

3)端口号54321打印

listening on port 54321
soc_term: accepted fd 4
soc_term: read fd EOF
soc_term: accepted fd 4

在qemu的console里敲c,(小写)让系统继续运行

4)端口号54321的打印 (删除一些不重要的部分)

D/TC:0 add_phys_mem:521 TEE_SHMEM_START type NSEC_SHM 0x42000000 size 0x00200000
D/TC:0 add_phys_mem:521 TA_RAM_START type TA_RAM 0x0e400000 size 0x00c00000
D/TC:0 add_phys_mem:521 VCORE_UNPG_RW_PA type TEE_RAM_RW 0x0e149000 size 0x001b7000
…
D/TC:0 tee_ta_register_ta_store:534 Registering TA store: ‘REE’ (priority 10)
D/TC:0 tee_ta_register_ta_store:534 Registering TA store: ‘Secure Storage TA’ (priority 9)
D/TC:0 mobj_mapped_shm_init:559 Shared memory address range: f000000, 11000000
I/TC:  Initialized
D/TC:0 init_primary_helper:917 Primary CPU switching to normal world boot
I/TC:  Dynamic shared memory is enabled

5)端口号54320的打印 (删除一些不重要的部分)

listening on port 54320
soc_term: accepted fd 4
soc_term: read fd EOF
soc_term: accepted fd 4
mmap:
VA:0  PA:0x0  size:0x4000  attr:0x2 granularity:0x40000000
…
[    1.864859] ALSA device list:
[    1.865094]   No soundcards found.
[    1.867994] uart-pl011 9000000.pl011: no DMA platform data
[    1.949458] Freeing unused kernel memory: 1088K
Starting logging: OK
Initializing random number generator… [    2.638346] random: dd: uninitialized urandom read (512 bytes read)
done.
Starting tee-supplicant…
Starting network: OK
Welcome to Buildroot, type root to login
buildroot login:

第八步, 运行hello_world

在端口54320敲用户名root回车
再敲hello_world命令,启动hello_world
在端口54320里的打印

buildroot login: root

hello_world

Invoking TA to increment 42
TA incremented value to 43
在端口54321里的打印:

D/TC:0 core_mmu_entry_to_finer_grained:631 xlat tables used 4 / 5
D/TC:0 tee_ta_init_pseudo_ta_session:274 Lookup pseudo TA 8aaaf200-2450-11e4-abe2-0002a5d5c51b
D/TC:0 load_elf:842 Lookup user TA ELF 8aaaf200-2450-11e4-abe2-0002a5d5c51b (Secure Storage TA)
D/TC:0 load_elf:842 Lookup user TA ELF 8aaaf200-2450-11e4-abe2-0002a5d5c51b (REE)
D/TC:0 load_elf_from_store:810 ELF load address 0x40005000
D/TC:0 tee_ta_init_user_ta_session:1019 Processing relocations in 8aaaf200-2450-11e4-abe2-0002a5d5c51b
D/TA:  TA_CreateEntryPoint:39 has been called
D/TA:  TA_OpenSessionEntryPoint:68 has been called
I/TA:  Hello World!
D/TA:  inc_value:105 has been called
I/TA:  Got value: 42 from NW
I/TA:  Increase value to: 43
D/TC:0 tee_ta_close_session:380 tee_ta_close_session(0xe169c70)
D/TC:0 tee_ta_close_session:399 Destroy session
I/TA:  Goodbye!
D/TA:  TA_DestroyEntryPoint:50 has been called

D/TC:0 tee_ta_close_session:425 Destroy TA ctx
至此,编译并且完整的运行了qemu v8的系统。

上图了

下一步,可以自己去加一个TA和CA。
参见 https://blog.csdn.net/shuaifengyun/article/details/71517567,方法类似。

后记,仍然运行Arm v7以前旧的系统,如何返回到2017.05底的方法

上传一个文件,文件名qemu_v7.log
看文件里头的内容。
https://download.csdn.net/download/dddddttttt/10496488可以下载到

吸取教训,这里记录下目前ArmV8的版本commit id. 避免万一以后github更新导致无法运行

(在下面内容里头搜索revision,就知道commit id了)

/data/kernel/opentee.v8/.repo$ cat manifest.xml
<?xml version=“1.0” encoding=“UTF-8”?>
<manifest>
<remote name=“github”   fetch=“https://github.com” />
<default remote=“github” revision=“master” />
<!-- OP-TEE gits -->
<project path=“optee_client”         name=“OP-TEE/optee_client” />
<project path=“optee_os”             name=“OP-TEE/optee_os” />
<project path=“optee_test”           name=“OP-TEE/optee_test” />
<project path=“build”                name=“OP-TEE/build”>
<linkfile src=“qemu_v8.mk” dest=“build/Makefile” />
<linkfile src="…/toolchains/aarch64/bin/aarch64-linux-gnu-gdb" dest=“build/gdb” />
</project>
<!-- linaro-swg gits -->
<project path=“linux”                name=“linaro-swg/linux”                  revision=“6e954e2f2cbd412f7bc874bb9145f69713194e52” />
<project path=“optee_benchmark”      name=“linaro-swg/optee_benchmark”/>
<project path=“optee_examples”       name=“linaro-swg/optee_examples” />
<project path=“soc_term”             name=“linaro-swg/soc_term”               revision=“5493a6e7c264536f5ca63fe7511e5eed991e4f20” />
<!-- Misc gits -->
<project path=“arm-trusted-firmware” name=“ARM-software/arm-trusted-firmware” revision=“refs/tags/v1.5-rc2” clone-depth=“1” />
<project path=“edk2”                 name=“tianocore/edk2”                    revision=“1ea08a3dcdd61c7481ec78ad8b8037ee6ca45402” />
<project path=“qemu”                 name=“qemu/qemu”                         revision=“refs/tags/v2.12.0” clone-depth=“1” />
<project path=“buildroot”            name=“buildroot/buildroot”               revision=“62dca337fe72085d98b7603cfcff1279c48ba7d9” />
</manifest>

ARMv8的OP-TEE源代码的获取和编译相关推荐

  1. KBEngine游戏服务器(一)——引擎源代码的获取和编译

    最近在为新的VR游戏做服务器的准备工作. 为团队选了一个商业服务器后台,用起来不是很方便,感觉功能也不是很满意.因此我自己选了KBengine来做服务器做尝试,看有没有机会使用这个引擎做出符合我们需求 ...

  2. 开源3D打印软件ReplicatorG的源代码的获取与配置

    由于ReplicatorG的开源项目好像没有人维护了,所以其源代码下载下来需要一些变化才能运行,我是用Eclipse运行的,系统是win7 64位. 1 源代码的获取 由于他们是在GitHub上维护的 ...

  3. NanoPi NEO Air使用七:获取并编译U-boot和Linux的源码

    NanoPi NEO Air使用一:介绍 NanoPi NEO Air使用二:固件烧录 NanoPi NEO Air使用三:OverlayFS.CPU温度和频率.wifi.蓝牙.npi-config ...

  4. Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记

    Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记     本章学习了使用git下载两套源代码并搭建两个开发环境.分别为Android源代码和Linux内核源代码.A ...

  5. 第四章 源代码的下载和编译

    Android移植主要就是Linux内核的移植,而Linux内核的移植主要是Linux驱动的移植.为了开发和测试Linux驱动,需在Ubuntu Linux下搭建两套开发环境:Android应用程序开 ...

  6. 源代码的下载和编译:

    源代码的下载和编译: ***************************************** 下载 编译和测试Android源代码 1.创建用于存放下载脚本的目录: # mkdir ~/b ...

  7. 4源代码的下载和编译

    1.Android移植主要就是Linux内核移植,而Linux内核移植主要是Linux驱动移植,为了开发和测试Linux驱动,要在Ubuntu下搭建两套开发环境:Android应用程序开发环境和Lin ...

  8. Ethercat解析(二)之获取、编译、安装(debian7)

    EtherCAT解析之 – -- 获取.编译.安装(debian7) 说明:EtherCAT(以太网控制自动化技术)是一个开放架构,以以太网为基础的现场总线系统,其名称的CAT为控制自动化技术(Con ...

  9. 鸿蒙Hi3861学习十九-DevEco Device Tool源码获取、编译、下载

    一.简介 在上一篇文章中,已经讲述了如何在Windows通过Remote SSH远程连接Linux下的DevEco Device Tool.这篇文章,来说一下关于源码的获取.编译与下载.建议先按照上一 ...

  10. 手把手教你获取、编译和调试Flink的源代码

    导读:本文介绍如何导入Flink源代码,对源代码进行编译.构建及调试. 作者:罗江宇 赵士杰 李涵淼 闵文俊 来源:大数据DT(ID:hzdashuju) 01 获取与导入Flink源代码 1. 下载 ...

最新文章

  1. WEB服务器、应用程序服务器、HTTP服务器的区别
  2. android lint工作机制,Android架构
  3. RegExp类型exec()方法的返回值说明
  4. 【转载保存】获取页面编码
  5. strace命令(收集整理,常看常新)
  6. 【C语言】在线OJ题 BC122-BC139-牛客网编程初学者入门训练
  7. 困惑我半年的一个问题终于解决了
  8. Java学习笔记——常用类
  9. Echarts 出现不明竖线解决方案
  10. AndroidUI的基本结构
  11. Spring+quartz集群配置,Spring定时任务集群,quartz定时任务集群
  12. mysql var目录很快_mysql数据库实现亿级数据快速清理的方法
  13. C语言物业费管理系统设计,基于SSM框架的物业缴费管理系统设计与实现源码
  14. xlsx xlsx-style 设置导出的exce表格样式
  15. Mysql索引优化及面试题
  16. 用了这个办法解决Discuz! Database Error报错
  17. matlab中switch函数的使用
  18. 尺取法(图文解析、初学推荐)
  19. H264熵编码之CABAC
  20. nuc6i7kyk+linux+驱动,Intel 2016年最新版迷你PC!NUC Kit NUC6i7KYK 骷髅峡谷迷你PC!

热门文章

  1. java byte与char互转原理
  2. unity 平移图片_unity实现贴图矩阵运算(旋转平移缩放)
  3. python获取日期的年月日_python datetime和time的一些疑惑解答 及 获取上年同期、上月等日期...
  4. NetBeans在Apache基金会取得的进展
  5. J2EE MVC模式框架中,表单数据绑定功能不安全实现在Tomcat下造成的DoS及RCE
  6. 文件和目录属性ls which alias
  7. Python查看文章中每个单词的出现频率
  8. Jfinal weixin源码分析---碎碎念(看最后,有福利)
  9. LINUX 命令手册
  10. 介绍一下和AspNetPager结合的不错的分页方案