미뤄왔던 포스팅인데 시간이 더 지나기 전에 방법을 러프하게나마 적어두려 한다.

어느정도 TA, RA에 대한 지식이 있음을 전제하에 쓰는 글이며, 필자는 HiKey960 개발보드와 터치스크린이 동작하는 환경이다.

 

참고한 글

discuss.96boards.org/t/hikey960-4gb-ram-board-aosp-optee-booting-issue/9654/27

github.com/OP-TEE/optee_os/issues/2920

 

 

먼저, 제시하는 방법은 최적화된 방법은 아닐 수 있음을 밝혀 둔다. (TA를 개발하기 위한 최소한의 조건만 모아둔 것은 아닐 것이다.)

 

선행조건으로, optee_examples 폴더 아래의 optee_example_hello_world 등의 폴더가 있는 위치에 원하는 이름의 폴더를 만들고, 폴더 구조를 다른 examples과 같게 만든다. (TA UUID를 새로 만든다거나, 이름대로 Makefile 설정을 맞춘다거나 하는 등의 작업이 필요하다.)

 

git branch에서 pull받은 후 optee_android_manifest 디렉토리로 가면 build-p-hikey960.sh라는 쉘 스크립트 파일이 있다.

 

1. 해당 스크립트를 복사하여 새로운 쉘 스크립트 파일을 만들고, 내용물을 ./build.sh -v p -t hikey960 "$@"로 만든다.

 

2. TA의 경우 ./<my_build>.sh <MY_TA_UUID>.ta,

RA의 경우 ./<my_build>.sh <MY_RA_NAME>과 같이 TA는 UUID.ta, RA는 프로젝트 이름을 인수로 주고 쉘 스크립트를 실행한다.

 

3. ninja build가 이루어지고,

TA의 경우 결과물이 optee_android_manifest/out/target/product/hikey960/vendor/lib/optee_armtz아래 .ta들이 모여있는 곳에 추가된다.

RA는 optee_android_manifest/out/target/product/hikey960/vendor/bin 하위에 다른 sample들과 같이 생성된다.

 

4. 이전 포스팅과 같이 프로젝트째 보드에 flash한다.

 

RA의 경우 보드에 TA만 있다면 통째로 reflash할 필요 없이 빌드 후 adb push 등을 통하여 보드 파일시스템에 직접 집어넣고 돌려도 잘 동작한다.

 

optee_example_secure_storage TA를 빌드한 모습
optee_example_secure_storage RA를 빌드한 모습

위는 현재 branch버전에서 빌드가 제공되지 않는 secure_storage를 상위 버전 branch에서 가져와 임의로 빌드한 스크린샷이다.

 

HiKey960에 집어넣고 실행한 모습

동작이 잘 됨을 확인할 수 있다.

 

 

 

여기부터는 여담이다. 시간이 나면 따로 온전한 포스팅으로 남길 계획

 

TrustZone - RichOS, 즉 TA - RA가 사실 OPTEE의 핵심인데, 사용자 환경에서 이를 구동하려면 SELinux의 elf파일이 아닌, Android Application의 형태가 적합하다.

 

원하는 RA기능을 동적 라이브러리 형태(.so)파일로 Android Application에 embed하여 TA - Android Applicaiton(RA) 형태로 구현하고자 안드로이드 스튜디오와 ndk로 갖은 노력을 해봤지만 조건을 만족하는 프로젝트 구조와 CMakeList.txt파일을 구성하지 못했다. 그래서 그냥 급한대로 TA - (SMC) - RA - (IPC) - Android Application 형태로 구현했다..

'AOSP+OPTEE' 카테고리의 다른 글

HiKey960에 AOSP+OP-TEE 올리고 화면 확인하기  (0) 2020.04.26

96boardsOP-TEE documentation 및 각종 사이트를 돌며 정보를 수집하고 시도한 끝에 화면 띄우기까지 성공하여 필자 기준 성공한 방법을 적어 둔 글이다. 최적화된 방법이 아닐 수 있으며 다른 방법도 얼마든지 있을 수 있다.

 

그럼에도 불구하고 글로 남기는 이유는 troubleshooting 과정이 너무 힘들고 OP-TEE documentation이나 github, 96board forum등에 정보가 산재되어 있어 하나의 방식으로 정리되지 않아 힘들었기 때문이다. 이것을 시도하는 다른 분들은 시간을 많이 소비하지 않았으면 한다.

 

자세한 보드 스펙이나 공시하는 방법은 공식 홈페이지나 documentation에서 확인해 보자

 

이 방법을 성공시키기 위해 아무것도 몰랐던 시점부터 성공시점까지 약 3주일 정도 소모되었다.

호스트 컴퓨터의 성능이 어지간히 좋지 않은 이상 수 시간 이상 소요되는 작업이다. 상당한 인내심이 필요했다.

 

 

 

 

 

준비물

- HiKey960 보드

- 보드 전용 변환케이블 (보드 단자가 특수한 규격이라 필자의 경우 보드 주문시 일반 규격과 호환되는 어댑터를 동봉해주었다)

- 보드 전원 (아두이노 mega 전원장치 스펙, 12V 2A면 충분하다)

- 호스트 컴퓨터

- USB Type-C 데이터 케이블

 

- 모니터 (7inch HDMI LCD(B) USB Capacitive Touch 800x480 Pixel Rev2.1)

 - HDMI to HDMI 케이블

 - USB micro 5pin 케이블

 - 모니터 전원 (일반 스마트폰 전원장치 스펙, 5V 1A면 충분했다)

 

0. Requirements

 - Ubuntu 16.04 LTS 혹은 그 이상의 LTS버전

 - 250GB 이상의 저장소

 - 원활한 인터넷 환경

 - 충분한 RAM (VMware 2GB로는 빌드가 안된다)

 

0-1. sudo apt install

android-tools-adb android-tools-fastboot autoconf \

automake bc bison build-essential cscope curl device-tree-compiler 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 python-serial python-wand unzip uuid-dev \

xdg-utils xterm xz-utils zlib1g-dev \

repo elftools python3-pyelftools

 

1. github branch clone

 - git clone https://github.com/linaro-swg/optee_android_manifest [-b <release_tag>]

 

* documentation에는 이와 같이 안내되어 있지만 글쓴이는 3.4.2 branch로 성공하였다.

 

2. sync repo (* 주의: 많은 시간이 소요되는 단계)

 - cd optee_android_manifest

 - ./sync-p-hikey960.sh

 

* 필자는 git config --global user.email이나 user.name을 설정해야 가능했다.

* google repo의 credential이 있어야 안드로이드 소스에 접근이 가능할 수 있다.

https://android.googlesource.com/new-password

이곳에 로그인하여 호스트 컴퓨터에서 config를 만들 수 있도록 진행한 후에 하자

 

2-1. HDMI 연결로 화면을 보기 위한 준비작업

 - https://android-review.googlesource.com/c/kernel/hikey-linaro/+/889696/2/drivers/gpu/drm/hisilicon/kirin960/kirin_drm_overlay_utils.c#802

 

 - 이곳에 안내된 디렉토리로 진입 후 변경사항을 그대로 따라 코드를 수정

 * 3.4.2 branch에 특화된 방법이므로 다른 branch에서는 방법이 다를 것이라 추정

 

3. build (* 주의: 많은 시간이 소요되는 단계)

 - ./build-p-hikey960.sh

 

* 성공하면 out 디렉토리에 빌드된 결과물이 들어간다.

 

4. 빌드된 이미지 파일을 installer 디렉토리로 복사

 - cp -a out/target/product/hikey960/*.img device/linaro/hikey/installer/hikey960/

 

* boot.img, cache.img, dt.img, ramdisk.img, system.img, userdata.img, vendor.img가 복사된다.

 

5. fastboot를 이용하여 HiKey960보드에 flashing

 - 보드의 DIP switch를 recovery boot mode로 설정 (1, 2를 on으로 두고 3을 off로 둔다.)

 - 보드의 C-type를 호스트 컴퓨터의 '메인보드에 붙어있는' USB단자로 연결

 - 보드 전원 연결

 - optee_android_manifest 디렉토리로 이동

 - sudo ./device/linaro/hikey/installer/hikey960/flash-all.sh /dev/ttyUSBn

 - bootloader 다운로드가 완료되면 프로그램 실행중인 상태에서 보드의 전원을 끄고 DIP switch를 fastboot mode로 설정 후 다시 연결 (1, 3을 on으로 두고 2를 off로 둔다.)

 - 다시 연결하면 알아서 fastboot 장치를 인식하여 flashing을 진행한다.

 

* OP-TEE 없이 AOSP만 올리는 경우와는 진행방식에 차이가 있다.

* flash-all.sh에서 입력된 디렉토리를 argument로 받는데 optee_android_manifest 디렉토리를 기준으로 실행해야만 제대로 실행된다.

 

6. normal boot

 - DIP switch 1을 on, 2, 3을 off로 두고 전원 연결

 

* 여기까지가 올리는 과정이다.

 

appendix) 호스트 컴퓨터와 adb연결

 - normal boot로 설정 후 호스트 컴퓨터에 연결

 - Google ADB Gadget으로 인식됨

 * adb devices를 입력하면 연결된 adb 디바이스를 볼 수 있음

 * adb shell 커맨드로 AOSP의 Linux shell에 진입 가능

 

 

display와 연결하면 이와 같은 화면을 볼 수 있다.

Ctype 케이블을 빼고 USB 3.0 단자와 display장치를 연결하면 터치도 가능하다.

HiKey960 보드는 Ctype포트와 USB 3.0포트를 같이 사용할 수 없게 하드웨어적으로 막혀있다고 한다.

 

=================================================================

 

2022.03.28 추가

 

어쩌면 소스코드 양이 너무 큰 이유가 git의 다른 branch가 포함되어서 그런게 아닌가 하는 의문이 들었지만 확인해 보지는 않았다. 혹시 시도하는 사람이 있다면 한번 알아보고 받도록 하자.

'AOSP+OPTEE' 카테고리의 다른 글

AOSP+OP-TEE 환경에서 TA, RA 빌드하는법  (0) 2020.09.21

+ Recent posts