먼저, 제시하는 방법은 최적화된 방법은 아닐 수 있음을 밝혀 둔다. (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 등을 통하여 보드 파일시스템에 직접 집어넣고 돌려도 잘 동작한다.
위는 현재 branch버전에서 빌드가 제공되지 않는 secure_storage를 상위 버전 branch에서 가져와 임의로 빌드한 스크린샷이다.
동작이 잘 됨을 확인할 수 있다.
여기부터는 여담이다. 시간이 나면 따로 온전한 포스팅으로 남길 계획
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 형태로 구현했다..
96boards와 OP-TEE documentation 및 각종 사이트를 돌며 정보를 수집하고 시도한 끝에 화면 띄우기까지 성공하여 필자 기준 성공한 방법을 적어 둔 글이다. 최적화된 방법이 아닐 수 있으며 다른 방법도 얼마든지 있을 수 있다.
그럼에도 불구하고 글로 남기는 이유는 troubleshooting 과정이 너무 힘들고 OP-TEE documentation이나 github, 96board forum등에 정보가 산재되어 있어 하나의 방식으로 정리되지 않아 힘들었기 때문이다. 이것을 시도하는 다른 분들은 시간을 많이 소비하지 않았으면 한다.
자세한 보드 스펙이나 공시하는 방법은 공식 홈페이지나 documentation에서 확인해 보자
이 방법을 성공시키기 위해 아무것도 몰랐던 시점부터 성공시점까지 약 3주일 정도 소모되었다.
호스트 컴퓨터의 성능이 어지간히 좋지 않은 이상 수 시간 이상 소요되는 작업이다. 상당한 인내심이 필요했다.
준비물
- HiKey960 보드
- 보드 전용 변환케이블 (보드 단자가 특수한 규격이라 필자의 경우보드 주문시 일반 규격과 호환되는 어댑터를 동봉해주었다)