OP-TEE 踩坑
因为要做系统模拟,所以决定在服务器上先搭个qemu试试
OP-TEE 文档上写的支持的是就Ubuntu20.04和22.04,但是作为超大胆我们服务器都是arch……
本来是想虚拟机或者docker解决,但是考虑到这种嵌套跑东西太麻烦就选择了直接用arch编译
很难受的是,并没有现成AUR包。
因为我相比c更熟悉rust,因此主要是跟随的https://optee.readthedocs.io/en/latest/building/optee_with_rust.html 这个篇章。
第一个坑是 repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml
这里,因为是大家一起用的服务器,因此没有global的git.user.name 和email,repo工具就会报错。
这个时候就修改一下repo的git配置 manifests.git/config
这个问题,加入这样几行
1 | [user] |
然后重新init,之后sync
大坑在 (cd build && make toolchains && make OPTEE_RUST_ENABLE=y CFG_TEE_RAM_VA_SIZE=0x00300000)
这个部分,
首先 make toolchains
是需要从外部下载文件的,而且走的是wget,直接HTTPS_PROXY科学不管用,得开TUN之类的虚拟网卡 or 设置 ~/.wgetrc
然后编译过程中会一直遇到错误,大概分为这样几个:
- command not found: 少命令,基本上pacman都能直接装
- 少cryptography,这个得用pip安装
pip install cryptography
;后面还有个缺 elftools 的提示,需要pip install pyelftools
,注意开头有py - edk2编译问题,原因是arch里gcc版本是12,会造成不兼容。参考下面三个网页第一个回复。应该改gcc版本也可以,但是用 CC 和 CXX 环境变量在make里好像没生效(没仔细看make内容
- https://edk2.groups.io/g/devel/message/87983
- https://edk2.groups.io/g/devel/message/87984
- https://edk2.groups.io/g/devel/message/87986
(不懂为什么22年3月就有的修复到23年4月都没补,新版本gcc真卑微
arch包管理装的内容大概这些,rust我是自己用AUR的rustup装的,python用的conda
yay -S base-devel repo dtc iasl bc cpio ninja libslirp
处理out_br过程中出现问题,会缺文件,然后编译生成,然后就直接退出(应该流程问题)
我这边先省略rust内容,直接用 (cd build && make run)
编译别的
后面步骤中出错挺麻烦,比如缺少 config.status
这种就是因为 ./configure
失败导致
curl 的问题,按理说应该 CFLAGS+=-Wno-error=deprecated-declarations 就可以的,但是这个make好像不传递给它的子make,CC什么的试了也都没用就只好改源码了
qemu/block/curl.c
- `CURLOPT_PROTOCOLS` -> `CURLOPT_PROTOCOLS_STR`: 就加个_STR
- `CURLOPT_REDIR_PROTOCOLS` -> `CURLOPT_REDIR_PROTOCOLS_STR`: 就加个_STR
- `CURLINFO_CONTENT_LENGTH_DOWNLOAD` -> `CURLINFO_CONTENT_LENGTH_DOWNLOAD_T`: 就加个_T