ARMv8的OP-TEE源代码的获取和编译

类似的文章看到

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>


猜你喜欢

转载自blog.csdn.net/zhuyong006/article/details/85282624
今日推荐