OPTEE3.17+ubuntu20.04+qemu_v8搭建OPTEE开发环境

参考文章:

https://blog.csdn.net/capodexi/article/details/123548850
https://blog.csdn.net/qq_42557044/article/details/130973200
https://blog.csdn.net/zhuwade/article/details/125513873
https://zhuanlan.zhihu.com/p/521196386
https://blog.csdn.net/m0_63932232/article/details/130211897(这个是ubuntu14上的教程,对应optee2.6,用的python2)
https://blog.csdn.net/weixin_42135087/article/details/119712448(付费,不过按照里面的教程还是有些问题)
https://blog.csdn.net/yuxi_xi/article/details/128905197(这个文章也很好)

参考了非常多的文章,环境一直出问题,搞了好几天,一直报错,所以总结一下。

  1. 系统安装:首先是需要安装ubuntu20.04镜像(ubuntu-20.04.6-desktop-amd64.iso ),参考下面的镜像链接,我选的是中科大的镜像,下载很快。使用virtualBox安装镜像,参考下面第二个链接。(安装选项可以选择最小版本的安装,安装教程中的增强功能要安装。
    镜像链接:https://blog.csdn.net/weixin_45498383/article/details/131047312
    virtualBox镜像安装教程:http://www.taodudu.cc/news/show-3338373.html?action=onClick

  2. 网络问题:然后就是核心的网络问题,这个是最核心的,需要能访问github。虽然网上很多教程说改配置文件能够访问github,但是我试了很多,依然在后面git的时候下载失败。所以需要配置ubuntu能访问外网,并且是能安装到linux系统上的工具。这个如果有需要可以私信我,或者网上找能访问外围的工具也行。(后续很多问题都是下载中断,导致有些包没下载下来,最后没办法运行成功。)比如下面的报错问题,
    fatal:unable to access 'http://git…(这种问题就是网络问题,需要配置linux访问外网)
    [common.mk:573:optee-os-common]Error 2(网络中断导致执行repo sync的时候没下载成功所有的包)

  3. 基础包安装:接下来,就是开始安装最基础的包,参考的是optee的官方链接(https://optee.readthedocs.io/en/latest/building/prerequisites.html),找自己对应ubuntu版本的基础包,打开命令行窗口运行安装。这步先要执行下面的更换镜像源。不然会出现下面图中的问题。

sudo apt 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 \libgmp3-dev \libhidapi-dev \libmpc-dev \libncurses5-dev \libpixman-1-dev \libssl-dev \libtool \make \mtools \netcat \ninja-build \python3-crypto \python3-cryptography \python3-pip \python3-pyelftools \python3-serial \rsync \unzip \uuid-dev \xdg-utils \xterm \xz-utils \zlib1g-dev

这个地方刚开始会出现找不到对应的仓库下载这些包,原因是刚开始默认的仓库太旧,需要更改,不然会出现下面图的问题。参考下面的链接(我用的是阿里的,替换里面的内容):
Ubuntu–更改国内镜像源(阿里、网易、清华、中科大):

https://blog.csdn.net/u011198687/article/details/121103821
https://blog.csdn.net/u011483658/article/details/95012034
https://midoq.github.io/2022/05/30/Ubuntu20-04%E6%9B%B4%E6%8D%A2%E5%9B%BD%E5%86%85%E9%95%9C%E5%83%8F%E6%BA%90/

在更新镜像源之前得用lsb_telease -a | grep Codename 或者lsb_release -a查看自己系统版本,然后替换源里面的内容,20.04时focal ,18.04是bionic,16.04是xenial。
可以参考上面第一个链接的命令,不过那个里面的源是不同版本的,我用的中科大的对应20.04版本。
更换镜像源成功之后,再执行上面的基础包的安装。
在这里插入图片描述
注意安装python2.7后,需要创建一个软链接。(这个地方我是对python3设置的软连接,因为前面我看安装的是python3。而这个参考文章是对python2.7设置的,https://blog.csdn.net/zhuwade/article/details/125513873,但是我之前看官方的issue的时候,是有人回答新的版本optee代码是不支持python2.7的。)

cd /usr/bin/
sudo ln -sf python2.7 python
  1. 安装http服务
sudo apt-get install apache2
sudo /etc/init.d/apache2 restart
  1. 安装 repo(参考链接https://source.android.com/source/downloading?hl=zh-cn,这个里面只有部分步骤是必须的。)
    下面这些命令我是在root根目录下执行的。
    在这里插入图片描述
    这个地方的repo位置需要跟后面optee的安装位置一致,所以这个地方,最好是先创建一个optee文件夹,然后在该文件夹下执行下面的这些命令。(不过我看好多都是直接安装到了根目录,也有可能不影响后面的?)

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
执行上面的,或者下面的应该都可以
git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo
cd git-repo/
cp repo ~/bin/
chmod a+x ~/bin/repo 
  1. 安装 git 并配置信息(这一步官方文档没有说必须要执行,也是参考的一些链接,有些链接也没执行这个。)
sudo apt install git(正常新安装的系统没有git,需要安装)
git config --global user.name "Your Name"
git config --global user.email "you@example.com"

需要你有github账号,上面名字随便取,邮箱是你github的邮箱。

  1. 然后,就是执行安装,因为我用的是qemu v8,参考的是这个链接:https://optee.readthedocs.io/en/latest/building/devices/qemu.html#qemu-v8,具体命令如下:
    这个地方执行了qemu_v8.xml,不过最后安装成功的界面是qemu6,不太清楚是什么原因。
$ mkdir optee
$ cd optee
$ repo init -u git@github.com:OP-TEE/manifest.git -m qemu_v8.xml --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -b 3.17.0
或者:repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml -b 3.17.0 (qemu_v8.xml如果是不同的设备,需要替换该参数。-b 3.17.0这个地方要指定版本号,不然会出问题。官方推荐是用最新的版本。这个ununtu具体哪个版本对应安装多少版本,我没找到对应关系。我看有人用ubuntu20.04对应的是optee3.8,也有用ubuntu20.04+optee3.17的【https://blog.csdn.net/zhuwade/article/details/125513873】,所以我也选择用3.17)
$ repo sync
$ cd build
$ make toolchains
$ make run

这个地方需要解释一下,qemu不需要我们单独再安装这个软件,执行这些步骤,会在optee文件夹下的build文件夹下安装qemu V8。
repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml(执行这一步的时候,如果网络无法访问外围,会报错,连接超时。这一步执行时间也比较快,估计几分钟)
成功之后,会出现下面的界面(需要确保目录正确.repo是在optee目录下的。如果安装到了其他位置,再在optee下安装的话,需要先把之前的删掉,执行命令:rm -r /.repo【如果安装到根目录的话】):
在这里插入图片描述

repo sync(执行这步骤会比较慢,网速好的话十几分钟,慢的话半个小时甚至更长。这个链接里面有说网络如果不行的情况下,分步骤拉取代码。还有就是在拉取过程中设置linux常亮,不然息屏可能会导致网络断掉。https://blog.csdn.net/zhuwade/article/details/125513873)

make toolchains(这步比较快,几秒钟)

make run 执行过程图(下图,这步非常慢,第一次执行估计要一两个小时。这步如果出现[common.mk:573:optee-os-common]Error 2这种错误,大概率就是之前repo sync里面有报错,有些包没有下载成功)
在这里插入图片描述

  1. 执行完make run出现了下面的报错信息。
    在这里插入图片描述
    解决方法是参考这个链接:
    https://blog.csdn.net/tianzhilan4444/article/details/118638928

在这里插入图片描述

这个地方有个问题就是,显示的是qemu6而不是qemu8,比较奇怪。
执行下面的命令,也是弹出的qemu6

make -f qemu_v8.mk all -j8
make -f qemu_v8.mk run-only
  1. 如果出现需要登录的界面,用户名root,无密码
    在这里插入图片描述

  2. 中间在安装过程中遇到的其他问题(之前的错误尝试,试了很多方法,最后还是有问题,如果按照上面的流程应该没问题。):
    在这里插入图片描述
    执行下面的命令解决上图中的问题,不过又出现了下面图中的问题,

sudo apt-get install meson
sudo apt-get install libpixman-1-dev

在这里插入图片描述

编译(上面的make run,改成下面的就没问题了,而且时间执行更快一点)

make -f qemu_v8.mk all -j8

运行,

make -f qemu_v8.mk run-only

然后出现了,下面的错误,终端打不开。(参考这个链接里解决,https://blog.csdn.net/tianzhilan4444/article/details/118638928)
在这里插入图片描述

最后出现了两个窗口,但是主要的界面,没有进入qemu环境。(这个问题一直没解决,估计之前环境版本问题导致。问题待解决,最后重新装的系统,参考很多资料,运行成功。)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/48275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决方案中-excel表格的常用功能

解决方案中-excel表格的常用功能: 1.冻结表格的列,行 1.1冻结表格的列,行 需求:表格很多列的内容,我需要关注后面的内容的同时也需要关注前面的内容 操作步骤: 选定指定的列【那一列内容】,…

java八股文面试[JVM]——垃圾回收

参考:JVM学习笔记(一)_卷心菜不卷Iris的博客-CSDN博客 GC垃圾回收面试题: JVM内存模型以及分区,需要详细到每个区放什么 堆里面的分区:Eden,survival from to,老年代,各…

Golang GORM 单表删除

删除只有一个操作,delete。也是先找到再去删除。 可以删除单条记录,也可以删除多条记录。 var s Studentdb.Debug().Delete(&s, "age ?", 100)fmt.Println(s)[15.878ms] [rows:1] DELETE FROM student WHERE age 100var s Studentdb.De…

2023-08-21 LeetCode每日一题(移动片段得到字符串)

2023-08-21每日一题 一、题目编号 2337. 移动片段得到字符串二、题目链接 点击跳转到题目位置 三、题目描述 给你两个字符串 start 和 target ,长度均为 n 。每个字符串 仅 由字符 ‘L’、‘R’ 和 ‘_’ 组成,其中: 字符 ‘L’ 和 ‘R…

基于swing的零件销售系统java jsp客户信息维护mysql源代码

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于swing的零件销售系统 系统有1权限:管…

论文阅读 - Understanding Diffusion Models: A Unified Perspective

文章目录 1 概述2 背景知识2.1 直观的例子2.2 Evidence Lower Bound(ELBO)2.3 Variational Autoencoders(VAE)2.4 Hierachical Variational Autoencoders(HVAE) 3 Variational Diffusion Models(VDM)4 三个等价的解释4.1 预测图片4.2 预测噪声4.3 预测分数 5 Guidance5.1 Class…

【Java从入门到精通|1】从特点到第一个Hello World程序

写在前面 在计算机编程领域,Java是一门广泛应用的高级编程语言。它以其强大的跨平台性能、丰富的库和生态系统以及易于学习的语法而备受开发者欢迎。本文将引导您逐步了解Java的特点、如何安装和配置开发环境,以及如何编写您的第一个Java程序。 一、Java…

回归预测 | MATLAB实现BES-LSSVM秃鹰搜索算法优化最小二乘支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现BES-LSSVM秃鹰搜索算法优化最小二乘支持向量机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现BES-LSSVM秃鹰搜索算法优化最小二乘支持向量机多输入单输出回归预测(多指标,多图&a…

Redis中的淘汰策略

前言 本文主要说明在Redis面临key过期和内存不足的情况时,可以采用什么策略进行解决问题。 Redis中是如何应对过期数据的 正如我们知道的Redis是基于内存的、单线程的一个中间件,在面对过期数据的时候,Redis并不会去直接把它从内存中进行剔…

Redis 缓存满了怎么办?

引言 Redis 缓存使用内存来保存数据,随着需要缓存的数据量越来越大,有限的缓存空间不可避免地会被写满。此时,应该怎么办?本篇文章接下来就来聊聊缓存满了之后的数据淘汰机制。 值得注意的是,在 Redis 中 过期策略 和…

C. Another Array Problem

思路:这个题没想到吧数先往0上搞,然后一直想不出来,为什么要先往0上搞呢,对于每个数来说,它最大只会变成这一堆数的最大值,所以我们考虑能不能变成最大值,那么只要是两个相等的数通过一次操作就…

xcode14.3更新一系列问题

1. Missing file libarclite_iphoneos.a (Xcode 14.3) 解决方法 Xcode升级到14.3后编译失败,完整错误日志: File not found: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneo…

C语言好题解析(四)

目录 选择题一选择题二选择题三选择题四选择题五编程题一 选择题一 已知函数的原型是: int fun(char b[10], int *a); 设定义: char c[10];int d; ,正确的调用语句是( ) A: fun(c,&d); B: fun(c,d); C: fun(&…

Java进阶(4)——结合类加载JVM的过程理解创建对象的几种方式:new,反射Class,克隆clone(拷贝),序列化反序列化

目录 引出类什么时候被加载JVM中创建对象几种方式1.new 看到new : new Book()2.反射 Class.forName(“包名.类名”)如何获取Class对象【反射的基础】案例:连接数据库方法 3.克隆(拷贝)clone浅拷贝深拷贝案例 序列化和反序列化对象流-把对象存…

【面试题】前端面试复习6---性能优化

前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 性能优化 一、性能指标 要在 Chrome 中查看性能指标,可以按照以下步骤操作: 打开 Chrome 浏览器,并访问你想要测试…

lvs-DR

lvs-DR数据包流向分析 client向目标VIP发出请求。 DIR根据负载均衡算法一台active的RS(RIR1),将RIP1所在的网卡的mac地址作为目标的mac地址,发送到局域网里。 RIRI在局域网中的收到这个帧,拆开后发现目标&#xff08…

IPEmotion交流电功率分析计算

一 应用背景 随着国内电动汽车行业的快速发展,在相同的道路环境和行驶状态下,增加电动车的整体续航里程和提升乘员对于行驶途中用电需求的满意度尤为重要。对此,需要采集试验过程中交直流电压电流信号,以计算出车辆各种部件输出和…

Docker容器与虚拟化技术:Docker镜像创建、Dockerfile实例

目录 一、理论 1.Docker镜像的创建方法 2.Docker镜像结构的分层 3.Dockerfile 案例 4.构建Systemctl镜像(基于SSH镜像) 5.构建Tomcat 镜像 6.构建Mysql镜像 二、实验 1.Docker镜像的创建 2. Dockerfile 案例 3.构建Systemctl镜像(…

大数据平台需要做等保测评吗?怎么做?

大数据时代的数据获取方式、存储规模、访问特点、关注重点都有了很大不同,所以保证大数据平台数据安全尤其重要。因此不少人在问,大数据平台需要做等保测评吗?怎么做? 大数据平台需要做等保测评吗? 大数据平台是需要做…

数据结构之——(手撕)顺序表

本章会介绍的知识点如下图: 1: 顺序表的概念:顺序表是用一段物理地址连续的存储单元依次存储数据的线性结构,通常我们使用数组来表示,对数组进行增删查改。 顺序表的结构:逻辑结构与物理结构都是内存中一块…