OP-TEE的安裝

前言

至於OP-TEE一些相關介紹我不羅嗦了。您可以去search。我僅翻譯。

關於軟件安裝的文章,隨着軟件版本的更新迭代,最容易失效。
官網的安裝過程最爲可靠全面。這篇文章,翻譯OP-TEE官網的安裝過程,僅起引導作用。如果失效,建議去官網查看。

官網原文地址:https://optee.readthedocs.io/en/latest/building/gits/build.html

如有不對的地方,請指正。


正文

1、build

爲什麼是這個特別的git?事實證明,您完全有可能自己整理所有內容。您可以構建所有單獨的組件,包括os,client,xtest,Linux kernel,TF-A,TianoCore,QEMU,Buildroot等,並將所有二進制文件放在正確的位置,並編寫自己的命令行,Makefile,shell腳本等。在您感興趣的設備上很好地工作。如果您知道該怎麼做,很好,請加油。另外,如果出於某種原因,您想要以自動化方式運行某些程序,那麼還需要其他一些方法來爲您打包。

但設置一個工作環境,對於新手來說,並不友好。我們的目標是:有了這個特定的git build.git,新手可以快速使用我們在本文中列出的設備,開始使用OP-TEE之旅。

2、git location

https://github.com/OP-TEE/build

3、 Why repo?

我們討論了替代方案:最初我們從一個簡單的shell腳本開始。它最初有效,但是在使用了更多git和支持更多設備之後,就開始難以維護。 最後,我們在 repo fromGoogle AOSPgit submodules之間進行選擇。 不管選擇哪種方式,總會有人爭論另一個更好。 對於我們來說,我們決定使用repo。 不是直接針對repo的功能本身,而是針對它可以簡單地處理穩定和非穩定的 manifests 。 使用一些提示和技巧,還可以大大加快設置時間。 對於提交,分支等日常工作,我們傾向於直接使用git命令。

4、Root filesystem

我們在本文中介紹的構建中的rootfs儘可能小,它基於精簡的Buildroot配置,在rootfs中添加的部分,僅能滿足以下功能:

  • Boot OP-TEE.
  • Run xtest with no regressions.
  • Easily add additional developer tools like, strace, valgrind etc.

note

由於僅有上面內容,基於非UART的環境可能無法立即使用。 也就是說,如果您嘗試使用HDMI引導環境並連接鍵盤和其他設備,則可能無法正常工作。 爲了使它們工作,您可能需要在啓用了正確的驅動程序/框架,和在Buildroot中啓用binaries/daemons的情況下重建Linux內(user space tools and drivers)。

5、How do I build using AOSP / OpenEmbedded?

有關如何構建AOSP的指南,請參閱我們的AOSP頁面。 對於OpenEmbedded,我們尚未準備好指南,但是Linaro中有一些團隊正在building OP-TEE using OpenEmbedded。 如果您想與他們聯繫,請與我們聯繫(請參閱Contact)。

6、Platforms supported by build.git

下表顯示了build.git支持的平臺。OP-TEE支持下面這些平臺,還有一些其他平臺是由Linaro以外的人維護,或正在使用特殊的設置。因此,如果您有任何相關的問題,我們建議您直接與該平臺的維護者聯繫…… 請參閱MAINTAINERS文件以獲取聯繫信息。

Platform Composite flag Publicly available?
ARM Juno Board PLATFORM=vexpress-juno Yes
ARM Foundation FVP PLATFORM=vexpress-fvp Yes
DeveloperBox PLATFORM=synquacer Yes
HiKey Kirin 620 PLATFORM=hikey Yes
HiKey 960 PLATFORM=hikey-hikey960 Yes
MediaTek MT8173 EVB Board (deprecated) PLATFORM=mediatek-mt8173 No
Poplar PLATFORM=poplar Yes
QEMU PLATFORM=vexpress-qemu_virt Yes
QEMUv8 PLATFORM=vexpress-qemu_armv8a Yes
Raspberry Pi 3 PLATFORM=rpi3 Yes
Texas Instruments DRA7xx PLATFORM=ti-dra7xx Yes
Texas Instruments AM57xx PLATFORM=ti-am57xx Yes
Texas Instruments AM43xx PLATFORM=ti-am43xx Yes

7、Manifests

7.1 Current version

這是build.git中支持設備的 manifests。 有了這些,您將獲得一個包含所有必要軟件組件的設置,以在所選設備上運行OP-TEE。 請注意,這是運行OP-TEE gits上最新版本。這意味着如果您re-sync,則很可能會得到新的commit。 如果您需要一個 stable/tagged 版本,請改爲參考下一節。

Target Manifest xml Device documentation
AM43xx am43xx.xml Texas Instruments SoCs
AM57xx am57xx.xml Texas Instruments SoCs
DeveloperBox synquacer.xml DeveloperBox
ARM Juno board juno.xml Juno
DRA7xx dra7xx.xml Texas Instruments SoCs
FVP fvp.xml FVP
HiKey 960 hikey960.xml HiKey 960
HiKey hikey.xml HiKey 620
Poplar Debian poplar.xml
QEMU default.xml QEMU v7
QEMUv8 qemu_v8.xml QEMU v8
Raspberry Pi 3 rpi3.xml Raspberry Pi 3

7.2 Stable releases

從OP-TEE v3.1開始,您可以使用與上述相同的 manifests 來check out穩定版本,但不同之處在於,還需要指定與發行版本相對應的分支,分支名與版本名相同。 即,當我們進行發佈時,創建一個與發行版本相對應名稱的分支。 因此,假設您要 check out Raspberry Pi 3的OP-TEE v3.4,您按照這樣做,而不是待會下面“Step 3 - Get the source code”部分中提到的內容(注意 -b 3.4.0):

$ repo init -u https://github.com/OP-TEE/manifest.git -m rpi3.xml -b 3.4.0

7.3 Stable releases prior to OP-TEE v3.1 (v1.0.0 to v3.0.0)

在OP-TEE v3.1之前,穩定版本的build有單獨的 xml-manifest 。 如果出於某種原因需要較舊的穩定版本,則可以使用與設備相對應的xyz_stable.xml文件。 初始化repo的方式與上面描述的幾乎相同,主要區別在於所引用 manifest 的名稱(-m xyz_stable.xml),並且我們引用的是 tag 而不是分支(-b refs/tags/MAJOR.MINOR.PATCH)。 舉例來說,如果您需要爲 安裝 HiKey 2.1.0穩定版本,那麼您會這樣做,而不是待會下面“Step 3 - Get the source code”部分中提到的內容。

$ repo init -u https://github.com/OP-TEE/manifest.git -m hikey_stable.xml -b refs/tags/2.1.0

這是舊版本支持的Target列表和Stable manifest文件的名稱:

Target Stable manifest xml
AM43xx am43xx_stable.xml
AM57xx am57xx_stable.xml
ARM Juno board juno_stable.xml
DRA7xx dra7xx_stable.xml
FVP fvp_stable.xml
HiKey 960 hikey960_stable.xml
HiKey Debian hikey_debian_stable.xml
HiKey hikey_stable.xml
MTK8173 mt8173-evb_stable.xml
QEMU default_stable.xml
QEMUv8 qemu_v8_stable.xml
Raspberry Pi 3 rpi3_stable.xml

(譯者注:不清楚這個target如何使用,但不推薦使用較舊的版本)

8、Get and build the solution

下面,我們將描述如何獲取源代碼,編譯以及在設備上運行xtest。 有關設備的特定說明,請參閱“Current version”部分中表格中的鏈接。

8.1 Step 1 - Prerequisites

安裝之前,根據 Prerequisites page 安裝一些軟件包安裝。即

$ 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 libc6:i386 libcap-dev \
        libfdt-dev libftdi-dev libglib2.0-dev libhidapi-dev libncurses5-dev \
        libpixman-1-dev libssl-dev libstdc++6:i386 libtool libz1:i386 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

注:
我們相信您可以使用任何Linux發行版來構建OP-TEE,但是作爲OP-TEE的維護者,我們主要使用基於Ubuntu的發行版,並且爲了能夠構建和運行OP-TEE,需要一些軟件包安裝開始。因此,無論最終使用什麼目標,都請安裝以上軟件包。

8.2 Step 2 - Install Android rep

請注意,這裏您沒有安裝龐大的SDK,只是下載Python腳本並放入$ PATH中。 確切的 “install”
repo 的方法可以在Google repo 頁面上找到。因此在繼續之前,請按照那些說明進行操作。

8.3 Step 3 -Get the source code

選擇與您要使用的平臺相對應的manifest(請參閱“Current version”部分中的表。例如,如果您要使用Raspberry Pi3,則在下面的第3行中,$ {TARGET} .xml應爲rpi3.xml)。 <optee-project>是您想要存儲整個OP-TEE(開發人員設置) 的任何位置。

$ mkdir -p <optee-project>
$ cd <optee-project>
$ repo init -u https://github.com/OP-TEE/manifest.git -m ${TARGET}.xml [-b ${BRANCH}]
$ repo sync -j4 --no-clone-bundle

提示:
通過referencing現有的和本地保存的 repo,您可以節省大量時間。我們正在談論在30秒而不是15-30分鐘內執行repo sync(更多信息,請參見“ Tips and Tricks”)。

8.4 Step 4 - Get the toolchains

在OP-TEE中,我們針對不同的目標使用不同的 toolchains(取決於ARMv7-A ARMv8-A 64/32位解決方案)。 無論如何,首先通過以下方式下載工具鏈:

$ cd <optee-project>/build
$ make -j2 toolchains

8.5 Step 5 - Build the solution

我們已經配置了repo manifests。因此 repo 始終自動的將Makefile 符號鏈接(symlink)到正確設備的Makefile,這意味着您只需運行以下命令,即可開始構建(build)(仍在<optee-project> / build中)

$ make -j `nproc`

(譯者注:不同的設備,對應不同的Makefile文件(eg:qume.mk)。而repo manifests的配置,使得Makefile軟連接到特定設備的mk文件。使得操作統一。)

這步驟將花費一些時間,但是您可以通過啓用 ccache 來加快後續構建(build)速度(再次參見“ Tips and Tricks”)。

注:
如果遇到構建(build)問題,則可以將整個構建(build)日誌通過管道傳輸到文件中。這使得使用常規編輯器更容易搜索問題。 在這種情況下,也請避免使用-j標誌,以便更輕鬆地瞭解事情發生的順序。 要創建build.log文件,請執行以下操作:$ make 2>&1 | tee build.log

8.6 Step 6 - Flash the device

non-emulated 解決方案上(這意味着在運行QEMU-v7 / v8和FVP時不應執行此步驟),您將需要以某種方式 flash 軟件。 我們已嘗試將其“隱藏”在下面make target 中:

$ make flash

但是,由於某些設備比其他設備更難於刷新。因此參閱 Device specific information。 將此視爲一般說明。

8.7 Step 7 - Boot up the device

對於特定於設備。(參見 Device specific information

8.8 Step 8 - Load tee-supplicant

在大多數解決方案中,tee-supplicant已經運行(通過運行$ ps aux | grep tee-supplicant檢查)。 如果它沒有運行,請通過運行以下命令啓動它:

$ tee-supplicant -d

注:
如果您是使用 manifest 創建,則無需修改任何OP-TEE / TEE內核驅動程序。因爲它已經內置在我們設置中。

8.9 Step 9 - Run xtest

當您在之前進行build(編譯/構建)時,整個xtest測試套件已部署完畢。即,通常無需手動複製任何二進制文件。 一切都已自動放入 Root filesystem文件系統中。 因此,要運行xtest,只需輸入:

$ xtest

如果沒有發現regressions / issues,則xtest應該以以下內容結尾:

...
+-----------------------------------------------------
23476 subtests of which 0 failed
67 test cases of which 0 failed
0 test case was skipped
TEE test application done!

提示:
有關運行xtest的其他方法,請參閱 optee_test 頁面中的“Run xtestt”。

9 Tips and Tricks

9.1 Reference existing project to speed up repo sync

進行repo initrepo sync可能需要花費大量時間。 主要原因僅僅是因爲我們正在使用的某些git較大,例如 Linux 內核和 EDK2。 使用 repo,您可以 reference an existing forest,這樣可以將 repo sync 加快到30秒,而不是15-30分鐘。 這樣做的方法如下。

  • 首先,設置一個 clean forest 。在本示例中,讓我們將其稱爲optee-ref並將其放在$ HOME / devel / optee-ref下。 此步驟大約需要15到45分鐘,具體取決於您與互聯網的連接速度。

  • 然後啓動一個cronjob(crontab -e),它每晚在此文件夾特定的文件夾中執行一次repo sync

  • 現在,您應該設置將要用的working tree。 這樣做的方式與上面的說明中所述幾乎相同(see the “Step 3 - Get the source code” section),唯一的區別是,在運行repo init時,您還引用了另一個本地 forest,就像這樣

$ repo init -u https://github.com/OP-TEE/manifest.git --reference $HOME/devel/optee-ref
  • 其餘與上面相同,但是現在只需幾秒鐘即可克隆forest。

通常,上面的“ 1”和“ 2”只會執行一次。 同樣,如果您忽略了步驟“ 2”,那麼您仍將從官方git forest中獲取最新消息,因爲repo還將檢查本地 reference 中沒有的更新。

(譯者注:這個方法我沒有用過,猜測是使用定時任務拉取更新,在本地建立一個完整倉庫,類容從本地拉取。具體的使用過程,不清楚。但是個好辦法)

9.2 Use ccache

ccache 是一種工具,可將構建(build)的目標文件緩存在本地,並可在以後的構建(build)中大大加快構建時間。 在基於Debian的系統(Ubuntu,Mint等)上,只需運行以下命令即可安裝:

$ sudo apt-get install ccache

如果在系統上安裝了ccache,則build.git中的makefile配置爲自動查找和使用ccache。因此除了安裝它之外,您無需考慮任何其他事情。


譯者(我de)安裝過程

1、Environment

  • Ubuntu 18.04 LTS

  • QEMU v7

  • OP-TEE 3.6

2、process

注意:確保每一步都正確無誤,再往下執行

2.1 Prerequisites

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 libc6:i386 libcap-dev \
        libfdt-dev libftdi-dev libglib2.0-dev libhidapi-dev libncurses5-dev \
        libpixman-1-dev libssl-dev libstdc++6:i386 libtool libz1:i386 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    -y

2.2 Install Android repo

參見:清華源 Git Repo 鏡像使用幫助

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo

爲了方便可以將其拷貝到你的PATH裏。(注意不要與本地環境的repo”衝突“。請自行處理)

我直接使用 ./repo + 參數。

或者參考視頻:Qemu中運行OP-TEE

2.3 Get the source code

$ mkdir -p <optee-project>
$ cd <optee-project>
$ repo init -u https://github.com/OP-TEE/manifest.git -m default.xml.xml -b 3.6 --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo 
$ repo sync -j4 --no-clone-bundle

請確保源碼拉去完整。

2.4 Get the toolchains

$ cd <optee-project>/build
$ make -j2 toolchains

這一步,我當時失敗過幾次,可以分析qemu.mk內容,然後提取出來再命令行單獨運行。

參考:Toolchains

所以我多做了下面這一步(我直接將它們放入~/.bashrc中,然後resource)

如果不執行下面命令,我不知道是否會有影響。

export PATH=$PATH:$HOME/toolchains/aarch32/bin:$HOME/toolchains/aarch64/bin

2.5 Build the solution

$ make -j `nproc`

編譯報錯,只能慢慢修改。

2.6 Load tee-supplicant

#檢查是否已運行。我的已運行,不用加載
$ ps aux | grep tee-supplicant

2.7 Run xtest

#啓動:在build目錄下運行
make run
#按下 c 表繼續
(qemu) c
# 在 normal world 中 用 test 登錄
$ test
#進行測試
$ xtest 6001 

結果如下:

在這裏插入圖片描述

正確安裝完成。

3、其他

  • 按照配置文件,我上面兩個終端名字應爲Normal World 和 Secure World

    如上圖所示,我的兩個終端名字並非 Normal World 和 Secure World。(或許存在問題,但未知)

在這裏插入圖片描述

  • 由於目前使用的是虛擬機,我並沒有安裝ccache。

  • 我推薦使用Ubuntu 操作系統進行安裝。我曾經嘗試過使用Debian和Centos服務器安裝,均沒成功。

  • 建議在網絡穩定的地方進行安裝。

  • 在碼雲上有一些倉庫,我並沒有嘗試過。

在這裏插入圖片描述

  • docker for OP-TEE 或許也是不錯的選擇(並沒有嘗試過)。但是本地安裝一遍,對於以後的移植或許會有幫助。

    在這裏插入圖片描述

最後

  • 9.1中關於git內容的翻譯,可能不準確。因爲我僅會git的簡單操作,有些操作沒有用過。可以去官網原文查看。
  • 關於build的翻譯,我採用了google翻譯構建。如果是compile或許是編譯更準確。
  • 如有不對的地方,請指正。
  • 2020/1/5 中雪
    在這裏插入圖片描述
    (我特地跑出去,這冷~)
發佈了104 篇原創文章 · 獲贊 146 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章