본문 바로가기

공부

mbed os cli 개발 환경 구축 (python3)


mbed 워크샵을 다녀 왔다. 이런 시뮬레이션도 제공을 해 주고, 회원 가입을 한다면 아래와 같은 웹 컴파일러도 제공을 해 준다. 




 그런데, 실제로 이를 사용해 보니, 네트워크 상태에 따라서 시간도 많이 걸렸고, 당연하지만 인터넷이 연결되지 않는 환경에서는 사용할 수 없다는 단점이 있었다. 그래서 개인 노트북에 개발환경을 구축해 보았다. 개발자 페이지에 있는 설치 프로그램을 실행시키면 사실 문제가 없을 것이다.(사실 나는 이렇게 하지 않아서 장담할 수는 없지만...) 그렇지만, 조금 귀찮더라도 직접 하나하나 설치를 하면서 컴파일까지 가는 과정을 수행해 보았다. 이에 그 기록을 남긴다. 


 나의 개발 환경 : windows10 && python3.6.6 


 설치해야 할 것 : python && pip (앞서 보이듯이 나는 이미 설치가 되어 있었다. - python을 설치하면 pip은 같이 딸려 온다.), Git, Mercurial, mbed-cli, gcc compiler(mbed는 cortex-m계열 코어를 사용한다.) 다른 컴파일러를 사용해도 된다 IAR이라던지... 


 페이지에서는 python2를 쓰기를 권고하고 있다. 하지만 나는 이를 어기고(!!) python3를 사용해서 컴파일까지 성공했는데 그 기록을 남겨 본다. 일단, 위에서 설치하란 것을 다 설치했다면 cmd에서

1
$ mbed --version
cs

 이런 명령어를 입력했을 때 문제 없이 버젼을 뱉어 내야 한다. mbed cli 1.7.2 이상이여야 python3를 사용할 수 있다고 한다. 그럼 이제, 예제를 clone해서 컴파일을 시켜 볼 것이다. 앞서 Git과 Mercurial을 설치했는데 이런 부분을 위해서였던 것 같다. 


나는 c 드라이브에 새로운 폴더를 추가해서 작업을 했다. 


1
$ mbed import https://os.mbed.com/teams/mbed-os-examples/code/mbed-os-example-blinky/
cs


 이렇게 git clone을 쓰듯이 예제 파일을 끌어올 수가 있다. 참고로 이는 예제 소스만 가져오는 것이 아니라 mbed os까지 모두 끌어오는 것이어서 300 MB정도의 크기를 가진다. 시간이 오래 걸릴 수 있다. 어쨌던 간에 이렇게 폴더가 생겼다면 컴파일 & 빌드를 위한 설정을 해 주어야 한다.(따로 환경 변수를 설정하지 않고 이렇게 한다고 나는 이해했다. -- 어차피 mbed os가 있는 폴더 내에서 모두 할 것이니까.)


1
2
$ mbed config -G GCC_ARM_PATH "~\bin"
$ mbed config -G TOOLCHAIN "GCC_ARM"
cs


 위 커맨드를 입력해야 하는데 위에서 ~\bin이라고 해 놓은 부분에는 자신이 설치한 gcc compiler의 위치를 넣어야 한다. 예를 들어서 


1
Program Files (x86)\GNU Tools ARM Embedded\8 2018-q4-major\bin
cs


나는 이렇게 되어 있었다. 다시 말하지만 이것은 컴퓨터마다 다르다!!


1
$ mbed comfig --list
cs


 여기까지 했다면 위 커맨드를 입력했을 때 이런 화면이 보여야 한다. 



 나는 지금 import를 하지 않아서 유효한 프로그램이 없다고 나온다. 어쨌거나, import를 하고 그 폴더에 들어가서 빌드 타겟 설정을 해준다. 


1
$ mbed config TARGET "DISCO_L475VG_IOT01A"
cs

 

 자기 보드 이름을 적으면 될듯 하다. 이렇게 했으면 대망의 컴파일인데...


1
$ mbed compile -c
cs


 이렇게 했을 때, 아래와 같은 멋있는 화면이 나오면 성공이다. 그런데, 역시 이렇지 않았다. 



 생각을 되짚어 가면서 내가 잘못한 것이 무엇인가 의심하기 시작, 파이썬 3를 사용해서 그런가 하고 생각했다.(왜냐하면 옆에 계셨던 다른 분들은 파이썬 2를 썼는데 잘 해서 집에 돌아가셨다.) 그래서 그냥 집에 가서 파이썬 2깔고 다시 해야지 싶다가 남아서 삽질을 했다. (결론, 하기는... 함)


 우선, 자꾸만 파이썬 3랑 mbed os 5랑 안맞을 수도 있다고 하는데 무시해도 좋다. 


컴파일 커맨드를 입력했을 때, 필요한 파이썬 라이브러리들이 깔리고 있다고 뜬다. 여기서 문제가 생긴 듯 해서 이것을 하나하나 pip install로 설치했다. - 나는 처음에 했을 때 몇 가지가 설치된 것 같아 missing이라고 뜨는 것들만 따로 복사해서 이 과정을 수행했다. mbed-os폴더에 requirement라는 텍스트 파일이 있는데, 여기 있는 것들을 수작업으로 해 주었다고 해도 무방하다. 


이렇게 하면서 에러가 뜨는 것들이 있었는데, 그런 것들은 그냥 버전 옵션을 무시하고 설치해 주었다. (사실상 에러가 뜨지 않을 때까지 그냥 무작정 한 것이다.)


 그런데 이렇게 해 주어도 되질 않는 것이다. 문제의 에러는 다음과 같다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
  File "C:\Users\tge13\workshop\mbed-os-example-blinky\mbed-os\tools\make.py", line 40in <module>
    from tools.options import get_default_options_parser
  File "C:\Users\tge13\workshop\mbed-os-example-blinky\mbed-os\tools\options.py", line 24in <module>
    from .toolchains import TOOLCHAINS
  File "C:\Users\tge13\workshop\mbed-os-example-blinky\mbed-os\tools\toolchains\__init__.py", line 43in <module>
    from ..config import (ConfigException, RAM_ALL_MEMORIES, ROM_ALL_MEMORIES)
  File "C:\Users\tge13\workshop\mbed-os-example-blinky\mbed-os\tools\config\__init__.py", line 37in <module>
    from ..arm_pack_manager import Cache
  File "C:\Users\tge13\workshop\mbed-os-example-blinky\mbed-os\tools\arm_pack_manager\__init__.py", line 2in <module>
    from urllib2 import urlopen, URLError
  File "c:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\urllib2.py", line 220
    raise AttributeError, attr
                        ^
SyntaxError: invalid syntax
cs


 파이썬 문법 에러...?? 잘 살펴보면 urllib2 / raise ~~, ~~ 이런 문법 구조는 모두 파이썬 2에 해당되는 것들이다. 나는 파이썬 3를 쓰고 있었으니까 문법 오류가 난 것이었다. 그래서 문제의 mbed-os-example-blinky\mbed-os\tools\arm_pack_manager\__init__.py를 가 보았다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
try:
    from urllib2 import urlopen, URLError
except ImportError:
    from urllib.request import urlopen, URLError
from bs4 import BeautifulSoup
from os.path import join, dirname, basename
from os import makedirs
from errno import EEXIST
from threading import Thread
try:
    from Queue import Queue
except ImportError:
    from queue import Queue
from re import compile, sub
from sys import stderr, stdout
from itertools import takewhile
import argparse
from json import dump, load
from zipfile import ZipFile
from tempfile import gettempdir
import warnings
from distutils.version import LooseVersion
 
from tools.flash_algo import PackFlashAlgo
 
warnings.filterwarnings("ignore")
 
from fuzzywuzzy import process
 
cs


이렇게 시작하는 파일이다. 잠만... 그럼 나는 파이썬 3를 우선 고려한 것이니까?? 하면서 제일 위의 두 경우를 바꾸어 주었다. 


1
2
3
4
try:
    from urllib.request import urlopen, URLError
except ImportError:
    from urllib2 import urlopen, URLError
cs




짜란, 결과는?? 성공이다 ㅋㅋㅋㅋㅋ 참고로 완성된 이미지 파일의 경로를 알려 주는데 이걸 그냥 usb로 연결된 mbed 보드에 드래그 해 주기만 하면 알아서 인식한다~ 내일도 가서 잘 들어야 겠당

'공부' 카테고리의 다른 글

SLAM 공부했다 - (2)  (0) 2019.01.26
RTOS 시스템 mbed os - thread 정리  (0) 2019.01.25
SLAM 공부했다.  (0) 2019.01.18
백준 - 1009번  (0) 2019.01.16
파이썬 - 리스트 중간 수정  (0) 2019.01.16