96boards와 OP-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 연결로 화면을 보기 위한 준비작업
- 이곳에 안내된 디렉토리로 진입 후 변경사항을 그대로 따라 코드를 수정
* 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 |
---|