Google Coral, Windows 개발 환경 구축하기
필자가 처음 Google Coral을 받았을 때 집에서 사용하는 컴퓨터는 Windows 10을 사용하고 있었다. 당시 드라이버 및 일부 환경적 문제로 인해 Coral에 부트 이미지를 올리는 작업 자체가 거의 불가능에 가까웠기 때문에 Linux나 macOS에서 초기 환경 구축이 필요했다. 그런데, Coral이 몇 차례 리버전 되어 기본 부트 이미지가 탑재되고, 드라이버 호환성이 좋아짐에 따라 Windows에서 사용이 가능하게 됐다.
문제는 대부분의 예제가 Linux/macOS 용으로 나오고 있다는 것. 때문에, Coral기반 연구개발을 하기 위해선 이종 운영체제가 필요한 컴퓨터/노트북이 필요한데 비용적 문제에 직면하게 된다. Windows 사용자가 가장 쉽게 개발 환경을 만드는 방법은 VMware Player에 Linux를 설치해 사용하는 것. Host 리소스가 넉넉하지 않거나, VMware 설정이 익숙하지 않은 사람은 선뜻 친해지기 어려울 것이다.
Windows에서 개발 환경을 만들려면 어떻게 해야 할까?
Windows에 Linux 설치
Windows 10에 어렵지 않게 Linux 설치가 가능하다. 정식 명칭은 “Linux용 Windows 하위 시스템(Windows Subsystem for Linux, WSL)“이라 부르며, Native Linux 환경을 만들고 파일을 실행할 수 있다. 그리고, 이 시스템은 Host 운영체제인 Windows에 어떠한 영향도 미치지 않는다는 장점이 있다. 과거 Windows Insider 프로그램에 가입해야 사용할 수 있었지만 지금은 누구나 사용할 수 있다.
설치 방법은 “프로그램/추가 삭제“의 서브 메뉴 “Windows 기능“에 위치한 “Linux용 Windows 하위 시스템“을 선택하자. 필요한 프로그램이 자동으로 설치되고 리부팅 될 것이다.
Microsoft Store를 방문해 Linux 를 검색해보자. 몇몇 배포판이 보이는데, 보편적으로 많이 사용되는 Ubuntu 18.04 LTS를 설치하자.
위 화면에 ‘열기(실행)’ 버튼을 누르거나, 윈도 시작 버튼을 누르고 ubuntu를 입력해 검색된 Ubuntu를 실행하자. 첫 실행 시 사용자 이름과 비밀번호를 입력하라고 하는데, 기본 사용자 권한은 Windows와 독립되어 동작한다.
이걸로 Linux 설치가 끝났다. 아주 간단하지 않은가.
Linux 환경 설정
Coral과 연결해 개발하기 위해선 필요한 라이브러리 설치가 우선해야 한다. 먼저 Ubuntu를 업데이트하고, Mendel Linux 개발 도구를 순차적으로 설치하자. (Mendel Linux는 Coral의 운영체제다) 이 모든 작업은 root권한으로 동작해야 하며, 이 때 비밀번호는 내 Windows 비밀번호와 같다. 다른 사례와 달리 Android 개발 도구가 불필요하다.
gloriashield@WORKS-HP-G400:~$ sudo su [sudo] password for gloriashield: root@WORKS-HP-G400:/home/gloriashield# root@WORKS-HP-G400:/home/gloriashield# apt-get update && apt-get upgrade -y root@WORKS-HP-G400:/home/gloriashield# pip3 install --user mendel-development-tool ... Successfully installed bcrypt-3.1.7 cffi-1.14.0 cryptography-2.9 ifaddr-0.1.6 mendel-development-tool-1.4.1 paramiko-2.7.1 pycparser-2.20 pynacl-1.3.0 zeroconf-0.25.1
Coral에서 초기 자주 언급되는 mdt가 정상 실행될까? mendel-development-tool을 설치했음에도 불구하고 mdt를 찾을 수 없다고 나올 것이다. 환경적 문제로 PATH에서 누락 되어 있기 때문. 어디에서든 실행할 수 있도록 alias 를 생성하자.
root@WORKS-HP-G400:/home/gloriashield# mdt Command 'mdt' not found, did you mean: root@WORKS-HP-G400:~# find . | grep mdt /root/.config/mdt /root/.config/mdt/attribs /root/.local/bin/mdt root@WORKS-HP-G400:~# ln -s /root/.local/bin/mdt /usr/bin/mdt
Ubuntu와 Coral 연결
Native Linux라 하더라도 모든 리소스는 Host의 것을 사용한다. 즉, Coral은 기본적으로 윈도와 연결되어 있어야 한다. Micro USB Type-B 케이블을 연결해 보자. 장치 관리자를 살펴보면 2개의 UART Bridge기기가 보인다. macOS 편에서 설명했던 것과 같이 우리에게 필요한 건 Enhanced COM Port. 아래 이미지에서 Enhanced COM Port는 COM3다. 이걸 기억하자. 이 포트번호는 컴퓨터에 따라 다르니 직접 확인해야 한다.
Google의 가이드를 참고해 cu*. tty*.* 생성되었는지 확인해 보면 찾을 수 없다고 나온다. 당연하다. 현재의 Ubuntu는 Windows에서 동작하고 리소스가 맵핑되어 있는 상태다. Ubuntu에서 봤을 때 위 Enhanced COM Port(COM3)는 그냥 COM3 다. 즉, ttyS3 인 것. 오히려 복잡하게 생각할 필요 없다. 가상 환경이라는걸 생각할 필요가 있다!
root@WORKS-HP-G400:/home/gloriashield# ls -al /dev/{cu,tty}*.* ls: cannot access '/dev/cu*.*': No such file or directory ls: cannot access '/dev/tty*.*': No such file or directory
스크린을 통해 ttyS3(COM3)를 보자. 전원을 인가하면 부트로더가 동작하는게 보이며 “Hit any key to stop autoboot:“에 아무키나 눌러 프롬포트 모드로 바꾸고, fastboot 0을 입력해 fastboot mode로 진입하자. 그리고 컴퓨터와 Type-C OTG 케이블 연결하자.
root@WORKS-HP-G400:/home/gloriashield# screen /dev/ttyS3 115200 Out: serial Err: serial BuildInfo: - ATF - U-Boot 2017.03.4 flash target is MMC:0 Net: Warning: ethernet@30be0000 using MAC address from ROM eth0: ethernet@30be0000 Fastboot: Normal Hit any key to stop autoboot: 0 u-boot=> fastboot 0
COM3가 ttyS3에 맵핑된것 처럼 ADB(Android Development Bridge)도 맵핑되지 않았을까? 생각할 수도 있겠지만 아니다. Windows의 Linux에서 맵핑되는것들은 일반적인(?) 리소스 한정이다. Ubuntu 에서 fastboot를 입력하면 디바이스를 찾을 수 없다고 나올 것이기 때문에 앞선 절차에서 ADB관련 도구를 Ubuntu에서 설치하지 않은 것. 그럼 Windows 에서는? 당연히 보인다.
C:\Devices>fastboot devices 1d1949d6f32ef62a fastboot
이 상태에서 Google의 가이드에 맞게 이미지를 설치하면 되며, 모든 설치가 끝나면 Coral의 로그인 화면이 보이게 된다.
Mendel GNU/Linux (day) arid-calf ttymxc0 arid-calf login:
네트워크 설정
Coral은 반드시 유선이건 무선이건 네트워크에 연결되어 있어야 한다. 유선이면 RJ45를 연결하는 즉시 DHCP Server(공유기)에서 IP를 받아올 것이다. Wi-Fi를 설정하는 방법은 간단하다. Ubuntu에서 Coral을 바로 로그인하고, nmtui 명령어를 사용해 WIFI 접속 설정만 해 주면 된다. 초기 계정은 mendel / mendel 이다.
Wi-Fi 설정은 “Activate a connection“에서 할 수 있다. 그리고 hostname을 적절하게 바꿔주자.(=Coral의 이름으로 네트워크상에 보이게 된다)
mendel@arid-calf:~$ nmtui
그리고 Coral의 reset버튼을 눌러 리부팅 해 주면 hostname이 반영 된 것을 볼 수 있다.
Mendel GNU/Linux (day) coral-gloriashield ttymxc0 coral-gloriashield login:
SSH 연결
Coral이 네트워크에 연결 되어 mdt devices에서 검색되는 것을 확인할 수 있다. 그럼 mdt의 pushkey 를 통해 키를 전달할 수 있을까? 그렇지 않다. Key Pair가 되어 있지 않기 때문에 연결이 불가능 하기 때문. 우린 이 화면을 Linux, macOS 모두 본 적 있다. (스크일을 잠시 빠져나올려면 CTRL+D 와 A 를 차례대로 누르면 됨. Ubuntu로 돌아온다.)
root@WORKS-HP-G400:/home/gloriashield# mdt devices coral-gloriashield (192.168.250.41) root@WORKS-HP-G400:/home/gloriashield# mdt shell Waiting for a device... Connecting to coral-gloriashield at 192.168.250.41 Looks like you don't have a private key yet. Generating one. Key not present on coral-gloriashield -- pushing It looks like you're trying to connect to a device that isn't connected to your workstation via USB and doesn't have the SSH key this MDT generated. To connect with `mdt shell` you will need to first connect to your device ONLY via USB. Cowardly refusing to attempt to push a key to a public machine.
Ubuntu에 연결되어 있는 Coral 콘솔을 열자. (아래 작업에서 screen -list / -R 은 위에서 잠시 빠져나왔던. 즉 백그라운드에서 동작중인 스크린에 다시 연결하라는걸 의미함)
root@WORKS-HP-G400:/home/gloriashield# screen -list There is a screen on: 44.tty1.WORKS-HP-G400 (04/22/20 10:16:21) (Detached) 1 Socket in /run/screen/S-root. root@WORKS-HP-G400:/home/gloriashield# screen -R 44.tty1.WORKS-HP-G400 Mendel GNU/Linux (day) coral-gloriashield ttymxc0 coral-gloriashield login: mendel Password: Last login: Tue Apr 21 10:01:04 UTC 2020 on tty7 Linux coral-gloriashield 4.14.98-imx #1 SMP PREEMPT Fri Nov 8 23:28:21 UTC 2019 aarch64 The programs included with the Mendel GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright.
그리고 ssh server의 설정을 바꾸고 재시작 하자. 말 그대로 비밀번호를 입력해 접속 하겠다는 의미
mendel@coral-gloriashield:~$ sudo vi /etc/ssh/sshd_config ... PasswordAuthentication yes ... mendel@coral-gloriashield:~$ sudo service sshd restart
Ubuntu에서 연결 할 수 있는지 확인해보자.
root@WORKS-HP-G400:/home/gloriashield# mdt devices coral-gloriashield (192.168.250.41) root@WORKS-HP-G400:/home/gloriashield# ssh [email protected] The authenticity of host '192.168.250.41 (192.168.250.41)' can't be established. ECDSA key fingerprint is SHA256:hZmVn9H0Fa+0/OxwZ3b+Th55nN2zvzeqIRaeAmzU8TI. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.250.41' (ECDSA) to the list of known hosts. [email protected]'s password: Linux coral-gloriashield 4.14.98-imx #1 SMP PREEMPT Fri Nov 8 23:28:21 UTC 2019 aarch64 The programs included with the Mendel GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Mendel GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Wed Apr 22 01:28:13 2020 mendel@coral-gloriashield:~$
이제 개발은 Ubuntu와 Coral에서 동시 진행이 가능하다. 이제 파워 케이블만 연결하면 된다. 초기화 하는 방법은 별반 차이 없지만, macOS에서라면? 아래 포스트를 참고하자.
감사합니다.
지금 usb download gadget 가 기타장치에서 설치가 되어버리는데
위에 올려주신 파일로 설치해도 마찬가지구요, 혹시 해결방법 아실까요?
이경우에는 레지스트리 등 등록된 정보를 모두 지우고, 시도하셔야 해요. 한번 드라이버가 꼬이면 진행이 막히는 경우가 있습니다. 기존에 설치된 드라이버 정보가 있어 갱신이 안되는 경우가 대부분 이더라고요.
저도 같은 상황인데…. 혹시 어떤 레지스트리의 정보를 삭제해야하나요?